最近由于公司那边我负责的小程序需要增加一个消息推送的功能,由于我是用的uniapp写的,实现的过程中还是遇到了一些问题,现在在记录一下我的实现思路,方便我以后遇见相似的需求可以直接赋值代码哈哈哈哈哈;
这个主要还是一次性订阅消息,公司小程序不支持长期订阅哈哈哈哈哈
以下就是我的实现思路,首先我们需要获取到用户对于一次性订阅消息的允许:
function Subscribe() {
uni.requestSubscribeMessage({
tmplIds: 你的模板id,//模板ID
success(res) {
console.log('123123', res)
},
fail(err) {
console.log('err', err)
}
})
}
调用上面这段函数你将会得到一个弹窗
只有当你点击允许之后,你的微信才能接收到订阅消息:
注意,这段代码必须通过click点击触发
<template>
<button @click="Subscribe"></button>
</template>
首先去看以下微信的开发者文档中发送订阅消息的api和请求参数
请求参数
好了,既然已经知道发送订阅消息所需要的参数了,那我们就一个个去找就行了
首先access_token:
这里需要有两个参数。一个appid和一个密钥secret,你自己登录你的小程序后台就能看到了,这里就不过多坠叙
//获取access_token
//解释一下:这里的appid和secret都需要通过微信公众平台拿到
const token = ref('')
function getAccessToken() {
return uni.request({
method: "GET",
url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${Info.appid}&secret=${Info.secret}`,
dataType: 'json',
timeout: 30000
}).then(res => {
if (res.statusCode == 200) {
token.value = res.data.access_token
}
})
}
接下来 template_id,这个也能在微信公众号后台拿到,注意这个模板需要自己设置模板,成功后会生成对应的模板id,复制过来就行。
touser:接收者(用户)的openid,这个有一点麻烦,这个需要先拿到登录用户的code,然后再通过拿到的code+appid+secret一起才能拿到,废话不多说直接展示
// 获取usercode
const openid = ref('')
function user_login() {
uni.login({
success(res) {
if (res.code) {
console.log('获取成功', res.code)
getOpenId(res.code) //调用获取openid
} else {
console.log('获取失败!' + res.errMsg)
}
}
})
}
//获取useropenId
function getOpenId(code) {
uni.request({
url: `https://api.weixin.qq.com/sns/jscode2session?appid=${Info.appid}&secret=${Info.secret}&js_code=${code}&grant_type=authorization_code`,
success(res) {
openid.value = res.data.openid
}
})
}
首先我们看一下我们的订阅消息模板的详情,我们的data需要传入哪些参数
okok,现在我们已经拿到了最重要的几个参数了,现在我们可以直接拼接召唤订阅消息
function notice() {
const pushmsg = {
"touser": openid.value,
"template_id": tmplId,
"data": {
"character_string1": {
"value": '12312312311231'
},
"thing2": {
"value": '123123123'
},
"thing3": {
"value": '12312312321'
},
"date4": {
"value": '123123123'
},
"thing18": {
"value": '1231231231'
}
}
}
uni.request({
url: 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' + token.value,
data: JSON.stringify(pushmsg),
method: "POST",
success: (res) => {
console.log('发送成功', res)
},
fail(err) {
console.log('发送失败', err)
}
})
}
注意这只是一个最简单的发送订阅模板消息的流程实现,我删除了公司的业务逻辑代码,只保留的基础的实现流程,像最后发送订阅请求的data数据其实是有格式要求的,这个需要你自己看你当初设置订阅模板的格式,每个人都不一样,像我这边date4其实公司是传一个时间参数,刚开始传的年月日还不行,这些东西还是需要多和同时沟通一下……