小程序之模板消息

使用模板消息javascript

  1. 獲取模板 id

登陸https://mp.weixin.qq.com獲取模板,若是沒有合適的模板,能夠申請添加新模板,審覈經過後可以使用,詳見模板審覈說明html

 

  1. 頁面的 <form/> 組件,屬性report-submittrue時,能夠聲明爲需發模板消息,此時點擊按鈕提交表單能夠獲取formId,用於發送模板消息。或者當用戶完成支付行爲,能夠獲取prepay_id用於發送模板消息。java

  2. 調用接口下發模板消息(詳見接口說明小程序

接口說明

1. 獲取 access_token

access_token 是全局惟一接口調用憑據,開發者調用各接口時都需使用 access_token,請妥善保存。access_token 的存儲至少要保留512個字符空間。access_token 的有效期目前爲2個小時,需定時刷新,重複獲取將致使上次獲取的 access_token 失效。api

公衆平臺的 API 調用所需的 access_token 的使用及生成方式說明:服務器

  1. 爲了保密 appsecrect,第三方須要一個 access_token 獲取和刷新的中控服務器。而其餘業務邏輯服務器所使用的 access_token 均來自於該中控服務器,不該該各自去刷新,不然會形成 access_token 覆蓋而影響業務;
  2. 目前 access_token 的有效期經過返回的 expires_in 來傳達,目前是7200秒以內的值。中控服務器須要根據這個有效時間提早去刷新新 access_token。在刷新過程當中,中控服務器對外輸出的依然是老 access_token,此時公衆平臺後臺會保證在刷新短期內,新老 access_token 均可用,這保證了第三方業務的平滑過渡;
  3. access_token 的有效時間可能會在將來有調整,因此中控服務器不只須要內部定時主動刷新,還須要提供被動刷新 access_token 的接口,這樣便於業務服務器在 API 調用獲知 access_token 已超時的狀況下,能夠觸發 access_token 的刷新流程。

開發者可使用 AppID 和 AppSecret 調用本接口來獲取 access_token。AppID 和 AppSecret 可登陸微信公衆平臺官網-設置-開發設置中得到(須要已經綁定成爲開發者,且賬號沒有異常狀態)。AppSecret 生成後請自行保存,由於在公衆平臺每次生成查看都會致使 AppSecret 被重置。注意調用全部微信接口時均需使用 https 協議。若是第三方不使用中控服務器,而是選擇各個業務邏輯點各自去刷新 access_token,那麼就可能會產生衝突,致使服務不穩定。微信

接口地址:網絡

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

 

正常狀況下,微信會返回下述 JSON 數據包給開發者:返回參數說明:app

{"access_token": "ACCESS_TOKEN", "expires_in": 7200}

  


{"errcode": 40013, "errmsg": "invalid appid"}
錯誤時微信會返回錯誤碼等信息,JSON 數據包示例以下(該示例爲 AppID 無效錯誤):微信公衆平臺

2. 發送模板消息

接口地址:(ACCESS_TOKEN 需換成上文獲取到的 access_token)

https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN

  HTTP請求方式: POST

 eg:

{
  "touser": "OPENID",  
  "template_id": "TEMPLATE_ID", 
  "page": "index",          
  "form_id": "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" 
}


返回碼說明: 在調用模板消息接口後,會返回JSON數據包。 正常時的返回JSON數據包示例: { "errcode": 0, "errmsg": "ok", }

  

下發條件說明

  1. 支付

    當用戶在小程序內完成過支付行爲,可容許開發者向用戶在7天內推送有限條數的模板消息(1次支付可下發1條,屢次支付下發條數獨立,互相不影響)

  2. 提交表單

    當用戶在小程序內發生過提交表單行爲且該表單聲明爲要發模板消息的,開發者須要向用戶提供服務時,可容許開發者向用戶在7天內推送有限條數的模板消息(1次提交表單可下發1條,屢次提交下發條數獨立,相互不影響)

模板消息填坑指南:

一開始的時候下發模板消息是在微信吊起支付成功後觸發,此時發現模板消息有時好用,偶爾很差用,很差用的仍是報錯是 41028,form_id不正確,或者過時。問詢了一些前輩才知道是存在網絡延遲,致使不起做用,採用定時器這種發現,循環調用模板消息,在

調用成功後中止定時器。

給一個具體的例子:

 

var time = setInterval(function () {
        tem();//定時發起模板消息請求,校驗
}, 5000) function tem(){   var l = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN;   var g = {
   touser: openId,
     template_id: '申請的模板id',
     page: '模板入口頁面',
     form_id: 本次支付的prepay_id, //只有在支付成功時 form_id 纔有值      data: { "keyword1": { "value":key1, "color": "#4a4a4a" }, "keyword2": { "value": key2, "color": "#9b9b9b" }, "keyword3": { "value": key3, "color": "#9b9b9b" }, "keyword4": { "value": key4, "color": "#9b9b9b" }, "keyword5": { "value": key5, "color": "#172177" }, }, emphasis_keyword: 'keyword1.DATA' //模板須要放大的關鍵詞 } wx.request({ url: l,  // data: g, //模板數據 method: 'POST', success: function (res) { if (res.data.errcode == 0) { console.log("sucess"); clearInterval(time); } console.log(res); // wx.showToast({ // title: '訂單支付成功', // icon: 'success', // duration: 1000 // }) }, fail: function (err) { // fail console.log("push err") console.log(err); // 測試 wx.showToast({ title: err.errmsg,//'系統繁忙' icon: 'success', duration: 1000 }) }, complete: function (res) { console.log("tem-complete") } }); }; }

  另外有一個問題是 在微信吊起支付,支付完成後點擊完成纔會發送模板消息 這一點問了不少人 不知道怎麼解決 ,若是有方案歡飲溝通。

相關文章
相關標籤/搜索