# 小程序添加订阅消息

# 2020年初小程序取消了模板消息模块,全面采用订阅消息替换模板消息

wx官方文档地址 (opens new window)

uni的文档地址 (opens new window)

目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,所以要使用一次性订阅消息。开发者可不限时间地下发一条对应的服务消息;每订阅一次仅可以发送一次消息。

  • 先去微信后台开通订阅功能,设置需要的模板,获取模板ID

如果没有合适的模板,可以申请添加新模板,审核通过后可使用。

  • 前端弹窗,提醒用户授权

对于我这边需要订阅两个消息,用户提交问题审核通过的消息,和有部门回复了该用户的消息(后面还要加追问的)

uni.requestSubscribeMessage({
	tmplIds:['ZB7opRDBChEncSVh5','HwRKVtCt'],
	success: function(res) {
		console.log(JSON.stringify(res));
	},
	fail: function(res) {
		console.log(JSON.stringify(res));
	},
	complete: (res) => {
		console.log(res)
	}

})
1
2
3
4
5
6
7
8
9
10
11
12
13

因为业务逻辑是用户可以发多个问题,对应不同的每个问题都要单独订阅2种状态(审核通过和部门回复),所以需要对问题id进行区分

let dyA =[]
uni.requestSubscribeMessage({
	tmplIds:['ZB7opRDBChEnc','HwRKVtCt'],
	success: function(res) {
		console.log(res);
		if(res['ZB7opRDBChEnc'] == 'accept'){
			dyA.push('ZB7opRDBChEnc')
		}
		if(res['HwRKVtCt'] == 'accept'){
			dyA.push('HwRKVtCt')
		}
		if(dyA.length > 0) 
			post(dyA,qid) //向服务端提交 订阅的问题id和该问题订阅的消息type,服务端进行筛选推送
	},
	fail: function(res) {
		console.log(JSON.stringify(res));
	},
	complete: (res) => {
		console.log(333,res)
	}

})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

注:在获取权限之前,需要用户已经登录,已记录过用户openid,因为发送订阅消息是通过用户的openid进行下发,如果没有用户openid,用户是无法获取到订阅消息的。

  • 后端调用接口下发订阅消息

  • 追问问题增加订阅消息 对提问的问题进行追问,追问可以看成在之前问题基础上 提出了新的问题,也要订阅审核状态和部门回复状态。