微信小程序之订阅消息的授权和消息下发

3,503 阅读3分钟

developers.weixin.qq.com/miniprogram… (摘自网络,仅作个人学习之用) 2019年10月12日微信开放了小程序订阅消息的功能。按官方的说法,目前的模板消息在实现小程序服务闭环上存在缺陷:

  1. 部分开发者在用户无预期或未进行服务的情况下发送与用户无关的消息,对用户产生了骚扰;
  2. 模板消息需在用户访问小程序后的 7 天内下发,不能满足部分业务的时间要求

模板消息的上述硬伤,不利于小程序的用户留存和用户体验。为了解决这些问题,微信官方推出了用户订阅消息功能。但目前的订阅消息还不完善,后续还有很大的优化空间。目前,官方只开放了“一次性订阅消息”,“长期性订阅消息”只向政务民生、医疗、教育、交通、金融等线下公共服务开放。

步骤一:获取模板ID 登录 mp.weixin.qq.com 获取模板。可在公共模板库查找,如果没有合适的模板,可以申请添加新模板,审核通过后可使用(申请按钮隐藏较深,要跳转到最后一页才会看到“找不到你想要的模板? 帮忙我们完善模板库”)。选用模板后自动生成模板ID,复制即可。

Snipaste_2021-06-25_11-21-23.png

申请新模板时添加的关键词类型要注意参照小程序文档

Snipaste_2021-06-25_11-21-39.png

1.png

步骤二:获取用户授权 主要在小程序端操作,需要用户发生实质交互行为,如点击事件等才可唤起授权弹窗。

2.png

注意事项:

  1. 如果用户选择“取消”表示拒绝订阅消息,“允许”表示用户订阅一次消息
  2. 如果用户不勾选“总是保持以上选择,不再询问”,则每次都会触发弹窗,否则不再拉起授权弹窗
  3. 勾选“保持选择” + 取消按钮,表示每次调用这个API时,都会默认拒绝授权;“保持选择” + 允许按钮表示每次都自动授权,保持选择的功能主要是记住你的勾选
  4. 如自动拒绝后想接受订阅,需要用户点击小程序右上角——设置——“消息订阅”中更改设置
  5. 订阅消息点击一次发送一次,授权没有时效限制,只要没有发送就一直有效。消息下发一次后用户想要再次接收,则需要再走一次授权流程;重复多次点击授权,则发送次数会累计,逐次扣除

前端代码:

handleSubmit() {
    this.$refs.uForm.validate(valid => {
	if (valid) {
            const templateId = ['PBNtcz6vrUU3mrmTvBThUIxeo6bO79GuMn7y53z2qqg', 'o3KTkJtgjZY4cg8UL328s6Z0-nU8hA1WL6sjcUyd-j4']  //一个或多个模板ID,数组形式
            wx.requestSubscribeMessage({
		tmplIds: templateId,
		success: (res) => { //accept接收 reject拒绝
                    if (res[templateId[0]] == 'accept' || res[templateId[1]] == 'accept') {
			uni.showToast({
                            title: '订阅成功',
                            duration: 2000
			})
                        //其他业务代码
                    }
                },
                fail:(err) => {
                    console.log(err)
                }
            })
        }
    })
}
               

步骤三:调用接口下发订阅消息 这一步骤主要由后端完成接口编写,前端进行调用,按照接口要求传参即可。

sendMessage(openid){
    var currentTime = new Date();
    let sendTime = `${currentTime.getFullYear()}-${currentTime.getMonth()+1}-${currentTime.getDate()} ${currentTime.getHours()}:${currentTime.getMinutes()}:${currentTime.getSeconds()}`;
    let params = {
        touser: openid, //接收消息用户的openid,后端提供
        template_id: 'PBNtcz6vrUU3mrmTvBThUIxeo6bO79GuMn7y53z2qqg', //发送模板ID
	page: 'pages/index/index?isApproved=true', //用户收到服务通知后点击跳转的页面
	data: {
            thing1: {value: '审核结果通知'}, //“thing1”为模板参数的类型,value为展示的内容
            name3: {value: uni.getStorageSync('userName')},
            phrase5: {value: '已通过'},
            date2: {value: sendTime}
	},
	miniprogram_state: 'formal' //正式版
    }
    httpRequest({
	url: 'wxwms/WXInit/WXSendMsg',
	params: JSON.stringify(params)
    }).then(res => {
        console.log('发送成功')
    })
}

666.png