8 微信公众号--群发消息接口简略部署

Posted 姜腾腾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8 微信公众号--群发消息接口简略部署相关的知识,希望对你有一定的参考价值。

  在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)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);
                    });
            });
    });
};

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

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

 

以上是关于8 微信公众号--群发消息接口简略部署的主要内容,如果未能解决你的问题,请参考以下文章

微信推送信息功能

微信公众号开发之群发消息

asp群发微信公众号模板消息代码

httpClient实现微信公众号消息群发

.net微信公众号开发——群发消息

JAVA微信公众号开发回复消息能回复多条吗?具体怎么代码实现?