小程序订阅消息如何使用(小程序订阅消息功能设置)
本文介绍使用订阅信息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' }); };
原文地址:https://tangjiusheng.cn/web/qdkf/466.html