介绍
给微信公众号用户主动推送消息指的是发送模板消息。可以随时给用户发送提醒。功能非常丰富,比如提醒用户特定事件(该付费了,商品降价,任务执行成功,遇到错误等等)。
不仅可以向用户发送文字消息,还可以实现用户点击后跳转指定网页或小程序。
限制
但是该功能也受到很多限制。模板消息顾名思义,只能根据模板发送消息,模板可以从模板库选择,也可以自己创建,但是必须通过审核才能使用。而且只有微信公众号可以使用模板消息,且要通过微信认证(目前的条件是必须要有营业执照才能注册公众号,个人注册的是订阅号,无法通过微信认证)
准备步骤
- 通过微信认证
- 另外要发送消息,先要绑定用户 openid,具体操作请间我前一篇文章:django 微信公众号开发 - 获取授权 绑定用户微信 openid
官方文档
官方文档写的比较复杂,而且没有示例代码。
微信模板消息官方文档:https://developers.weixin.qq....
添加模板
这时候需要记下模板 id
获取 access token
接口详情
https请求方式: GET https://api.weixin.qq.com/cgi...
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
grant_type | 是 | 获取access_token填写client_credential |
appid | 是 | 第三方用户唯一凭证 |
secret | 是 | 第三方用户唯一凭证密钥,即appsecret |
返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
代码
exp_time = 0
access_token = ''
def get_access_token():
global exp_time, access_token
if time.time() > exp_time:
r = requests.get('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET')
d = json.loads(r.text)
access_token = d['access_token']
exp_time = time.time() + d['expires_in'] - 10 # 减一点防止快到时间的时候已经失效了
return access_token
调用接口,发送模板消息
接口详情
http请求方式: POST https://api.weixin.qq.com/cgi...
POST数据说明
POST数据示例如下:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"miniprogram":{
"appid":"xiaochengxuappid12345",
"pagepath":"index?foo=bar"
},
"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 | 否 | 模板内容字体颜色,不填默认为黑色 |
注:url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
返回码说明
在调用模板消息接口后,会返回JSON数据包。正常时的返回JSON数据包示例:
{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}
代码
def send_msg(idx):
users = UserProfile.objects.filter(school=request.user.userpro file.school, user_type='工作人员', vacation_manage=True)
data = {
"touser":"OPENID",
"template_id":"xxxxxxxxx",
"url":"https://xxxx.com/view/%d/" % idx,
"data":{
"first": {
"value": "",
"color": "#173177"
},
"keyword1":{
"value": '',
"color":"#173177"
},
"keyword2": {
"value": data,
"color":"#173177"
},
"keyword3": {
"value": '',
"color":"#173177"
},
"remark":{
"value": description,
"Data": description,
"color":"#173177"
}
}
}
for u in users:
if u.openid:
data['touser'] = u.openid
url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + get_access_token()
r = requests.post(url, json.dumps(data))
欢迎来到我的博客:https://codeplot.top/
技术分类文章
微信公众号开发分类文章~~~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。