一、簡介
當普通微信用戶向公眾賬號發消息時,微信服務器將用戶發送的消息封裝成XML數據包,通過POST消息發送到開發者的URL上。
微信服務器在五秒內收不到服務器的響應會斷掉連接,並且重新發起請求,總共重試三次。關於重試的消息排重,推薦使用msgid排重。
假如服務器無法保證在五秒內處理並回復,可以直接回復空串,微信服務器不會對此作任何處理,並且不會發起重試。
當前支持如下的普通消息:
- 1 文本消息
- 2 圖片消息
- 3 語音消息
- 4 視頻消息
- 5 地理位置消息
- 6 鏈接消息
二、適用場景
普通微信用戶通過微信給公眾賬號發送的文本消息,微信服務器即封裝為此文本消息格式發送到開發者URL。
三、消息格式說明
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
參數 | 描述 |
---|---|
ToUserName | 開發者微信號 |
FromUserName | 發送方帳號(一個OpenID) |
CreateTime | 消息創建時間 (整型) |
MsgType | text |
Content | 文本消息內容 |
MsgId | 消息id,64位整型 |
四、代碼示例
<?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); class wechatCallbackapiTest { public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if(!empty( $keyword )) { $msgType = "text"; $contentStr = "You input message : " . $keyword; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } } ?>
五、消息測試
通過微信公眾平台接口調試工具可以很方便的調試接收接口。
填寫好對應的字段信息,點擊檢查問題,即可對接收接口進行調試。
收到相應后,頁面下方會將返回結果顯示出來,紅色框中的就是返回的消息,里面附帶了發送的消息: