微信⼩程序关联公众号(服务号)推送通知消息 一准备条件 预备知识: ⼩程序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 = 'https://api./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 Trueelse:return False