作为首批入坑微信小程序的开发者,相信大家和我一样,或多或少对微信小程序开发都有着一些难以接受的地方,就比如,最受不了的就是小程序官方对接口对改动,还记得当年小程序的 getUserInfo
接口大变更之后,让开发者们摸不着头脑,下面截了几个当时社区公告下几个评论的图:
官方公告:
https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01?highLine=%25E7%2594%25A8%25E6%2588%25B7%25E4%25BF%25A1%25E6%2581%25AF 放这里了,大家娱乐一下就行哈!
这事还没过去多久,腾讯爸爸又准备废弃掉一些接口了,比如最近要废弃掉模版消息接口,改用订阅消息。看到消息的时候,难受,有得改代码了,不过这个订阅消息是好是坏,还不清楚,先亲自体验一下再说。
订阅消息和模版消息最大的不同之处在于需要用户主动触发点击事件之后才能给用户发消息,订阅消息不像模版消息一样有7天的时间限制,这个应该是它最大的一个优势所在了。
话不多说先进小程序配置一下,和模版消息一样首先需要添加一个模版。
配置完模版后可以拿到一个模版的ID
直接撸代码,先在app.json
中加个页面(防止跟其他业务页面混在一起)。
"pages": [
"pages/subscribe-msg/index",
]
wxml 里加个按钮先,并且得绑定点击事件
<button type="warn" bindtap="sendMsg" plain="true">我要订阅</button>
接下来就是这个按钮的点击触发 requestSubscribeMessage()
的过程,tmplIds 就是刚刚在平台添加的模版 ID。
sendMsg: function(e) {
wx.requestSubscribeMessage({
tmplIds: ['KLZzqLieZkL3Bm6T2JiatK-QGR3sK1XPPrgtSfgDePU'],
success(res) {
console.log(res)
},
complete(res) {
console.log(res)
}
})
}
在开发工具上点击试了下,它给我看这个:
那就真机玩一波:
点击之后会弹出个框,勾选下面的“总是保持以上的选择,不再询问”,那用户下次点击这个按钮之后就不会在出现该提示框。
控制台输出如下,看来成功了,嘿嘿。
要想让微信给你发小卡片,最终还是要写后端逻辑段(我把微信推送消息的过程称为发小卡片),下面以 Python 为例。
TIME_OUT = 30
APP_ID = "" # 填自己的 app_id
APP_SECRET = "" # 填自己的 app_secret
def get_access_token():
"""
获取Access Token
:return:
"""
data = {'grant_type': 'client_credential', 'appid': APP_ID, 'secret': APP_SECRET}
response = requests.get('https://api.weixin.qq.com/cgi-bin/token', params=data, timeout=TIME_OUT)
access_token = response.json().get('access_token')
return access_token
def subscribe_push(openid, values, template_id, redirect):
"""
发生订阅消息
:param openid:
:param values:
:param template_id:
:param redirect:
:return:
"""
access_token = get_access_token()
data = {
"touser": openid,
"template_id": template_id,
"page": redirect,
"data": {
'thing1': {
'value': values['thing1'],
},
'time5': {
'value': values['time5'],
},
'thing6': {
'value': values['thing6'],
},
'name8': {
'value': values['name8'],
}
},
"emphasis_keyword": ""
}
url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={}'.format(access_token)
return requests.post(url, json=data, timeout=TIME_OUT)
if __name__ == '__main__':
values = {
"thing1": "计算机组成原理",
"time5": "10:30",
"thing6": "东四301",
"name8": "孙洁"
}
res = subscribe_push(openid="scWv90DlkjasdSDfs_RHdfHhO2Fk", values=values,
template_id="KLZzqLieZkL3Bm6T2JiatK-QGR3sK1XPPrgtSfgDePU", redirect="pages/index/index")
print(res.text)
下发小卡片成功了,哈哈。
订阅消息替换成模版消息之后,少了 form_id 的收集,这一点很赞,存这玩意真的烦,还会自己过期,总的来说,个人觉得订阅消息应用场景会比模版消息的应用会更加广泛、更加灵活。但因为小程序但限制,只有部分类目支持长期订阅。