微信小程序中订阅消息的一些“坑”

一、什么是订阅消息:

订阅消息包括两种:

一次性订阅消息

一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。

长期订阅消息

用户订阅一次后,开发者可长期下发多条消息。(Tips:目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放。)

 

二、使用说明:

       ·1、获取模板 ID

在微信公众平台手动配置获取模板 ID:

登录 https://mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用。

2、小程序端授权订阅

Tips:一次授权最多可以授权三条订阅消息

wx.requestSubscribeMessage({

  tmplIds: [''], // 模板ID

  success (res) { }, // 接口调用成功回调(不是订阅成功回调)

  fail (err) { }, // 接口调用失败回调

  complete () { } // 接口调用结束的回调函数(调用成功、失败都会执行)

})

       success接口调用成功回调参数

{ errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"}

可以通过模板消息对应的code码来判断该条消息订阅的结果

Code码

Code

说明

accept

表示用户同意订阅该条id对应的模板消息

reject

表示用户拒绝订阅该条id对应的模板消息

ban

表示已被后台封禁

filter

表示该模板因为模板标题同名被后台过滤

Fail 接口调用失败回调参数

{errMsg: "requestSubscribeMessage:fail No template data return, verify the template id exist", errCode: 20001}

错误码

errCode

errMsg

说明

10001

TmplIds can't be empty

参数传空了

10002

Request list fail

网络问题,请求消息列表失败

10003

Request subscribe fail

网络问题,订阅请求发送失败

10004

Invalid template id

参数类型错误

10005

Cannot show subscribe message UI

无法展示 UI,一般是小程序这个时候退后台了导致的

20001

No template data return, verify the template id exist

没有模板数据,一般是模板 ID 不存在 或者和模板类型不对应 导致的

20002

Templates type must be same

模板消息类型 既有一次性的又有永久的

20003

Templates count out of max bounds

模板消息数量超过上限

20004

The main switch is switched off

用户关闭了主开关,无法进行订阅

20005

This mini program was banned from subscribing messages

小程序被禁封

详见小程序端消息订阅接口 wx.requestSubscribeMessage

3、后台发订阅消息

详见服务端消息发送接口 subscribeMessage.send

三、常见问题:

  1. 进行订阅授权操作,只会弹出没有勾选过“总是保持以上选项,不再询问”操作的订阅消息,比如弹出三条订阅消息,其中两条进行过“总是保持以上选项,不再询问”的操作,那么会只弹出一条消息的订阅弹窗,另外两条消息会按照上次的结果进行授权,如果弹出的所有订阅消息,都有过“总是保持以上选项,不再询问”操作,那么这次的订阅消息弹窗将不会弹出,直接按照上次的结果进行授权。

  1. 点击取消按钮时,如果弹出的订阅消息中有进行过“总是保持以上选项,不再询问”操作的,也会按照上次的结果进行授权。
  2. 弹出多条订阅消息,勾选其中几条,并勾选“总是保持以上选项,不再询问”,点击取消,那么当前弹出的所有订阅消息,都会被添加总是拒绝的选项。

  1. 弹出多条订阅消息,勾选其中几条,并勾选“总是保持以上选项,不再询问”,点击允许,那么剩下未被勾选的订阅消息,都会被添加总是拒绝的选项。

 

  1. 当授权订阅的消息过于频繁时,会直接报错。
  2. 如果勾选过“总是保持以上选项,不再询问”的选项,那么就会被添加到设置当中,无法手动移除,只有在小程序管理后台当中删除对应的订阅消息,才会被删除。
  3. 如果关闭“接收订阅消息”的开关,那么弹出订阅消息的操作会直接报错。可以通过wx.openSetting来直接跳转到设置页面,提示用户打开。

  1. 一次性订阅消息,授权一次可以推送一次,所以每次授权操作都要进行弹窗授权的操作
  2. 弹窗订阅消息的弹窗不管是点击“取消”还是“允许”都会走成功的回调
  3. 微信开发者工具上只会弹出一条订阅消息,不管是否配置多条,并且不会弹出手机上的授权框

  1. 删除小程序后重新打开,设置当中的订阅消息选项也不会被重置。
  2. 获取用户是否开启“接收订阅消息”的开关和“总是保持以上选项,不再询问”的订阅消息,可以通过wx.getSetting来获取
  3. 如果总是允许过的订阅消息,并且有成功订阅的次数,在设置中拒绝这条订阅消息,那么再次发送这条订阅消息不会成功。
<think>好的,我现在需要帮助用户解决在微信小程序中如何实现取消订阅消息的功能。首先,我需要回忆一下微信小程序订阅消息相关文档。根据用户提供的引用内容,用户已经了解如何申请模板和发送订阅消息,但现在是关于取消订阅的部分。 首先,我记得微信小程序订阅消息机制。用户提到的引用[1]和[2]都提到了订阅消息的申请和发送,但取消订阅的API可能没有直接说明。根据微信的文档,订阅消息一旦用户同意,开发者可以在有效期内发送消息,但用户可能随时取消订阅。所以,取消订阅的主动权在用户手中,而不是开发者通过API直接调用的。 那开发者这边有没有相关的API来让用户取消呢?或者有没有办法检测用户是否已经取消订阅?可能需要查阅微信的最新文档。根据现有的知识,微信没有提供直接让开发者主动取消用户订阅的API。用户取消订阅的操作通常是在微信的服务通知设置里进行的,比如用户长按服务通知,选择不再接收。 不过,可能有一种情况是,当用户再次触发订阅消息弹窗时,如果之前已经订阅过某个模板,用户可以选择取消。这时候,开发者可以通过调用`wx.requestSubscribeMessage`来让用户重新选择是否订阅。如果用户取消勾选,那么后续就无法发送消息了。因此,取消订阅的功能可能依赖于让用户再次进入订阅界面并取消选择。 另外,根据引用[3]提到的`wx.requestSubscribeMessage`和`uni.requestSubscribeMessage`,这可能是在用户主动操作时调用的API,比如点击某个按钮重新订阅或取消。开发者需要设计一个界面,让用户有机会重新选择订阅状态,从而取消之前的订阅。 总结一下,实现取消订阅的方式可能包括: 1. 引导用户到微信的服务通知设置中手动关闭。 2. 在小程序内再次调用订阅API,让用户取消勾选对应的模板ID。 可能需要验证这一点,比如查阅微信官方文档是否有更新。假设当前机制没有变化,那么取消订阅主要依赖用户操作,而不是开发者调用某个API。因此,在代码层面,开发者无法直接取消用户的订阅,只能通过用户主动操作来实现。</think>### 微信小程序取消订阅消息的实现方式 微信小程序订阅消息功能允许用户主动订阅消息通知,但**取消订阅的主动权完全由用户控制**,开发者无法通过API直接取消用户的订阅。以下是相关实现逻辑和引导用户操作的方案: --- #### 1. **用户手动取消订阅** 用户可在微信的「服务通知」设置中关闭特定小程序消息: - 打开微信 > 「服务通知」 > 找到对应小程序消息 > 长按消息选择「不再接收」[^2]。 --- #### 2. **通过重新触发订阅弹窗引导取消** 开发者可在小程序内设计功能,让用户重新选择订阅状态: - 调用订阅API `wx.requestSubscribeMessage`,用户可取消勾选已订阅的模板ID。 - **代码示例**: ```javascript // 原生小程序 wx.requestSubscribeMessage({ tmplIds: ['模板ID_1', '模板ID_2'], // 需要取消的模板ID success(res) { // res中会返回用户是否勾选每个模板ID if (res['模板ID_1'] === 'reject') { console.log('用户已取消订阅该模板'); } } }); // UniApp uni.requestSubscribeMessage({ tmplIds: ['模板ID_1', '模板ID_2'], success(res) { // 处理用户选择结果 } }); ``` 此方法通过用户交互实现取消订阅,而非直接调用API强制取消[^3]。 --- #### 3. **注意事项** - **有效期限制**:用户订阅后,每条消息模板在7天内可发送1条消息,过期后需重新订阅。 - **静默订阅**:部分场景支持“长期订阅”,但仅限特定行业,需单独申请[^1]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值