爲了保證用戶不受到騷擾,在開發者出現須要主動提醒、通知用戶時,才容許開發者在公衆平臺網站中模板消息庫中選擇模板,選擇後得到模板ID,再根據模板ID向用戶主動推送提醒、通知消息。php
模板消息調用時主要須要模板ID和模板中各參數的賦值內容。請注意:
1.模板中參數內容必須以".DATA"結尾,不然視爲保留字;
2.模板保留符號"{{ }}"android
案例:ios
{{first.DATA}}
買家名字:{{keyword1.DATA}}
付款金額:{{keyword2.DATA}}
下單時間:{{keyword3.DATA}}
{{remark.DATA}}json
具體調用方法api
第一步:獲取模板ID
經過在模板消息功能的模板庫中使用須要的模板,能夠得到模板ID。
第二步:請求接口
請注意,URL置空,則在發送後,點擊模板消息會進入一個空白頁面(ios),或沒法點擊(android)。
POST請求
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
請求包爲一個json:服務器
{ "touser":"OPENID", "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY", "url":"http://weixin.qq.com/download", "topcolor":"#FF0000", "data":{ "User": { "value":"黃先生", "color":"#173177" }, "Date":{ "value":"06月07日 19時24分", "color":"#173177" }, "CardNumber":{ "value":"0426", "color":"#173177" }, "Type":{ "value":"消費", "color":"#173177" }, "Money":{ "value":"人民幣260.00元", "color":"#173177" }, "DeadTime":{ "value":"06月07日19時24分", "color":"#173177" }, "Left":{ "value":"6504.09", "color":"#173177" } } }
效果圖:
微信
事件推送
在模版消息發送任務完成後,微信服務器會將是否送達成功做爲通知,發送到開發者中心中填寫的服務器配置地址中。
一、送達成功時,推送的XML以下:
<[CDATA[gh_7f083739789a]]>
<[CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]&g;
1395658920
<[CDATA[event]]>
<[CDATA[TEMPLATESENDJOBFINISH]]>
200163836
<[CDATA[success]]>併發
二、送達因爲用戶拒收(用戶設置拒絕接收公衆號消息)而失敗時,推送的XML以下:
<[CDATA[gh_7f083739789a]]>
<[CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]>
1395658984
<[CDATA[event]]>
<[CDATA[TEMPLATESENDJOBFINISH]]>
200163840
<[CDATA[failed:user block]]>app
三、送達因爲其餘緣由失敗時,推送的XML以下:
<[CDATA[gh_7f083739789a]]>
<[CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]>
1395658984
<[CDATA[event]]>
<[CDATA[TEMPLATESENDJOBFINISH]]>
200163840
<[CDATA[failed: system failed]]>curl
返回碼說明
在調用模板消息接口後,會返回JSON數據包。正常時的返回JSON數據包示例:
{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}
錯誤時的返回JSON數據,形式相似,錯誤碼請見本頁下方返回碼說明。
返回碼 說明
-1 系統繁忙
0 請求成功
40001 驗證失敗
40002 不合法的憑證類型
40003 不合法的OpenID
40004 不合法的媒體文件類型
40005 不合法的文件類型
40006 不合法的文件大小
40007 不合法的媒體文件id
40008 不合法的消息類型
40009 不合法的圖片文件大小
40010 不合法的語音文件大小
40011 不合法的視頻文件大小
40012 不合法的縮略圖文件大小
40013 不合法的APPID
41001 缺乏access_token參數
41002 缺乏appid參數
41003 缺乏refresh_token參數
41004 缺乏secret參數
41005 缺乏多媒體文件數據
41006 access_token超時
42001 須要GET請求
43002 須要POST請求
43003 須要HTTPS請求
44001 多媒體文件爲空
44002 POST的數據包爲空
44003 圖文消息內容爲空
45001 多媒體文件大小超過限制
45002 消息內容超過限制
45003 標題字段超過限制
45004 描述字段超過限制
45005 連接字段超過限制
45006 圖片連接字段超過限制
45007 語音播放時間超過限制
45008 圖文消息超過限制
45009 接口調用超過限制
46001 不存在媒體數據
47001 解析JSON/XML內容錯誤
PHP實現
1.實例化 獲取appid,appsecret
function __construct($appid, $appsecret) { $this->appid = $appid ? $appid : C('oauth_config.appid'); $this->appsecret = $appsecret ? $appsecret : C('oauth_config.appsecret'); }
2.獲取access_token
/** * 獲取微信基礎接口憑證Access_token * @param $refresh 強制刷新, 默認false * @return String */ function getAccess_token($refresh = false) { $data = json_decode(file_get_contents("access_token.json")); if ($data->expire_time < time() || $refresh) { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->appsecret; $result = json_decode(file_get_contents($url)); $access_token = $result->access_token; if ($result->errcode && !$access_token) { $this->error('get access_token failed.'); } else { $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen("access_token.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); $this->access_token = $access_token; } } else if (!$this->access_token){ $this->access_token = $data->access_token; } return $this->access_token; }
3.發送模板消息
//發送模板消息 function send_template_message($data) { $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' . $this->getAccess_token(); $result = $this->curlRequest($url, urldecode(json_encode($data))); return json_decode($result, true); }
4.組合消息數據
$data = array( 'touser' => $openid, // openid是發送消息的基礎 'template_id' => 'JkZGZlvL5ou_UFide5ncZOzLbtUaPPz8cuYdXUKEkzs', // 模板id 'url' => $this->siteUrl . U('Store/Twitter/team'), // 點擊跳轉地址 'topcolor' => '#FF0000', // 頂部顏色 'data' => array( 'first' => array('value' => '邀請成功'), 'keyword1' => array('value' => $data_arr['realname']), 'keyword2' => array('value' => date('Y年m月d日 H:i', time())), 'remark' => array('value' => '您的好友' . $data_arr['realname'] . '已經成爲分銷商'), ) );
5.獲取openid,併發送消息
function send($type, $member_id, $data_arr) { $member = M('Member')->where(array('id' => $member_id))->find(); $wxuser = M('Wxuser')->where(array('id' => $member['wxuser_id']))->find(); //檢測用戶權限消息設置 if ($member && $wxuser && $this->_checkset($type, $member)) { $data = $this->_getData($type, $wxuser['openid'], $data_arr); import('@.Action.WxDevelop'); $tplmsg = new WxTmplmsg(C('PAY_WEIXIN')['appid'], C('PAY_WEIXIN')['appsecret']); return $tplmsg->send_template_message($data); } }