通过小程序向用户发送模板消息

方法:公众号申请开启模板消息功能,并且申请一个模板。然后,通过微信的网站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) { } 
} 
View Code

已关注用户返回数据

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" 
 }
View Code

批量获取公众号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);
                    }
                  });
      }
    })
  }
View Code

步骤四:发送消息 

需要发送消息时,用mysql获取该用户在小程序的openid,然后查表获取对应的公众号openid,然后调用微信公众号接口,发送模板消息

参考:https://www.cnblogs.com/railgunRG/p/18420698

步骤五:公众号关注回调 

当有人关注公众号时,自动把相应的unionid加进去,就不用每次遍历所有用户了

公众号关注回调文章:https://www.bilibili.com/read/cv19625920/?spm_id_from=333.999.0.0

posted @ 2023-10-31 11:23  byxiaobai  阅读(236)  评论(0编辑  收藏  举报