此文是一个开发小白的心理活动描述。
最近要做一个电商小程序,客户需求是:支付成功通知、发货通知、签收通知、订单完成通知、取消支付通知、上级分销获得红包提醒。
如果是使用模板消息的话,完全不用记录这篇文章,现在就来说说我踩的坑吧。
首先,我是在用模板消息的思路在写订阅消息,以为跟模板消息一样,只用将template_id,对应的参数和访问地址变掉就可以了,然而并不行,想的太美好。
所以我查了些去看了一下订阅消息到底是个什么鬼。
模板消息虽然是由用户的行为触发,但实际上用户是被动接受者,事先对推送内容并不知情。所以官方爸爸可能就是为了避免这一点,想要对用户友好一些就推出了订阅消息,这一调整对于新手来说真的很不友好,完全不顾及开发者的感受。
订阅消息的特点:
比如说,要想给用户推送支付成功通知,要么让用户发生支付行为,也就是说通过微信支付,这样不需要在小程序端做任何操作,在回调里面是可以直接发推送消息的。但是这样一来,如果是使用余额支付的话,就没有办法在支付完成以后推送了,因为用户没有选择接收,而我们的小程序默认是拒绝接收消息的,提示为“user refuse to accept the msg hint: [JfHUOA0437st10]”
我一开始没有意识到这个问题,只想着赶紧把订阅消息调试通,所以我配置了6个模板,当然了,肯定是配置不成功的
从模板消息的思维转过来对于这一点真的很心累,于是我就想着是不是应该在个人中心或者进入小程序就搞个按钮弹窗,“授权收取订阅消息”类似的按钮,以及让用户强制授权同意,且抱着侥幸心理让用户选择那个灰色圈圈(永久记住该选择),真的太傻比了,于是一直搞搞搞,因为真的不知道什么是最正确的做法!!!
最后!!!同事的一句话真的是一语惊醒梦中人,她说难怪她买菜的小程序每次付完款以后都要弹出一个消息框让同意接收收货通知。!!!原来如此,那我直接在支付完成以后弹出同意授权的窗口不就好啦,在点击支付按钮的时候先正常去支付,然后支付成功以后再调订阅授权就好啦,在这里配置3个模板:支付成功通知、发货通知、收货通知。(对于余额支付的小伙伴也不要着急,我是这样理解的:可能第一次不能正常收到通知(因为没有发生支付行为也没有主动点击)但是你支付完了以后会让你同意接收通知,那下次支付就能正常收到通知了,但是我在测试过程中由于已经不知道什么时候是第一次,所以一直都能收到支付成功的通知)
罗里吧嗦一大堆,真正的代码也就一点点:关于后端如何推送,此处不做说明
直接在支付成功以后,调toggleSubscribe()方法,用户一般都会同意,除非他不想要收到通知,那就是他自己的事了
//消息订阅
toggleSubscribe: function () {
wx.getSetting({
withSubscriptions: true,
success(res) {
console.log(res.subscriptionsSetting) //这里可以看到每一项的授权状态,当用户没授权时,即使withSubscriptions开启了true,也是不会输出订阅状态的,所以直接让弹出授权框就得了
if (wx.requestSubscribeMessage) {
wx.requestSubscribeMessage({
tmplIds: ["KK7Yw26YO3SPr0oGrHhgUqa3PqKRO24IXrr4QWXAQaE", "LyejdllMFdMN_HEdDKk7Qyvlmntf9pzqMLp00LctPPg", "MUP1IgG1sKnJ5J41VoPQl3LzB2iCxaghYVvpVriOOug"], //购买,发货,收货通知
success: function (res) {
//成功
console.log(res);
},
fail: function (res) {
console.log(res);
}
})
} else {
wx.showToast({
title: '请更新您微信版本,来获取订阅消息功能',
icon: 'none'
});
}
}
});
}