文章目录
1. 背景
接到需求,产品希望实现微信公众号定时发送消息给不同客户
2. 思路
微信定时发送消息,首先想到的是手动群发,但是一来是手动的,二来有限制,模板消息群发限制也不少,最后决定用客服消息,定时框架用Quartz。ps:客服消息只能发送给48小时内的活跃用户(有互动的用户),所以还是选用模板消息了。
需求中有说明对于不同分组的用户其获得消息的时间是不同的,这样一来只写一个调度器
用到的接口
- 创建标签
http请求方式:POST(请使用 https 协议) https://api.weixin.qq.com/cgi-bin/tags/create?access_token=ACCESS_TOKEN
POST数据格式:JSON POST数据示例:
{ "tag" : { "name" : "广东"//标签名 } }
- 获取公众号已创建的标签
http请求方式:GET(请使用 https 协议) https://api.weixin.qq.com/cgi-bin/tags/get?access_token=ACCESS_TOKEN
返回值中包含所有标签的信息,我们需要使用的是其中的id信息和name信息 - 获取标签下粉丝列表
http请求方式:POST(请使用 https 协议) https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token=ACCESS_TOKEN
POST数据格式:JSON POST数据例子:
{ "tagid" : 134, "next_openid":""//第一个拉取的OPENID,不填默认从头开始拉取 }
- 模板消息接口
首先自己去开通模板消息功能(必须是服务号)
模板消息接口申请及模板创建
通过接口调用的方式来获取帐号下所有模板信息,具体如下:
接口调用请求说明
http请求方式:GET https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=ACCESS_TOKEN
正确调用后的返回示例:
{
"template_list": [{
"template_id": "iPk5sOIt5X_flOVKn5GrTFpncEYTojx6ddbt8WYoV5s",
"title": "领取奖金提醒",
"primary_industry": "IT科技",
"deputy_industry": "互联网|电子商务",
"content": "{ {result.DATA} }\n\n领奖金额:{ {withdrawMoney.DATA} }\n领奖 时间: { {withdrawTime.DATA} }\n银行信息:{ {cardInfo.DATA} }\n到账时间: { {arrivedTime.DATA} }\n{ {remark.DATA} }",
"example": "您已提交领奖申请\n\n领奖金额:xxxx元\n领奖时间:2013-10-10 12:22:22\n银行信息:xx银行(尾号xxxx)\n到账时间:预计xxxxxxx\n\n预计将于 xxxx 到达您的银行卡"
}]
}
发送模板消息
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
POST数据说明
POST数据示例如下:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"miniprogram":{
"appid":"xiaochengxuappid12345",
"pagepath":"index?foo=bar"
},
"client_msg_id":"MSG_000001",
"data":{
"first": {
"value":"恭喜你购买成功!",
"color":"#173177"
},
"keyword1":{
"value":"巧克力",
"color":"#173177"
},
"keyword2": {
"value":"39.8元",
"color":"#173177"
},
"keyword3": {
"value":"2014年9月22日",
"color":"#173177"
},
"remark":{
"value":"欢迎再次购买!",
"color":"#173177"
}
}
}
参数说明
| 参数 | 是否必填 | 说明 |
|---|---|---|
| touser | 是 | 接收者openid |
| template_id | 是 | 模板ID |
| url | 否 | 模板跳转链接( |
| miniprogram | 否 | 跳小程序所需数据,不需跳小程序可不用传该数据 |
| appid | 是 | 所需跳转到的小程序appid(该小程序 appid 必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏) |
| pagepath | 否 | 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏 |
| data | 是 | 模板数据 |
| color | 否 | 模板内容字体颜色,不填默认为黑色 |
| client_msg_id | 否 | 防重入id。对于同一个openid + client_msg_id, 只发送一条消息,10分钟有效,超过10分钟不保证效果。若无防重入需求,可不填 |
注:url和 miniprogram 都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
返回码说明
在调用模板消息接口后,会返回 JSON 数据包。正常时的返回 JSON 数据包示例:
{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}
3. 实现版本1.0
在初次实现中,选用Quartz框架来做定时任务,定时发送模板消息给所有关注用户
没有达到实现目标,实现目标是根据不同公司的自定义要求,在指定时间推送给该公司所有未点餐的用户,已点餐用户不会接受到。
首先,对于自定义时间的需求没有完成的原因是没有找到可以动态配置的定时任务设置方法,对于已点餐和未点餐用户的无法区分的原因在于自己的系统数据和微信的用户数据没有关联起来。且微信是不允许服务号主动获取用户的昵称等信息,只告诉你用户的编号。
4万+

被折叠的 条评论
为什么被折叠?



