uniapp中实现调用微信订阅消息模板发送

最近由于公司那边我负责的小程序需要增加一个消息推送的功能,由于我是用的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和请求参数

消息相关 / 订阅消息 / 发送订阅消息 (qq.com)

请求参数

好了,既然已经知道发送订阅消息所需要的参数了,那我们就一个个去找就行了

首先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其实公司是传一个时间参数,刚开始传的年月日还不行,这些东西还是需要多和同时沟通一下……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值