给微信公众号用户主动推送消息指的是发送模板消息。能够随时给用户发送提醒。功能很是丰富,好比提醒用户特定事件(该付费了,商品降价,任务执行成功,遇到错误等等)。html
不只能够向用户发送文字消息,还能够实现用户点击后跳转指定网页或小程序。python
可是该功能也受到不少限制。模板消息顾名思义,只能根据模板发送消息,模板能够从模板库选择,也能够本身建立,可是必须经过审核才能使用。并且只有微信公众号可使用模板消息,且要经过微信认证(目前的条件是必需要有营业执照才能注册公众号,我的注册的是订阅号,没法经过微信认证)django
官方文档写的比较复杂,并且没有示例代码。json
微信模板消息官方文档:https://developers.weixin.qq....小程序
这时候须要记下模板 idapi
https请求方式: GET https://api.weixin.qq.com/cgi...
参数说明微信
参数 | 是否必须 | 说明 |
---|---|---|
grant_type | 是 | 获取access_token填写client_credential |
appid | 是 | 第三方用户惟一凭证 |
secret | 是 | 第三方用户惟一凭证密钥,即appsecret |
返回说明app
正常状况下,微信会返回下述JSON数据包给公众号:post
{"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/
技术分类文章
微信公众号开发分类文章~~~~