模板消息
1.调用模板消息接口
发送模板消息需要通过POST方式调用微信后台接口,接口调用可以是前台调用,也可以是后台调用,接口地址为:
POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
post参数如下:
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
access_token | string | 是 | 接口调用凭证 | |
touser | string | 是 | 接收者(用户)的 openid | |
template_id | string | 是 | 所需下发的模板消息的id | |
page | string | 否 | 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 | |
form_id | string | 是 | 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id | |
data | Object | 否 | 模板内容,不填则下发空模板。具体格式请参考示例。 | |
emphasis_keyword | string | 否 | 模板需要放大的关键词,不填则默认无放大 |
示例代码如下:
{
"touser":"OPENID",
"template_id":"TEMPLATE_ID",
"page":"index",
"form_id":"FORMID",
"data":{
"keyword1":{
"value":"339208499"
},
"keyword2":{
"value":"2019年04月09日 18:00"
},
"keyword3":{
"value":"腾讯微信总部"
},
"keyword4":{
"value":"广州市海珠区新港中路397号"
}
},
"emphasis_keyword":"keyword1.DATA"
}
接口返回数据:
{
"errcode":0,
"errmsg":"ok"
}
返回数据中常见的错误码有:
值 | 说明 | 最低版本 |
---|---|---|
40037 | template_id不正确 | |
41028 | form_id不正确,或者过期 | |
41029 | form_id已被使用 | |
41030 | page不正确 | |
45009 | 接口调用超过限额(目前默认每个帐号日调用限额为100万) |
调用模板消息时有几个参数非常关键,分别是:access_token(接口url参数),form_id,template_id和data。接下来我们一一分析这些参数
1)template_id和data
template_id是需要调用模板的id,data为当前模板所需要的数据,小程序所有模板都在微信公众平台->新模板消息进行管理,template_id可在模板管理界面中直接复制,没有模板时可以创建一个新的模板,微信定制了多种类型的模板,每个模板可以选取需要填写哪些key值,这些key值会根据请求参数data属性进行填写。
2)form_id
form_id的值由页面<form/>组件submit方法生成,获取时需要将<form/>的report-submit属性值设为true,此使点击提交按钮触发submit事件时,可通过参数获取。
示例代码如下:
<form report-submit bindsubmit="submit">
<button form-type='submit'>提交</button>
</form>
Page({
submit:function(e){
console.log(e.detail.formId);
}
});
当用户完成支付行为时,form_id的值应为统一下单接口返回的prepay_id
3)access_token
access_token时全局唯一的接口调用凭证,调用很多就扣需要使用access_token。access_token存储至少需要512个字符控件,获取access_token需要通过get方式调用微信后台接口:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
其参数如下:
- ·grant_type:接口类型,获取access_token时填写client_credential,必填项
- appid:第三方用户唯一凭证,即小程序appid,可在微信公众平台设置中获取
- secret:第三方用户唯一凭证密钥,即appsecret,可在微信公众平台设置中获取
正常情况下,微信会返回如下JSON数据:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
返回数据中expires_in指凭证有效时间,单位秒。由此可以看出access_token有效时间为2小时,失效后需要定时刷新,重复刷新将导致上次获取的access_token失效,同时access_token有失效时间而且每天调用接口次数有限制,如果每个服务(或小程序客户端)单独调用接口获取access_token将会导致access_token不一致,产生冲突,导致服务不稳定,所以我们通常利用中控服务单独维护access_token,系统所有服务都依赖这个服务获取access_token,这样能保证access_token的一致性和有效生命周期,获取access_token方式如下:
- 建议开发者使用中控服务器统一获取和刷新
access_token
,其他业务逻辑服务器所使用的access_token
均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token
覆盖而影响业务; access_token
的有效期通过返回的expire_in
来传达,目前是7200秒之内的值,中控服务器需要根据这个有效时间提前去刷新。在刷新过程中,中控服务器可对外继续输出的老access_token
,此时公众平台后台会保证在5分钟内,新老access_token
都可用,这保证了第三方业务的平滑过渡;access_token
的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token
的接口,这样便于业务服务器在API调用获知access_token
已超时的情况下,可以触发access_token
的刷新流程。