zoukankan      html  css  js  c++  java
  • Live2D 看板娘

      在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。

      这一部分有很多限制和注意事项,一定要仔细阅读开发文档。因为注意事项很多,这里就不一一列举说明了,只会提及代码功能涉及到的内容,而且,微信开发文档也是持续更新的,随时都在变化,我列举了意义也不大,不如随时查看最新文档~

      群发消息目录如下图:

      我们不全都操作,只实践其中的一部分(根据标签进行群发、根据openID进行群发、删除群发、预览接口、查询群发消息发送状态)。由于我使用的是接口测试号,对这一部分有限制,所以我只是搭建了内容,没有进行测试。

      在wechat.js文件中,添加url配置项和相关方法:

        //群发消息
        mess: {
            tag: prefix + 'message/mass/sendall?',
            openId: prefix + 'message/mass/send?',
            del: prefix + 'message/mass/delete?',
            preview: prefix + 'message/mass/preview?',
            check: prefix + 'message/mass/get?'
        }
    //在weChat的原型链上增加sendByTag方法 用来根据标签群发消息--订阅号
    weChat.prototype.sendByTag = function(type, message, tagId) {
        var that = this;
        //请求体参数
        var msg = {
            filter: {},
            msgtype: type
        };
    
        msg[type] = message;
        //对传入的用户标签进行判断 如果有就针对用户发消息 如果没有就对所有用户发消息
        if (!tagId) {
            msg.is_to_all = true
        } else {
            msg.filter = {
                is_to_all: false,
                tag_id: tagId
            }
        };
    
        return new Promise(function(resolve, reject) {
            that
                .fetchAccessToken()
                .then(function(data) {
                    var url = api.mess.tag + 'access_token=' + data.access_token;
    
                    //使用request发起请求
                    request({
                            method: 'POST',
                            url: url,
                            body: msg,
                            json: true
                        })
                        .then(function(response) {
                            var _data = response.body;
                            if (_data) {
                                resolve(_data);
                            } else {
                                throw new Error('Send to TagUser fail');
                            };
    
                        })
                        .catch(function(err) {
                            reject(err);
                        });
                });
        });
    };
    
    //在weChat的原型链上增加sendByOpenId方法 用来根据openID群发消息--服务号
    weChat.prototype.sendByOpenId = function(type, message, openIds) {
        var that = this;
        //请求体参数
        var msg = {
            msgtype: type,
            touser: openIds
        };
    
        msg[type] = message;
    
        return new Promise(function(resolve, reject) {
            that
                .fetchAccessToken()
                .then(function(data) {
                    var url = api.mess.openId + 'access_token=' + data.access_token;
    
                    //使用request发起请求
                    request({
                            method: 'POST',
                            url: url,
                            body: msg,
                            json: true
                        })
                        .then(function(response) {
                            var _data = response.body;
                            if (_data) {
                                resolve(_data);
                            } else {
                                throw new Error('Send message by openid is fail');
                            };
    
                        })
                        .catch(function(err) {
                            reject(err);
                        });
                });
        });
    };
    
    //在weChat的原型链上增加delMess方法 用来删除群发消息
    weChat.prototype.delMess = function(msgId) {
        var that = this;
    
        return new Promise(function(resolve, reject) {
            that
                .fetchAccessToken()
                .then(function(data) {
                    var url = api.mess.openId + 'access_token=' + data.access_token;
    
                    var form = {
                        msg_id: msgId
                    }
    
                    //使用request发起请求
                    request({
                            method: 'POST',
                            url: url,
                            body: form,
                            json: true
                        })
                        .then(function(response) {
                            var _data = response.body;
                            if (_data) {
                                resolve(_data);
                            } else {
                                throw new Error('Delete message is fail');
                            };
    
                        })
                        .catch(function(err) {
                            reject(err);
                        });
                });
        });
    };
    
    //在weChat的原型链上增加previewMess方法 用来预览群发消息
    weChat.prototype.previewMess = function(type, message, openId) {
        var that = this;
        //请求体参数
        var msg = {
            msgtype: type,
            touser: openId
        };
    
        msg[type] = message;
    
        return new Promise(function(resolve, reject) {
            that
                .fetchAccessToken()
                .then(function(data) {
                    var url = api.mess.preview + 'access_token=' + data.access_token;
    
                    //使用request发起请求
                    request({
                            method: 'POST',
                            url: url,
                            body: msg,
                            json: true
                        })
                        .then(function(response) {
                            var _data = response.body;
                            if (_data) {
                                resolve(_data);
                            } else {
                                throw new Error('Preview message fail');
                            };
    
                        })
                        .catch(function(err) {
                            reject(err);
                        });
                });
        });
    };
    
    //在weChat的原型链上增加checkMess方法 用来查询群发消息发送状态
    weChat.prototype.checkMess = function(msgId) {
        var that = this;
        
        return new Promise(function(resolve, reject) {
            that
                .fetchAccessToken()
                .then(function(data) {
                    var url = api.mess.check + 'access_token=' + data.access_token;
    
                    var form = {
                        msg_id: msgId
                    };
    
                    //使用request发起请求
                    request({
                            method: 'POST',
                            url: url,
                            body: form,
                            json: true
                        })
                        .then(function(response) {
                            var _data = response.body;
                            if (_data) {
                                resolve(_data);
                            } else {
                                throw new Error('check message fail');
                            };
    
                        })
                        .catch(function(err) {
                            reject(err);
                        });
                });
        });
    };

      回复策略测试我不加了,加了也跑不通,哈哈,有认证了的订阅号和服务号的同学可以试试~

      注意:因为官方文档是处于更新状态的,所以后面关于微信公众号的知识点,可能跟最新的文档有一定的差异,所以开发的时候还是要以最新的文档为准。

  • 相关阅读:
    mysql分区表批量添加/删除range按天分区(int类型)
    mysql分区表批量添加/删除range按天分区(datetime类型)
    使用obd离线安装oceanbase
    mysqldump导出数据自增属性丢失案例
    Docker启动镜像并设置开机自启
    Docker启动mysql与elasticsearch以及nginx的命令
    Redis学习--从节点过期键清理策略
    Redis学习--渐进式rehash实现原理
    Redis学习--主节点过期键清理策略
    Redis学习--慢日志信息
  • 原文地址:https://www.cnblogs.com/jiangtengteng/p/9402743.html
Copyright © 2011-2022 走看看