小程序 消息订阅

2021/11/10 12:09:51

本文主要是介绍小程序 消息订阅,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、消息类型
	(1) 一次性订阅消息
		用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。
		
	(2) 长期订阅消息
		用户订阅一次后,开发者可长期下发多条消息。
		目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。
	
	(3) 订阅消息语音提醒
		当开发者调用wx.requestSubscribeMessage时仅订阅1条消息且该模板支持开启语音提醒,当用户开启了语音提醒,该模板的订阅状态为'acceptWithAudio'。
			如:收款到账通知

2、配置模板并获取模板id
	小程序后台->订阅消息中设置

3、发起订阅
	一次性模板id和永久模板id不可同时使用
	一次授权调用里,每个tmplId对应的模板标题不能存在相同的,若出现相同的,只保留一个
	
	(1)wx.requestSubscribeMessage
		wx.requestSubscribeMessage({
			tmplIds		['id',...],一次调用最多可订阅3条消息,每个tmplId对应的模板标题需要不相同,否则会被过滤。
			success	
				errMsg	接口调用成功时errMsg值为'requestSubscribeMessage:ok'
				模板id	'accept'、'reject'、'ban'、'filter'
					'accept'表示用户同意订阅该条id对应的模板消息
					'reject'表示用户拒绝订阅该条id对应的模板消息
					'ban'表示已被后台封禁
					'filter'表示该模板因为模板标题同名被后台过滤。
					例如 { errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"}
			fail	
				
			complete	
		})

 	(2)获取用户对相关模板消息的订阅状态
 		当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过wx.getSetting接口可获取用户对相关模板消息的订阅状态
 		wx.getSetting({
 			withSubscriptions	是否同时获取用户订阅消息的订阅状态,默认不获取,注意:withSubscriptions只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。	 
			success			
				authSetting				用户授权结果	
				subscriptionsSetting	用户订阅消息设置,接口参数withSubscriptions值为true时才会返回。
				   	{
				       mainSwitch: true,  订阅消息总开关
				       itemSettings: {    每一项开关
				         SYS_MSG_TYPE_INTERACTIVE: 'accept',  小游戏系统订阅消息
				         SYS_MSG_TYPE_RANK: 'accept'
				         zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject',  普通一次性订阅消息
				         ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',
				       }
				     }
				miniprogramAuthSetting	在插件中调用时,当前宿主小程序的用户授权结果
			fail			
			complete		
 		})

	(3)服务端发送消息
		方式一:
		POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
		请求体:
			access_token|cloudbase_access_token		接口调用凭证
			touser			接收者(用户)的openid
			template_id		所需下发的订阅模板id
			page			点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
			data			模板内容,格式形如{"key1":{"value":any},"key2":{"value":any}}
				参数类别		参数说明	参数值限制	说明
				thing.DATA	事物	20个以内字符	可汉字、数字、字母或符号组合
				number.DATA	数字	32位以内数字	只能数字,可带小数
				letter.DATA	字母	32位以内字母	只能字母
				symbol.DATA	符号	5位以内符号	只能符号
				character_string.DATA	字符串	32位以内数字、字母或符号	可数字、字母或符号组合
				time.DATA	时间	24小时制时间格式(支持+年月日),支持填时间段,两个时间点之间用“~”符号连接	例如:15:01,或:2019年10月1日 15:01
				date.DATA	日期	年月日格式(支持+24小时制时间),支持填时间段,两个时间点之间用“~”符号连接	例如:2019年10月1日,或:2019年10月1日 15:01
				amount.DATA	金额	1个币种符号+10位以内纯数字,可带小数,结尾可带“元”	可带小数
				phone_number.DATA	电话	17位以内,数字、符号	电话号码,例:+86-0766-66888866
				car_number.DATA	车牌	8位以内,第一位与最后一位可为汉字,其余为字母或数字	车牌号码:粤A8Z888挂
				name.DATA	姓名	10个以内纯汉字或20个以内纯字母或符号	中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
				phrase.DATA	汉字	5个以内汉字	5个以内纯汉字,例如:配送中
				基本格式:
					姓名: {{name01.DATA}}
					金额: {{amount01.DATA}}
					行程: {{thing01.DATA}}
					日期: {{date01.DATA}}
				示例:
					"data": {
			          "number01": {
			            "value": '339208499'
			          },
			          "date01": {
			            "value": '2015年01月05日'
			          },
			          "site01": {
			            "value": 'TIT创意园'
			          },
			          "site02": {
			            "value": '广州市新港中路397号'
			          }
			        },
			miniprogram_state		跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
			lang			"进入小程序查看"的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
			
		接口调用凭证ACCESS_TOKEN通过如下接口获取
			GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
	
	方式二:云调用方式
			const cloud = require('wx-server-sdk')
			cloud.init({
			  env: cloud.DYNAMIC_CURRENT_ENV,
			})
			exports.main = async (event, context) => {
			  try {
			    const result = await cloud.openapi.subscribeMessage.send({
					touser			接收者(用户)的openid
					template_id		所需下发的订阅模板id
					page			点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
					data			模板内容,格式形如{"key1":{"value":any},"key2":{"value":any}}
					miniprogram_state		跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
					lang			"进入小程序查看"的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
			      })
			    return result
			  } catch (err) {
			    return err
			  }
			}
	
	(4)服务端接收相关的订阅内容
		1.当用户触发订阅消息弹框后,用户的相关行为事件结果会推送至开发者所配置的服务器地址。
			{
				"ToUserName": "gh_123456789abc",
				"FromUserName": "o7esq5OI1Uej6Xixw1lA2H7XDVbc",
				"CreateTime": "1620973045",
				"MsgType": "event",
				"Event": "subscribe_msg_popup_event",
				"SubscribeMsgPopupEvent": [   {
				      "TemplateId": "hD-ixGOhYmUfjOnI8MCzQMPshzGVeux_2vzyvQu7O68",
				      "SubscribeStatusString": "accept",
				      "PopupScene": "0"
				  }],
			}
			ToUserName	小程序帐号ID
			FromUserName用户openid
			CreateTime	时间戳
			TemplateId	模板id(一次订阅可能有多个id)
			SubscribeStatusString	订阅结果(accept接收,reject拒收)
			PopupScene	弹框场景,0代表在小程序页面内
	
	2.当用户在手机端服务通知里消息卡片右上角“...”管理消息时,或者在小程序设置管理中的订阅消息管理页面内管理消息时,相应的行为事件会推送至开发者所配置的服务器地址。目前只推送取消订阅的事件,即对消息设置“拒收”
		{
		     "ToUserName": "gh_123456789abc",
		     "FromUserName": "o7esq5OI1Uej6Xixw1lA2H7XDVbc",
		     "CreateTime": "1610968440",
		     "MsgType": "event",
		     "Event": "subscribe_msg_change_event",
		     "SubscribeMsgChangeEvent": [  {
		               "TemplateId":"BEwX0BOT3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8",
		               "SubscribeStatusString": "reject"
		     }],
		}
		ToUserName	小程序帐号ID
		FromUserName用户openid
		CreateTime	时间戳
		TemplateId	模板id(一次订阅可能有多个id)
		SubscribeStatusString	订阅结果(reject拒收)
	
	3.调用订阅消息接口发送消息给用户的最终结果,会推送下发结果事件至开发者所配置的服务器地址。
		{
		    "ToUserName": "gh_123456789abc",
		    "FromUserName": "o7esq5PHRGBQYmeNyfG064wEFVpQ",
		    "CreateTime": "1620963428",
		    "MsgType": "event",
		    "Event": "subscribe_msg_sent_event",
		    "SubscribeMsgSentEvent": {
		      "List": {
		        "TemplateId": "BEwX0BO-T3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8",
		        "MsgID": "1864323726461255680",
		        "ErrorCode": "0",
		        "ErrorStatus": "success"
		          }
		      }
		}
		ToUserName	小程序帐号ID
		FromUserName用户openid
		CreateTime	时间戳
		TemplateId	模板id(一次订阅可能有多个id)
		MsgID		消息id(调用接口时也会返回)
		ErrorCode	推送结果状态码(0表示成功)
		ErrorStatus	推送结果状态码对应的含义


这篇关于小程序 消息订阅的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程