微信小程序之订阅消息推送

目录

1、开通订阅消息

2、请求用户授权

2.1、wx.requestSubscribeMessage(Object object)

2.2、wx.requestSubscribeDeviceMessage(Object object)

3、发送订阅信息

3.1、调用方式

3.2、云调用接口方法

3.3、请求参数

3.4、返回值

3.5、代码示例

1、开通订阅消息

登录小程序之后点击功能下的订阅消息点击开通

选择公共模板库的一次性订阅

我选择是注册模板,模板ID就是我所需要的东西

2、请求用户授权

        订阅消息授权时,只能是用户点击或者支付完成后才可以调起来授权弹窗,详情请见微信官方文档-requestSubscribeMessage

2.1、wx.requestSubscribeMessage(Object object)

        调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。

参数

属性类型默认值必填说明
tmplIdsArray需要订阅的消息模板的 id 的集合,一次调用最多可订阅3条消息。每个 tmplId 对应的模板标题需要不相同,否则会被过滤。
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行

object.success 回调函数

属性类型说明
errMsgString接口调用成功时 errMsg 值为'requestSubscribeMessage:ok'
[TEMPLATE_ID: string]String

[TEMPLATE_ID]是动态的键,即模板id,值包括'accept'、'reject'、'ban'、'filter'。

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

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

'ban'表示已被后台封禁,

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

例如 { errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息

object.fail 回调函数

属性类型说明
errMsgString接口调用失败错误信息
errCodeNumber接口调用失败错误码

错误码

errCodeerrMsg说明
10001TmplIds can't be empty参数传空了
10002Request list fail网络问题,请求消息列表失败
10003Request subscribe fail网络问题,订阅请求发送失败
10004Invalid template id参数类型错误
10005Cannot show subscribe message UI无法展示 UI,一般是小程序这个时候退后台了导致的
20001No template data return, verify the template id exist没有模板数据,一般是模板 ID 不存在 或者和模板类型不对应 导致的
20002Templates type must be same模板消息类型 既有一次性的又有永久的
20003Templates count out of max bounds模板消息数量超过上限
20004The main switch is switched off用户关闭了主开关,无法进行订阅
20005This mini program was banned from subscribing messages小程序被禁封
20013Reject DeviceMsg Template不允许通过该接口订阅设备消息

代码示例

    var TemplateID = 'xxxxxxxx'
    var TemplateStatus = wx.getStorageSync('TemplateID')
    if(TemplateStatus != 'accept'){
      wx.requestSubscribeMessage({
        tmplIds: [TemplateID],
        complete (res) {
          console.log("complete: ",res)
          wx.setStorageSync('TemplateID', res[TemplateID])
        },
      })
    }

使用效果

 可以看到,这里显示的就是我们添加的 ‘注册成功通知’的模板。 

真机上多了一个 ‘总是保持以上选择,不再询问’

2.2、wx.requestSubscribeDeviceMessage(Object object)

        订阅设备消息接口,调用后弹出授权框,用户同意后会允许开发者给用户发送订阅模版消息。当用户点击“允许”按钮时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。

        当前未使用

3、发送订阅信息

        回复信息时需要使用用户的openid

        详情请见微信官方文档: 微信官方文档-subscribeMessage.send

3.1、调用方式

当前使用云调用

3.2、云调用接口方法

openapi.subscribeMessage.send

3.3、请求参数

属性类型默认值必填说明
touserstring接收者(用户)的 openid
templateIdstring所需下发的订阅模板id
pagestring点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
dataObject模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
miniprogramStatestring跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
langstring进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN

3.4、返回值

返回的 JSON 数据包

属性类型说明
errCodenumber错误码
errMsgstring错误信息

errCode 的合法值

说明
0成功

异常

属性类型说明
errCodenumber错误码
errMsgstring错误信息

errCode 的合法值

说明
40003touser字段 openid 为空或者不正确
40037订阅模板 id 为空不正确
43101用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系
47003模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错
41030page路径不正确,需要保证在现网版本小程序中存在,与 app.json 保持一致

3.5、代码示例

在云函数中调用,UserOpenid是微信用户的openid,TemplateID是模板id

    try {
      const result = await cloud.openapi.subscribeMessage.send({
          "touser": UserOpenid,
          "templateId": TemplateID,
          "lang": 'zh_CN',
          "data": {
            "date2": {
              "value": '2015年01月05日'
            },
            "thing4": {
              "value": '阿里巴巴'
            },
            "character_string9": {
              "value": '123456789'
            }
          },
        })
      return result
    } catch (err) {
      return err
    }

其中date2、thing4、character_string9是根据小程序中的模板定义的

 效果如图:

  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值