⼩程序关联(服务号)推送通知消息
⼀、背景
最近开发的⼀个⼩程序项⽬需要通过服务号来推送通知。但是在最开始开发⼩程序的时候并没有考虑到这个功能。
我在做⼩程序与服务号⽤户关联的过程中也是踩了⽆数坑,所以我会在这篇⽂章中给出⾃⼰摸索出的解决⽅案。
⼆、准备条件
预备知识:
⼩程序openid:⼩程序⽤户的唯⼀id
openid:⽤户的唯⼀id
unionid:同⼀⽤户,对同⼀个开放平台下的不同应⽤,unionid是相同的
准备:
1.将⼩程序与绑定(绑定后才可获取unionid),官⽅⽂档:
2.接⼊公众平台开发,也就是给服务号配置⼀下开发者服务器。当有⽤户关注/取消服务号时,服务器会推送关注/取消的事件给我们的服务器。官⽅⽂档:
3.获取⽤户列表,即所有⽤户的openid。官⽅⽂档:
4.通过openid获取⽤户的unionid。官⽅⽂档:
5.推送服务号消息。官⽅⽂档:
注意:
1.在上述的⼀些接⼝中,需要获取access_token。⼩程序和的access_token是不同的,需要⽤各⾃的appid和secret去获取。
2.access_token每天只能获取200次,有效期是7200秒。所以应该把它加⼊缓存,⽽不是每次都去获取新的access_token。
三、开始开发
将⼩程序⽤户与⽤户关联:
⼩程序⽤户openid→unionid←⽤户openid
要想将⼩程序与⽤户关联,第⼀件事就是获取⽤户的unionid。
我们可以在两种情况下获取⽤户的unionid:
⼀、如果⽤户已经关注了,那么在⽤户登录的时候,就可以获取到unionid
⼆、如果⽤户没有关注,那么得让前端调⽤wx.getUserInfo,把加密数据给后端解密拿到unionid。
解密需要session_key,⽽session_key⼜有有效期,得注意它过期的情况。
当⽤户关注时,会推送事件给我们(本⽂准备条件的第2条)。
通过关注事件,我们可以拿到⽤户的openid,再获取unionid(本⽂准备条件的第4条)。拿到unionid后,去数据库查询这个unionid的⽤户,并把openid保存。
但是,还有两个情况没有考虑到:
⼀、在我们开发之前,已经关注了的⽤户没有去关联
解决⽅案:
获取的⽤户列表,再依次获取⽤户unionid(本⽂准备条件的第3、4条)。注意,此操作⾮常耗时。
⼆、⽤户先关注了,但是从来没⽤过⼩程序(数据库⾥没有unionid,导致⽆法关联)
解决⽅案:
新建⼀张表,把这个⽤户先记录下来。当⼩程序⽤户登录时,先检查⼀遍这张表尝试关联。
⾄此,⼩程序⽤户与⽤户就已经完成了关联。
发送模版消息:
写文章的小程序这个就很简单了,照着官⽅⽂档(本⽂准备条件的第5条)做就⾏了。
需要注意的是,参数别写错了,我就是把miniprogram放到data⾥⾯去了,搞的不能跳转⼩程序,害得我了半天问题T T 最后附上发送模版消息的python代码:
def send_oa_msg(oa_openid, template_id, jump_param, param):
"""
发送模版消息
"""
oa_token = get_oa_access_token()
url = 'api.weixin.qq/cgi-bin/message/template/send?access_token={oa_token}'.format(oa_token=oa_token)
post_data = {
"touser": oa_openid,
"template_id": template_id,
"miniprogram": jump_param,
"data": param
}
res = requests.post(url, json=post_data)
result = res.json()
if result['errcode'] == 0:
return True
else:
return False
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论