模板消息
1.调用模板消息接口
发送模板消息需要通过POST方式调用微信后台接口,接口调用可以是前台调用,也可以是后台调用,接口地址为:
POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKENpost参数如下:
| 属性 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
| 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的刷新流程。













