公众号粉丝推送模板消息属于常见运营需求,然而,要是粉丝是经小程序跳转关注的,那怎样精准寻找到他们并予以推送呢?此背后存在一套基于微信开放平台的账号绑定逻辑 。
开放平台是核心枢纽
欲达成小程序用户跟公众号用户间的关联,需借助微信开放平台才行。你得去注册一个开放平台账号,还要完成企业主体的微信认证。之后,把你的微信小程序以及微信服务号都绑定于这个开放平台账号之下。这是尤为关键的一步,毕竟绑定之后,系统方可识别出归属于同一个微信用户于不同场景里的身份标识。
绑定完成之后,开放平台会给每一个用户造出一个独一份的UnionID。不管该用户是借由小程序登录,还是去关注公众号,其UnionID都是一样的。而小程序以及公众号各自单独的用户标识,分别为OpenID。模板消息的发送对象,恰恰就是公众号体系当中的这个OpenID。
服务号与小程序的前置认证
得是服务号,你的那个公众号非得是服务号才行,为啥,因为只有服务号才能够去使用高级接口,包含发送模板消息这一项。服务号,同样也是要完成微信认证的,而且每年还得缴纳300元审核费。小程序端,同样也需要完成微信认证,以此来确保有获取用户OpenID等基本权限。
uni.request({
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的APPID&secret=你的APPsecret',
method: 'GET',
success: res => {
console.log(res)
let access_token = res.data.access_token
},
fail: res => {
console.log(res);
}
})
处在开发阶段之时,小程序需要去设计微信授权登录功能,当用户首次进行使用之际,要获取其小程序的OpenID与UnionID,并且将之存储到你的业务数据库,这给用户后续的关联奠定了基础。
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200
}
建立用户关联关系
在所当有用户去关注你所拥有的服务号这样一种情况之下,微信服务器会朝着你的这个位于后端的部分派发发送一个关于关注事件的通知。你的此服务器当然是必然会需要来设法监听这个特定的事件,在其接收到这个通知之际嘛,调用微信方面所提供的对应接口去获取那个关注了的用户的公众号OpenID以及其UnionID,最终会把这些相关必要信息存入到数据库之中 。
运用对比数据库里已存放的小程序用户的UnionID这种方式,便可把同一个用户于小程序方面以及公众号方面的身份相互关联起来。一般而言,会在用户数据表当中增添字段,把两端的OpenID跟同一个UnionID予以绑定。
uni.request({
url: 'https://api.weixin.qq.com/cgi-bin/user/get?next_openid=&access_token=' + access_token,
method: 'GET',
success: res => {
console.log(res)
},
fail: res => {
console.log(res);
}
})
处理取消关注的情况
{
"total":2,
"count":2,
"data":{
"openid":["OPENID1","OPENID2"]},
"next_openid":"NEXT_OPENID"
}
有可能处于随时状况下的用户会取消对于公众号的关注,而你的系统是必须能够处理如此这般情况的。当用户实施取消关注这一行为的时候,微信服务器同样是会发送事件通知的。你的后端在监听到取消关注所引发的事件之后,应当即刻去更新数据库。
通常的做法是,将该用户的公众号OpenID标记成“已取消关注”的状态,或者直接解除其跟小程序账号的关联关系。要是不进行处理,后续给一个已取消关注的OpenID发送模板消息,就会致使发送失败,浪费接口调用的次数。
触发与发送模板消息
uni.request({
url: "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=用户openID" + "&lang=zh_CN",
method: 'GET',
success: res => {
console.log(res)
},
fail: res => {
console.log(res);
}
})
当用户于小程序之内搞定了特定业务行为,像支付成功、预约完成这般,你的业务系统就得触发消息发送,这时,依据该小程序的用户ID,去查其关联的公众号OpenID,而后,调用微信服务号的模板消息发送接口。
在公众号后台,你要预先按要求申请,以此顺利添加消息模板,这之后去获取模板ID。当进行发送操作时,要传入公众号OpenID,还要传入模板ID,以及提前设计好的消息内容数据。最终,消息借公众号的名义,推送到用户的微信聊天列表里。
{
"subscribe": 1,
"openid": "",
"nickname": "",
"sex": 1,
"language": "",
"city": "",
"province": "",
"country": "",
"headimgurl":"头像",
"subscribe_time": ,
"unionid": " "
"remark": "",
"groupid": 0,
"tagid_list":[],
"subscribe_scene": "",
"qr_scene": 98765,
"qr_scene_str": ""
}
迁移至服务端的重要性
示例代码有可能在前端小程序里进行调用,然而在实际的生产环境当中,发送模板消息这类敏感操作是一定要迁移到服务端去执行的。前端代码是比较容易被破解的,会致使关键的接口调用凭证(像是AccessToken)以及业务逻辑被暴露。
在服务端,你能够安全地对凭证予以管理,能够存储用户关联关系,能够处理事件通知,还能够发起消息推送。这确保了整个流程具备安全性以及稳定性,并且符合微信官方所规定的安全规范。
于实际开发期间,你究竟是抉择自行构建此用户绑定体系,还是借助既有的第三方用户管理工具去简化流程呢?若对此存有见解,欢迎于评论区分享自身经验以及所遭遇的难题,要是认为本文对你具备助益,请点赞予以支持。
uni.request({
url: "https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=" + access_token,
method: 'POST',
header: {
"Content-Type": "application/json"
},
data: {
"user_list": [{
"openid": "",
"lang": "zh_CN"
}]
},
success: res => {
console.log(res)
},
fail: res => {
console.log(res);
}
})

全国服务热线