小程序中使用订阅消息(前端开发)

小程序想要向用户的微信服务通知中发送消息,可以使用小程序开发文档里提供的订阅消息来实现,效果如图:
在这里插入图片描述
实现订阅消息需要前后端配合

前端工作:

1.获取订阅消息模板

打开微信公众平台,输入账号密码登录,进入到“订阅消息”页面去获取模板
在这里插入图片描述

2.获取openid

需要由前端先去调用 wx.login 方法去获取code,然后后端再根据这个code去调用微信服务端的api,获取openid,有了openid以后,才能向用户微信发送订阅消息(发送订阅消息的api是由后端调用的)

wx.login({
	success (res) {
		console.log(res.code) // 拿着这个code传给后端,后端调用微信服务端api去取得openid
	}
})

注:openid的一般用法是,后端获取openid后,将其保存在用户表中,用户登录时,如果检测到该用户已有openid字段,就不需要再次获取;如果没有,则调用 wx.login 方法与后端配合去获取openid

3.检查用户是否有同意了订阅消息

wx.getSetting({ // getSetting方法用来获取小程序向用户请求过的权限
	withSubscriptions: true, // 这个字段为true时,用来获取用户订阅消息的订阅状态
	success (res) {
		// 我们需要判断的是res.subscriptionsSetting.itemSettings这个字段
		// 假设你的模板id为"abcd",itemSettings里,如果没有名为abcd的属性,表明用户还未订阅过消息
		// 如果有名为adcd的属性,且属性值为reject,表明用户拒绝订阅该消息
		// 如果有名为abcd的属性,且属性值为accept,表明用户已接受该订阅消息
		console.log(res.subscriptionsSetting.itemSettings)
	}
})

需要注意的是,检查用户是否有同意了订阅消息,必须要在真机上调试调用

4.如果用户没有订阅消息,则发起订阅消息弹窗

// 发起订阅消息弹窗
wx.requestSubscribeMessage({
	tmplIds: ['abcd'], // 模板id列表
	success (res) {},
	fail (err) {}
})

需要注意的是,发起订阅弹窗的方法,必须手动触发(比如点击按钮触发)或者在支付回调中才能触发,在别的回调中是无法触发的,如下

wx.getSetting({
	withSubscriptions: true,
	success (res) {
		// 先判断用户是否有订阅了该消息
		if (res.subscriptionsSetting.itemSettings['模板id'] !== 'accept') {
			wx.requestSubscribeMessage({
				tmplIds: ['模板id'],
				success (res) {}
			})
		}
	}
})

这样的代码是错误的做法,除非是支付方法的回调,否则只能手动触发,一点击按钮,就要调用wx.requestSubscribeMessage方法。此外,该方法也必须在真机上调试

wx.requestSubscribeMessage方法的运行效果:
在这里插入图片描述
使用规则:
如果你勾选了“总是保持以上选择,不再询问”,那么不管你选择的是取消还是允许,只要是用你的微信号打开的小程序,都再也不会发起订阅消息弹窗。后续要更改设置的话,只能到小程序的设置中去设置
在这里插入图片描述
但是,若你一直不勾选“总是保持以上选择,不再询问”,则每一次都会发起订阅消息弹窗。且这个时候,在小程序的设置中是无法设置的,只能一次次地点击取消或允许。
除此之外,发送订阅消息的次数与你点击允许的次数成正比。如果不勾选“总是保持以上选择”,则你允许一次,后端只能发送一次消息给你,没办法发送多次

后端工作:
1.获取openid,将openid保存在用户表中
2.根据模板id,openid,以及字段详情,调用微信服务端api,发送消息给微信用户
在这里插入图片描述

上诉各个api仅是简单介绍,实际开发中也够用了。更详细的用法,还是需要查看微信开发者文档

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值