https://www.jianshu.com/p/0077a8084b44
一、选择合适的模板消息
在小程序管理后台功能-订阅消息-公共模板库选择自己需要的模板消息。目前小程序支持一次性订阅和长期订阅,一次性订阅是指用户订阅一次,可以为其推送一次消息;长期订阅则是可以发送多次消息,目前向政务、医疗、交通、金融、教育等线下公共服务开放,如果有需要可以在社区发帖申请,符合要求应该会给开放(这个我没申请过通过率不确定哈)。
核心代码
wx.requestSubscribeMessage({
tmplIds: [''],
success (res) { }
})
<button bindtap="subscribeMsg">点击订阅消息</button>
// 订阅消息
subscribeMsg() {
let that = this
let tmplId = ['gh8CVR5Qn0-an']; //['gh8CVR5Qn0-an','YqJnLuXMt7027NAEBB0p'] 一条或者多条
//var template_ids = app.globalData.tmplIds;
wx.requestSubscribeMessage({
tmplIds: tmplId,//template_ids
success(res) {
if (res[tmplId] == 'accept') { //某条订阅信息 接收或者拒绝
that.cloudSendMsg();
} else if (res[tmplId] == 'reject') { // 用户拒绝授权
wx.showModal({
title: '温馨提示',
content: "您已关闭消息推送,如需要消息推送服务,请点击确定跳转设置页面打开授权后再次尝试。",
success: function(modal) {
if (modal.confirm) { // 点击确定
wx.openSetting({ withSubscriptions: true })
}
}
})
}
},
fail(err) {
if (err.errCode == '20004') {
wx.showModal({
title: '温馨提示',
content: "您的消息订阅主开关已关闭,如需要消息推送服务,请点击确定跳转设置页面打开授权后再次尝试。",
success: function(modal) {
if (modal.confirm) { // 点击确定
wx.openSetting({ withSubscriptions: true })
}
}
})
}
},
complete(res) {
console.log('complete 调用完成')
// 无论取消还是接收都会执行:比如 下单(无论订阅号是取消还是接收都执行)
this.pay()
}
})
},
wx.redirectTo({
url: '../codeForm/codeForm?orderInfo=' + JSON.stringify(items),
})
进入详情页面
调用失败fail返回提示及解决方式:
1.errMsg:"requestSubscribeMessage:fail can only be invoked by user TAP gesture."
解决:bindtap点击才行、不能延迟调用
2.errMsg:"requestSubscribeMessage:fail 开发者工具暂时不支持此 API 调试,请使用真机进行开发"
解决:真机调试才行
3.errMsg:"requestSubscribeMessage:fail:No template data return, verify the template id exist"
errorCode:20001
解决:确认模板ID是订阅消息的模板ID且正确。
4.errMsg:"requestSubscribeMessage:fail:Templates count out of max bounds"
errCode:20003
解决:模版数量超出,最多3个
5.requestSubscribeMessage:fail last call has not ended
解决:如果申请的是“一次性订阅”,一次触发只有一次推送消息机会,所以我们会在其他页面点击事件去调用requestSubscribeMessage,获取更多次的推送消息机会。但是每个手机获取是有上限的,大概几十个吧。然后只有用掉推送消息次数,才能重新成功调用,否则会出现以上问题。
注意-坑:
1.bindtap点击才可以调起
2.真机调试才行(--2020/01/03:貌似微信开发者工具也可以调用了) 反正我做项目的时候是上传到体验版才行,亲测
3.不能延迟去调用wx.requestSubscribeMessage,如先调用其他接口请求成功再去它、使用定时器延迟调用
4.目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务