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

目录

前言

流程分析

实现过程

 


前言

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

流程分析

 

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

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

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

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

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

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

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

实现过程

上图为各种情况的返回数据情况,分析上面的数据,有利于理解实现代码的原理:

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

注释:

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

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

  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)templateId数组的数据为模板ID,可在微信公众平台手动配置获取模板 ID;

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

// 获取下发权限
const templateId = ['xxx', 'xxx', 'xxx'];
let subscribeMessage = that.data.settingMsg.authSetting['scope.subscribeMessage']; // 用于判断是否禁止接收订阅信息
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'
  });
};

 

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信小程序实现订阅消息功能,需要在后端服务器使用Node.js来实现。以下是一个示例的Node.js源码,用于实现微信小程序订阅消息功能。 ```javascript const express = require('express'); const axios = require('axios'); const app = express(); const port = 3000; // 用于接收微信小程序订阅消息的回调 app.post('/callback', async (req, res) => { try { // 解析请求体中的数据 const data = req.body; // 向微信API发送请求,完成订阅消息的下发 await axios.post('https://api.weixin.qq.com/cgi-bin/message/subscribe/send', { touser: data.openid, // 用户的openid access_token: data.access_token, // 小程序的access token template_id: data.template_id, // 订阅消息模板ID data: data.template_data, // 订阅消息模板中的数据 }); // 返回成功响应给微信小程序 res.status(200).send('Success'); } catch (error) { // 返回错误响应给微信小程序 res.status(500).send('Failed'); } }); app.listen(port, () => { console.log(`Server is running on port ${port}`); }); ``` 上述代码中,创建了一个基于Express框架的Node.js服务器。通过定义一个`/callback`的路由,用于接收微信小程序发送的订阅消息的回调。 在回调中,首先解析请求体中的数据,包括用户的openid、小程序的access token、订阅消息模板ID以及要下发的模板数据。然后,使用axios库发送HTTP POST请求到微信API,完成订阅消息的下发。 最后,根据发送请求的结果,返回相应的成功或失败响应给微信小程序。 需要注意的是,此代码仅为示例,实际项目中还需要添加相应的错误处理等逻辑。此外,还需要配置服务器的域名与小程序进行关联,并在小程序端的代码中发送HTTP请求到该服务器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值