微信小程序学习之路——API模板消息

模板消息

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属性进行填写。

微信小程序学习之路——API模板消息_第1张图片

2)form_id

form_id的值由页面

组件submit方法生成,获取时需要将的report-submit属性值设为true,此使点击提交按钮触发submit事件时,可通过参数获取。

示例代码如下:


  

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 的刷新流程。

 

 

你可能感兴趣的:(微信小程序)