通过小程序向用户发送模板消息
方法:公众号申请开启模板消息功能,并且申请一个模板。然后,通过微信的网站API获取AccessToken,通过AccessToken给指定用户发送模板消息。
关键问题:公众号下用户的openid和小程序下用户的openid是不同的。因此,需要在数据库里把每个用户的unionid存起来,然后join查询。
因此,必须申请一个微信开放平台账号,然后关联公众号和微信号。
步骤一:注册微信开放平台
申请微信开放平台账号,并绑定小程序和公众号
开放平台地址:https://open.weixin.qq.com/
步骤二:存储 公众号openid<=>unionid
通过接口,将公众号粉丝的openid对应到unionid上,并存储到数据库中
访问示例
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPEN_ID&lang=zh_CN&=
返回数据示例
取消关注/未关注公众号用户返回数据
object(stdClass)#17 (10) { ["subscribe"]=> int(0) ["openid"]=> string(28) "ohf9awblp6M898m21w-sSIck" ["nickname"]=> string(0) "" ["sex"]=> int(0) ["language"]=> string(5) "zh_CN" ["city"]=> string(0) "" ["province"]=> string(0) "" ["country"]=> string(0) "" ["headimgurl"]=> string(0) "" ["tagid_list"]=> array(0) { } }
已关注用户返回数据
object(stdClass)#18 (17) { ["subscribe"]=> int(1) ["openid"]=> string(28) "ohf9awed88883Twy7CuJ1E6Y4" ["nickname"]=> string(0) "" ["sex"]=> int(0) ["language"]=> string(5) "zh_CN" ["city"]=> string(0) "" ["province"]=> string(0) "" ["country"]=> string(0) "" ["headimgurl"]=> string(0) "" ["subscribe_time"]=> int(1705999124) ["unionid"]=> string(28) "oSpO==e_4Xm_cIXy4Cu6MoD0" ["remark"]=> string(0) "" ["groupid"]=> int(0) ["tagid_list"]=> array(0) { } ["subscribe_scene"]=> string(17) "ADD_SCENE_QR_CODE" ["qr_scene"]=> int(0) ["qr_scene_str"]=> string(25) "1705999105" }
批量获取公众号openid => unionid接口
https://api.weixin.qq.com/cgi-bin/user/info/batchget
步骤三:存储 小程序openid<=>unionid
小程序在调用wx.login时,将回调得到的unionid存到数据库中
注意:微信小程序开发者工具重新登录一次后,后端会自动调用code,此时再使用apifox调用会报错。
onLoad: function (options) { this.wxLogin() }, wxLogin () { wx.login({ success: (res) => { //用户的code let userCode = rest.code console.log('wx.login==>',res) // 该流程放到后端处理=== // https://api.weixin.qq.com 不是合法域名,正式环境无法访问 ============= wx.request({ // 自行补上自己的 APPID 和 SECRET url:`https://api.weixin.qq.com/sns/jscode2session?appid=自己的appid&secret=密钥&js_code=${userCode}&grant_type=authorization_code`, success: res => { // 获取到用户的 openid console.log("用户的openid:" + res.data.openid); console.log("用户的unionid:" + res.data.unionid); console.log("用户的session_key:" + res.session_key); } }); } }) }
步骤四:发送消息
需要发送消息时,用mysql获取该用户在小程序的openid,然后查表获取对应的公众号openid,然后调用微信公众号接口,发送模板消息
参考:https://www.cnblogs.com/railgunRG/p/18420698
步骤五:公众号关注回调
当有人关注公众号时,自动把相应的unionid加进去,就不用每次遍历所有用户了
公众号关注回调文章:https://www.bilibili.com/read/cv19625920/?spm_id_from=333.999.0.0