小程序订阅消息如何使用(小程序订阅消息功能设置)

 分类:前端开发时间:2022-07-08点击:

本文介绍使用订阅信息API,来实现微信小程序的订阅信息功能,集成在支付完成步骤上。

流程分析

微信小程序实现订阅信息功能


上图是从网上找到的最详细的流程图,从图中可以分析出大概以下几个流程:

1、用户进入“设置--消息订阅”,设置不接收消息时,则支付完成后直接跳转页面;

2、微信版本不支持订阅信息方法时,则在支付完成后,输出错误信息并跳转页面;

3、下发权限窗口中,不勾选“总是保持以上选择,不再询问”且点击“允许”时,则支付完成后调用后台接口下发订阅消息;如果是多模板情况(最多三个模板),要根据各模板是否勾选判断哪个模板可以下发(模板未勾选时,虽然点击了允许,但返回信息是“reject”))并跳转页面;

4、下发权限窗口中,不勾选“总是保持以上选择,不再询问”且点击“取消”时,则支付完成后直接跳转页面,不下发订阅信息;

5、下发权限窗口中,勾选“总是保持以上选择,不再询问”且点击“允许”时,则支付完成后调用后台接口下发订阅消息;如果是多模板情况(最多三个模板),要根据各模板是否勾选判断哪个模板可以下发(模板未勾选时,虽然点击了允许,但返回信息是“reject”))并跳转页面;而第二次支付完成后,不会弹出下发权限窗口,而是根据上次模板的信息进行下发(如想弹出窗口,可使用开发工具“清除缓存”);

6、下发权限窗口中,勾选“总是保持以上选择,不再询问”且点击“取消”时,则支付完成后直接跳转页面,不调用下发订阅信息接口;而第二次支付完成后,不会弹出下发权限窗口,而是根据上次模板的信息不下发(如想弹出窗口,可使用开发工具“清除缓存”)。

实现过程

1、增加公共函数,用来调用订阅信息的下发权限;

1.1
wx.requestSubscribeMessage为小程序提供的API,可点击查看详细说明;

1.2 subscribe_templates存放模板的信息(1-3个),然后传参数给后台接口config.sendTemplateMsg,config.sendTemplateMsg该后台接口使用下发方法subscribeMessage.send(点击查看详细说明);

1.3 在支付完成后,如果使用“wx.reLaunch”进行跳转,会出现无法跳转的问题,这是因为跳转到支付页面后,导致原来的页面找不到,所以这里使用“wx.redirectTo”跳转。

Tips:对于多模板,部分模板不是即时下发订阅信息,可在调用config.sendTemplateMsg接口时 ,后台先缓存必要的信息(oppid、订单号、模板信息等),然后在小程序点击相应场景再调用后台接口下发相应的订阅信息。

// 订阅信息的下发授权subscribeMessage: function(templateId) {  let that = this;  try {
    wx.requestSubscribeMessage({      tmplIds: templateId,
      success(res) {        for (let key in res) {          if (key !== "errMsg" && key !== "errorCode") {            let obj = {              template_id: key,              status: res[key]
            };
            that.data.subscriptionData.subscribe_templates.push(obj);
          }
        }        console.log(that.data.subscriptionData);        // 订阅信息接口
        util.requestUrl(config.sendTemplateMsg, that.data.subscriptionData).then((res) => {          console.log('调用订阅信息接口!');
        }).catch((errMsg) => {          console.log(errMsg); //错误提示信息
        });
        wx.redirectTo({          url: '../../pages/index/index'
        });
      },
      fail(res) {        console.log(res);
      }
    })
  } catch (err) { // 当前微信版本不支持订阅信息
    console.error("subscribeMessage-err", err);
  }
}

2、支付完成后的操作 (只截取下发权限部分的代码);

1.1 templateId数组的数据为模板ID,可在微信公众平台手动配置获取模板 ID;

1.2 settingMsg通过wx.getSetting获取;

Tips:templateId可调用后台接口获取,这样就不用每次有改动就重新修改小程序进行审核。

// 获取下发权限const templateId = ['xxx', 'xxx', 'xxx'];
let subscribeMessage = that.data.settingMsg.subscriptionsSetting['mainSwitch']; // 用于判断是否禁止接收订阅信息if (subscribeMessage) {
  that.data.subscriptionData = {
    access_token: app.globalData.accessToken,
    openId: app.globalData.openId,
    subscribe_templates: []
  };  // 包含总是允许、总是取消、点击允许、点击取消情况
  that.subscribeMessage(templateId);  
} else { // 小程序设置--不允许接收订阅信息情况
  wx.redirectTo({
    url: '../../pages/index/index'
  });
};


除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址: