最近项目中用到了小程序-订阅消息功能,于是开始查阅文档,百度,最后实现订阅消息功能,记录一下如何实现的,温故而知新
功能介绍
- 订阅消息推送位置:服务通知
- 订阅消息下发条件:用户自主订阅
- 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面
消息类型
1. 一次性订阅消息
一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。
2. 长期订阅消息
一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。
订阅消息语音提醒
当前小程序订阅消息通知与微信消息的通知的提示音是一样的,对于部分订阅消息模板,增加语音提醒能力,播报预料部分字段支持开发者定义。
当开发者调用wx.requestSubscribeMessage时仅订阅1条消息且该模板支持开启语音提醒,用户在订阅时可以选择开启语音提醒。开启后将在接收订阅消息时会同步播报语音提醒。当用户开启了语音提醒,该模板的订阅状态为'acceptWithAudio'。
只支持银行-收款到账通知
使用说明
一:获取模板 ID
在微信公众平台手动配置获取模板 ID: 登录 mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用。
二:获取下发权限
wx.requestSubscribeMessage(Object object)
调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态
参数 Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
tmplIds | Array | 是 | 需要订阅的消息模板的id的集合,一次调用最多可订阅3条消息(注意:iOS客户端7.0.6版本、Android客户端7.0.7版本之后的一次性订阅/长期订阅才支持多个模板消息,iOS客户端7.0.5版本、Android客户端7.0.6版本之前的一次订阅只支持一个模板消息)消息模板id在[微信公众平台(mp.weixin.qq.com)-功能-订阅消息]中配置。每个tmplId对应的模板标题需要不相同,否则会被过滤。 | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
object.success 回调函数
参数 Object res
属性 | 类型 | 说明 |
---|---|---|
errMsg | String | 接口调用成功时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这条消息 |
三:调用接口下发订阅消息
subscribeMessage.send
请求地址
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
请求参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
access_token / cloudbase_access_token | string | 是 | 接口调用凭证 | |
touser | string | 是 | 接收者(用户)的 openid | |
template_id | string | 是 | 所需下发的订阅模板id | |
page | string | 否 | 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 | |
data | Object | 是 | 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } | |
miniprogram_state | string | 否 | 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 | |
lang | string | 否 | 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN |
接口限制
次数限制:开通支付能力的是3kw/日,没开通的是1kw/日
html代码
<button bindtap="openMsg" class="wx-btn">订阅消息</button>
js代码
// 是否设置过授权
openMsg() {
var that = this;
// 获取用户的当前设置,判断是否点击了“总是保持以上,不在询问”
wx.getSetting({
withSubscriptions: true, // 是否获取用户订阅消息的订阅状态,默认false不返回
success(res) {
if (res.authSetting['scope.subscribeMessage']) { // 用户点击了“总是保持以上,不再询问”
wx.openSetting({ // 打开设置页
success(res) {
console.log(res.authSetting)
}
});
} else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
that.applyMessage();
}
}
})
},
// 发送消息
applyMessage(e) {
return new Promise((resolve, reject) => {
if (!wx.requestSubscribeMessage) {
resolve()
return
}
// #if
wx.requestSubscribeMessage({
tmplIds: [app.globalData.TemplateId],
success: (res) => {
if (res[app.globalData.TemplateId] === 'accept') {
wx.showToast({
title: '订阅成功!',
duration: 1000,
success(data) {
// 成功
resolve()
}
})
} else {
wx.showModal({
content: '未授权发送通知,您将收不到通知!',
confirmText: '重新授权',
cancelText: '取消授权',
success: (res) => {
if (res.confirm) {
reject()
this.request_order = false;
this.applyMessage()
} else {
resolve()
}
}
})
}
},
fail: (err) => {
wx.showModal({
content: '未授权发送通知,请到小程序设置界面开启订阅',
confirmText: '去开启',
cancelText: '暂不开启',
success: (res) => {
if (res.confirm) {
reject()
wx.openSetting()
} else {
resolve()
}
}
})
}
})
// #endif
resolve();
})
},
以上就是订阅消息的全部代码了,希望对你有所帮助!