微信小程序订阅消息推送

3,793 阅读2分钟

1.在小程序后台管理中选择订阅消息-开通 选择一个模板或者申请一个模板(申请模板需要审核才能使用)

image.png

选完之后会生成一个模板id在代码中调用时使用

2.在需要让用户授权的地方 需要点击某个按钮才能调用授权方法-弹出授权窗

 var _this = this;
        wx.requestSubscribeMessage({
            tmplIds: ['IfU3eOcH_ubviSy5EqYJkGpN_i1-w_JsUHCyZTTybS0'],
            success (res) { 
                console.log(res);
                _this.message();//调用发送订阅的接口 发送订阅 信息
            }
        })

3.用户点击允许之后 即可通过调用服务端接口推送订阅信息了

  message() {
    var that = this;
    //订阅消息模板id
    var template_id ="IfU3eOcH_ubviSy5EqYJkGpN_i1-w_JsUHCyZTTybS0";
   
      //发送access_token请求
      console.log(app.globalData.userInfo.openId);
      var test = {
            access_token: '50_iVSlpAnvMouQeEs14oAo-rL2vrBTFWblzuhXGrAvP8NMvyiC2BHzql3NU-LwB1KnbiDtH616M3ymenO4bMd9bH2IFhc2pPdRgvxS1OVzrx9fd4-QRlN9llhbGGpRjXAozB1ho_oQMaVJm0HLQKNfAHAJDG',
            data:{
              "touser": app.globalData.userInfo.openId,
              "template_id": template_id,
              "page": "pages/index/index",
              "miniprogram_state": "trial",
              "lang": "zh_CN",
              "data": {
                
                thing2: {value:"11111"},
                thing5: {value: "订单已送达"},
                character_string6: {value: "SF4420210302"},
                
              }
            }
          }
        wx.request({
          url: 'http://192.168.210.10:3000/list',
          method: 'post',
          data: test,
          success: function(res) {
            console.log("订阅成功");
            console.log(res);
          },
          fail: function(res) {
            console.log("订阅失败");
          },
        })

  },

4.服务端调用微信的api

app.post('/list', (req, res) => {
    
        console.log("%s", "guoyansi", req.body.access_token);
        request({
            url: 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token='+req.body.access_token,
            method: "POST",
            json: true,
            headers: {
                "content-type": "application/json",
            },
            body: req.body.data
        }, function(error, response, body) {
            if (!error && response.statusCode == 200) {
                res.json({
                    code: 200,
                    message: '成功',
                    data: {
                      list: body
                    }
                  });
            }
        }); 


})

5.踩坑点

* 48001

在调用后端接口 发送订阅消息时,报48001错误 大致意思是access_token错了 发现是取成了其他小程序的access_token

* 40003

openid失效 要知道的是 openid 需要对应是的此订阅配置下的appid 生成是openid 且 accesstoken对应的也要是此appid对应的access_token

* 43101

意思是用户拒绝授权 我当时创建了两个模板 用户点按钮授权的模板id是a 用户授权成功了 但是调后端接口发送消息的时候 报的是43101 实则是我调接口的时候传了模板b的id

* 40003

传参要是对象里用value传值 之前直接给字符串给错了 报40003

 "data": {
                
                thing2: {value:"11111"},
                thing5: {value: "订单已送达"},
                character_string6: {value: "SF4420210302"},
                
         }