一.模板消息是什么?
模板消息是微信为小程序提供的消息推送能力。小程序可以向用户发送重要的消息通知,类似于App的推送通知。
二.限制
相对于App的推送通知,模板消息有很多限制,这是因为微信放置开发者滥用推送能力骚扰用户。
限制1.固定格式,模板化的消息
酒店预订成功消息包含订单号、入住时间、房费
日程提醒消息会包含日程时间、日程内容、地点
只能按照模板的规定内容进行发送。
限制2.前提条件
1)支付
当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发3条,多次支付下发条数独立,互相不影响)
2)提交表单
当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)
此项规定是为了让用户在使用开发者的小程序过程中,发生过交互行为(表单提交事件),才能获取fromId,开发者才有权限给用户发送模板消息。
注: report-submit Boolean 是否返回 formId 用于发送模板消息
<form name='pushMsgFm' report-submit bindsubmit='logInSubmit'>
<button form-type="submit" class='logInButton'>登录</button>
</form>
logInSubmit: function (event) {
console.log(event);
console.log(event.detail.formId);
}
注意:发送模板消息的机会在用户完成操作后的 7 天内有效。一旦超过 7 天,这些发送资格将会自动失效。
在测试时候,模拟器测试下获取不到formId,而是一条提示
真机可以获取到具体的formId,而且用户每次点击按钮都会生成新的formId,所以7 天生命周期也会持续存在,除非用户超过7天不再使用你的小程序。提交一次表单仅仅有一次发送模板消息的权限。
虽然微信为小程序的模板消息发送提出了诸多限制,但是我们依然有办法「突破」这些限制。
简单来说,我们可以将小程序的表单组件进行封装,「伪装」小程序中其他功能按钮。当用户点击按钮时,表单组件就可以为小程序增加模板消息的发送机会。
即便如此,小程序开发者也应该注意:要在微信官方规定之下,正确地使用模板消息。一旦发现小程序滥用模板消息,微信是有权进行封禁的喔。
三.使用
1.进入小程序账户后台,选择要使用的模板消息,没有合适的,可以自己申请创建新的模板消息。
注意,新建模板消息的审核周期为3-7天。
2.发送模板消息可以在前台发送,也可以使用自己的服务器进行发送,按照实际需求进行选择。
首先获取access_token
接口地址
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
这是微信提供获取access_token的接口,grant_type对应的value值是固定的client_credential,appid和secret在自己的小程序账户后台自己看。
注意获取到的access_token只有2小时的有效期,意味着如果需要发送模板消息,就要一直获取新的access_token。expires_in为access_token的有效时长。
{"access_token": "ACCESS_TOKEN", "expires_in": 7200}
发送模板消息
调用微信提供的公共接口
https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
post请求方式
{
"touser": "OPENID", //小程序用户的openId,别问我怎么获取
"template_id": "TEMPLATE_ID", //选择的模板消息id,别问我在哪找
"page": "/pages/index/index", //点击模板消息跳转到小程序的查看页面,可以配置参数
"form_id": "FORMID", //点击from表单提交按钮获取到的formId,上面说了
"data": {
"keyword1": {
"value": "339208499",
"color": "#173177"
},
"keyword2": {
"value": "2015年01月05日 12:30",
"color": "#173177"
},
"keyword3": {
"value": "粤海喜来登酒店",
"color": "#173177"
} ,
"keyword4": {
"value": "广州市天河区天河路208号",
"color": "#173177"
}
},//模板消息的固定内容格式
"emphasis_keyword": "keyword1.DATA" //需要放大的消息
}