使用模板消息
- 獲取模板 id
登錄https://mp.weixin.qq.com獲取模板,如果沒有合適的模板,可以申請添加新模板,審核通過后可使用,詳見模板審核說明

-
頁面的
<form/>組件,屬性report-submit為true時,可以聲明為需發模板消息,此時點擊按鈕提交表單可以獲取formId,用於發送模板消息。或者當用戶完成支付行為,可以獲取prepay_id用於發送模板消息。 -
調用接口下發模板消息(詳見接口說明)
接口說明
1. 獲取 access_token
access_token 是全局唯一接口調用憑據,開發者調用各接口時都需使用 access_token,請妥善保存。access_token 的存儲至少要保留512個字符空間。access_token 的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的 access_token 失效。
公眾平台的 API 調用所需的 access_token 的使用及生成方式說明:
- 為了保密 appsecrect,第三方需要一個 access_token 獲取和刷新的中控服務器。而其他業務邏輯服務器所使用的 access_token 均來自於該中控服務器,不應該各自去刷新,否則會造成 access_token 覆蓋而影響業務;
- 目前 access_token 的有效期通過返回的 expires_in 來傳達,目前是7200秒之內的值。中控服務器需要根據這個有效時間提前去刷新新 access_token。在刷新過程中,中控服務器對外輸出的依然是老 access_token,此時公眾平台后台會保證在刷新短時間內,新老 access_token 都可用,這保證了第三方業務的平滑過渡;
- 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 數據包給開發者:返回參數說明:
{"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",
}

下發條件說明
-
支付
當用戶在小程序內完成過支付行為,可允許開發者向用戶在7天內推送有限條數的模板消息(1次支付可下發1條,多次支付下發條數獨立,互相不影響)
-
提交表單
當用戶在小程序內發生過提交表單行為且該表單聲明為要發模板消息的,開發者需要向用戶提供服務時,可允許開發者向用戶在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") } }); }; }
另外有一個問題是 在微信吊起支付,支付完成后點擊完成才會發送模板消息 這一點問了很多人 不知道怎么解決 ,如果有方案歡飲溝通。
