微信小程序 消息订阅 长期订阅 一次授权 多次接收 微信服务通知

本文介绍如何在微信小程序中实现长期订阅消息功能,包括获取用户授权、存储openid及推送消息等步骤。针对不同用户群体(如租户、业主等)发送定制化的通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信小程序消息订阅 长期订阅 一次授权 多次接收 发送微信服务通知消息

这里讲长期订阅! 长期订阅! 长期订阅!

  • 需求描述:
    – 根据用户不同标签(租户、业主、维修师傅、居委会成员)一键向人员统一发送消息通知;

    例如:小区6栋6层以上停水一天,这个消息就需要向住户(租户业主)提前发送停水通知,
    向维修人员发送维修通知

  • 整体思路及需求:

  1. 需要按键调用在按键的方法里在指定也可,但必须是由按键进入!!!
  2. 确认自己开发的小程序的主体是否拥有长期订阅的权限;可参照下图:
    (图片来自:微信开发社区:小程序模板消息能力调整通知在这里插入图片描述
  3. 在微信小程序后台配置订阅模版;没有合适的可在社区申请,具体这次不讲;
  4. 用户唯一信息记录 openid(微信用户唯一标识);
  5. 调起用户授权,使用户授权;
  6. 后台同学推送消息
  7. 👌

代码分享

👍记得点赞哦 😄

👇大佬请看👇

  • 存储openid,确定接收人员。
    通过wx.login()获取用户信息(静默获取,无需授权),再返回的success中有code代码,通过官方的解析接口获得openid, 置换完档参照:(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html)
    注:code只有5分钟的有效时间

  • 通过wx.getSetting获取用户是否给了订阅消息的权限(授权接收消息)

wx.getSetting({
                withSubscriptions : true, // 获取订阅的授权信息   总开关
 				 res.subscriptionsSetting.mainSwitch,// 里边还有可根据需求继续查看,
 				 //不会可打印一步一步看(对应的是你模板的id)
 				
    例:     模板id:"accept" // (这个是:以授权模板消息订阅,可随时接收消息)`

  • 调起授权界面(手动关闭或选择取消后此方法直接调用会走 fail 逻辑)不能直接调起
 wx.requestSubscribeMessage({ 
    tmplIds, // 模板id 数组类型
     success: res => {
     授权成功逻辑
     },
     fail: err => {
     授权失败的逻辑,用户单击取消也在这
     },
    complete: () => {
    无论成功失败
    }
}

注:在用户选择取消或者通过小程序设置关闭通知,无法再调起授权界面处理 此时调用会在fail打印 requestSubscribeMessage:fail can only be invoked by user TAP gesture. 大概意思是请手动打开 wx.getSetting()里返回的状态消息也是false 但是再通过wx.requestSubscribeMessage()是调不动的,所以就得想起他的方式引导用户打开。

  • 解决requestSubscribeMessage:fail can only be invoked by user TAP gesture.通过引导用户使其打开授权。
wx.openSetting({
    success: res => {
    console.log(res)
    }
})
  • 个人代码分享
方法名(){
let tmplIds = this.tmplIds // tmplId:【模板id】
            wx.getSetting({
                withSubscriptions : true,
               success(res) {
                 var itemSettings = res.subscriptionsSetting.mainSwitch
                 if (itemSettings) {
                       console.log('已授权')
                    return
                    }else{
                    wx.requestSubscribeMessage({
                          tmplIds,
                         success: res => {
                               tmplIds.forEach(item => {
                                 if (res[item] === 'reject') {
                                   wx.showToast({
                                     title: '此次操作会导致您接收不到通知',
                                     icon: 'none',
                                     duration: 2000,
                                   })
                                 }
                               })
                             },
                             fail: err => {
                               uni.showModal({   // uniapp框架
                                   title: '请务必授权订阅消息',
                                   content: '您没有授权消息通知,是否进行授权',
                                    success: res => {
                                       if (res.confirm) {
                                            wx.openSetting({
                                                success: res => {
                                                 console.log(res)
                                                }
                                            })
                                      } else if (res.cancel) { 
                                          wx.showToast({
                                            title: '此次操作会导致您接收不到通知',
                                            icon: 'none',
                                            duration: 2000,
                                          })
                                      }
                                    },
                                    fail: () => {},
                                    complete: () => {}
                               });
                            },
                         }) 
                    }
                },
                fail:err => {
                       console.log(err.errMsg)
                        },
             })
         }

都看👓完了,就👍1️⃣👇吧

### 微信小程序长期订阅消息的功能实现 #### 长期订阅消息概述 长期订阅消息允许特定类目的微信小程序定期向用户推送重要通知。这类消息适用于具有线下服务场景的应用程序,如民生、金融和教育等领域[^1]。 #### 类目限制 值得注意的是,不是所有的二级类目都可以获得长期订阅权限;具体的资格审核标准需参照官方文档说明。 #### 功能配置流程 为了启用并管理长期订阅消息,在微信公众平台开发者工具内完成如下设置: - **注册与认证**:确保小程序已完成主体信息登记并通过实名验证。 - **模板选择**:登录公众平台后台管理系统,进入“订阅消息”模块挑选合适的预设模版或自定义创建新模版用于发送长期订阅消息[^2]。 - **接口调用** 使用`wx.requestSubscribeMessage()` API请求获取用户的同意授权,此API返回的结果决定了后续能否成功投递消息给指定件人。 ```javascript // 请求用户订阅长期消息示例代码 const wx = require('weixin-js-sdk'); wx.requestSubscribeMessage({ tmplIds: ['your_template_id'], // 替换成实际使用的模板ID success(res){ console.log("User agreed:", res); }, fail(err){ console.error("Failed to get subscription:", err); } }); ``` - **服务器端集成** 当前端获得了必要的许可之后,则可通过HTTPS POST请求携带相应的参数至WeChat Server API endpoint以触发消息传递过程。 ```json { "touser": "OPENID", "template_id": "TEMPLATE_ID", "page": "index", "data": { "thing1": {"value":"商品名称"}, "date2":{"value":"订单日期"} } } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值