微信小程序订阅消息(一次性订阅消息)

1、准备工作

  • 登录微信公众平台-->订阅消息-->在公共模板库中选中一个模版-->将模版id复制,前后端都需要。
  • 点击详情-->查看详细内容模版 复制给后端

2、相关api的使用

3、前端具体代码实现(不考虑通知消息开关关闭的情况下)

javascript 复制代码
        wx.requestSubscribeMessage({
          tmplIds:['此处为模版ID'], // 订阅的模板消息 ID
          success:(res) => {
            console.log(res, '订阅res')
            // 处理用户授权结果
            if (res['此处为模版ID'] === 'accept' ) {
              // 用户同意接收订阅消息  -- 点击右侧允许按钮
              wx.showToast({
                title: '已通知',
                icon: 'success',
                duration: 2000
              });
            } else {
              // 用户拒绝接收订阅消息  -- 点击左侧拒绝按钮
              wx.showToast({
                title: '通知失败',
                icon: 'none',
                duration: 2000
              });
            }
          },
          fail: (err) => {
            console.error('订阅失败', err)
          }
        });

4、前端具体代码实现(考虑通知消息开关关闭的情况)

以下包含了一点点业务代码,可自行去除。

了解 wx.getSetting和 wx.openSetting的具体作用,以及返回各参数表示什么含义后。

javascript 复制代码
  verifyFun() {
    var _this = this
    // var deviceId = wx.getStorageSync('openid');
    if (this.data.state != null && this.data.deviceId !='') {
        //
        wx.getSetting({
          withSubscriptions:true,
          success (res) {
            console.log(res,'get中的res')
            if(res.subscriptionsSetting.mainSwitch ){
              // 执行订阅通知 调用弹窗接口
              if( res.subscriptionsSetting.itemSettings == undefined || ( res.subscriptionsSetting.itemSettings && res.subscriptionsSetting.itemSettings['模版id'] == 'accept') ){
                wx.requestSubscribeMessage({
                  tmplIds:['模版id'], // 订阅的模板消息1 ID 
                  success:(res) => {
                    console.log(res, '订阅res')
                    // 处理用户授权结果
                    if (res['模版id'] === 'accept' ) {
                    // 用户同意接收订阅消息  -- 点击右侧允许按钮
                      wx.showToast({
                        title: '已通知',
                        icon: 'success',
                        duration: 2000
                      });

                      // 请求开启弹窗
                      wx.showLoading({
                        title: '开启中',
                      })
                      verify({
                        deviceId: _this.data.deviceId
                      })
                      .then((res) => {
                        console.log(res, '点击弹窗开启')
                        wx.hideLoading()
                        _this.setData({
                          circleContent: '弹窗已开启'
                        })
                      setTimeout(() => {
                          _this.setData({
                            circleContent: '开启弹窗',
                          });
                        }, 5000)
                      })
                    } else {
                      // 用户拒绝接收订阅消息  -- 点击左侧拒绝按钮
                      wx.showToast({
                        title: '通知失败',
                        icon: 'none',
                        duration: 2000
                      });
                    }
                  },
                  fail: (err) => {
                    console.error('订阅失败', err)
                  }
                });
              }else{
                   wx.openSetting({
                      withSubscriptions:true,
                      success (res) {
                         console.log(res,' wx.openSetting(的res')
                      }
                    })
                 }
             }else{
              // 调起客户端小程序设置界面 提示用户开启通知
              wx.openSetting({
                withSubscriptions:true,
                success (res) {
                  console.log(res,' wx.openSetting(的res')
    
                }
              })
            }
          }
        })
    }
     else {
      wx.showToast({
        title: '请先扫码绑定设备',
        icon: 'none'
      })
      wx.switchTab({
        url: '/pages/scanCode/scanCode'
      })

    }
  },

/*

1、总开关关闭 调wx.openSetting 到设置页面

2、总开关打开,留言开关 关闭 用户点击拒绝 未通知 再次点击 会弹订阅弹框(不勾选 总是保持以上选择开关)

3、总开关打开,留言开关 打开 用户点击拒绝 未通知 再次点击 会弹订阅弹窗(不勾选 总是保持以上选择开关)

4、总开关打开,留言开关 关闭 用户点击拒绝 未通知 再次点击 会跳到通知设置页面,用户手动将留言通知勾选成接受(勾选 总是保持以上选择开关)再次点击 通知成功,但页面不会出现订阅弹框(正常)

5、总开关打开,留言开关 打开 用户点击拒绝 未通知 再次点击 会跳到通知设置页面,用户手动将留言通知勾选成接受(勾选 总是保持以上选择开关)再次点击 通知成功,但页面不会出现订阅弹框(正常)

*/

相关推荐
Jing_Rainbow7 小时前
【 Weapp-1 /Lesson18(2025-11-03)】# 微信小程序开发全解析:从项目结构到生态优势 🚀
微信·微信小程序·程序员
千寻技术帮8 小时前
50045_基于微信小程序的民宿预订管理系统
微信小程序·源码·ppt·项目文档·民宿
禁止摆烂_才浅10 小时前
Taro 小程序页面返回传参完整示例
react.js·微信小程序·taro
vx_dmxq21114 小时前
【微信小程序学习交流平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·微信小程序·小程序·idea
腾马科技16 小时前
小酒馆白酒饮料订单配送立即点餐存酒小程序源码
微信小程序·点餐小程序
学点程序17 小时前
AI辅助开发小程序的实践分享
小程序
vx_dmxq2111 天前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
蹦极的考拉1 天前
夜间无法登录:ThinkPHP api接口 23:00 准时罢工的排查全纪录
小程序·thinkphp·api接口·无法登陆
vx_vxbs661 天前
【SSM电影网站】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·小程序·php·idea
我命由我123451 天前
微信开发者工具 - 模拟器分离窗口与关闭分离窗口
前端·javascript·学习·微信小程序·前端框架·html·js