发表于2020-03-222020-04-03 作者 wind
import requests, json
appid = 'xxxxx';
appSecret = 'xxxxxxx';
url_access_token = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appid + '&secret=' + appSecret
tokenRes = requests.get(url_access_token)
token = json.loads(tokenRes.text).get('access_token')
print(token)
url_msg = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send'
body = {
"touser": "oyLvs4hcubi5-FhfYVqH2VJGKIN4", # 也就是OPENID
"template_id": "Ou27mwu5QLHaL-sxYfka1eecqHhyuXxllHKVuZTUIN0",
"page": "pages/index/index",
"form_id": "FORMID", # 这个应该是来源场景值ID吧,我这里没有用到
"data": {
"date2": {
"value": "2020-03-19 14:35:30"
},
"thing3": {
"value": "firegod"
},
"thing7": {
"value": "服务器内存低于256MB"
}
}
}
res = requests.post(url=url_msg, params={
'access_token': token # 这里是我们上面获取到的token
}, data=json.dumps(body, ensure_ascii=False).encode('utf-8'))
print(res.text)
官网的接口文档:
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
access_token | string | 是 | 接口调用凭证 | |
touser | string | 是 | 接收者(用户)的 openid | |
template_id | string | 是 | 所需下发的订阅模板id | |
page | string | 否 | 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 | |
data | Object | 是 | 模板内容,格式形如 { “key1”: { “value”: any }, “key2”: { “value”: any } } | |
miniprogram_state | string | 否 | 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 | |
lang | string | 否 | 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN |
模板消息、统一消息、订阅消息,我也是醉了,这么多种消息接口,一开始就没找对,所以遇到了一个返回模板id怎么都不对的错误。从接口文档可以看出使用`miniprogram_state` 参数来确定是在哪个环境中发送。
这里需要注意一个问题 ,就是python默认编码问题,如果json中有中文或其他ASCII之外的字符,需要设置字符集为utf-8
if sys.getdefaultencoding() != 'utf-8':
reload(sys)
sys.setdefaultencoding('utf-8')