微信小程序 python 发送订阅消息

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)

官网的接口文档:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html

请求参数

属性类型默认值必填说明
access_tokenstring接口调用凭证
touserstring接收者(用户)的 openid
template_idstring所需下发的订阅模板id
pagestring点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
dataObject模板内容,格式形如 { “key1”: { “value”: any }, “key2”: { “value”: any } }
miniprogram_statestring跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
langstring进入小程序查看”的语言类型,支持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')

Leave a Comment

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据