微信公眾平台API測試——接收語音消息


一、簡介

     當普通微信用戶向公眾賬號發消息時,微信服務器將用戶發送的消息封裝成XML數據包,通過POST消息發送到開發者的URL上。

     微信服務器在五秒內收不到服務器的響應會斷掉連接,並且重新發起請求,總共重試三次。關於重試的消息排重,推薦使用msgid排重。

     假如服務器無法保證在五秒內處理並回復,可以直接回復空串,微信服務器不會對此作任何處理,並且不會發起重試。

當前支持如下的普通消息:

  • 1 文本消息
  • 2 圖片消息
  • 3 語音消息
  • 4 視頻消息
  • 5 地理位置消息
  • 6 鏈接消息

二、適用場景

    普通微信用戶通過微信給公眾賬號發送的語音,微信服務器即封裝為此語音消息格式發送到開發者URL。服務器接收到此消息后,可以通過解析到的MediaId調用多媒體文件下載接口獲取語音數據,根據解析到的語音文件格式可以對語音進行相應處理。

 

三、消息格式說明

1 <xml>
2 <ToUserName><![CDATA[toUser]]></ToUserName>
3 <FromUserName><![CDATA[fromUser]]></FromUserName>
4 <CreateTime>1357290913</CreateTime>
5 <MsgType><![CDATA[voice]]></MsgType>
6 <MediaId><![CDATA[media_id]]></MediaId>
7 <Format><![CDATA[Format]]></Format>
8 <MsgId>1234567890123456</MsgId>
9 </xml>
參數 描述
ToUserName 開發者微信號
FromUserName 發送方帳號(一個OpenID)
CreateTime 消息創建時間 (整型)
MsgType 語音為voice
MediaId 語音消息媒體id,可以調用多媒體文件下載接口拉取數據。
Format 語音格式,如amr,speex等
MsgID 消息id,64位整型

 四、代碼示例

 1 <?php
 2 /**
 3   * wechat php test
 4   */
 5 
 6 //define your token
 7 define("TOKEN", "weixin");
 8 $wechatObj = new wechatCallbackapiTest();
 9 $wechatObj->responseMsg();
10 
11 class wechatCallbackapiTest
12 {
13     public function responseMsg()
14     {
15         //get post data, May be due to the different environments
16         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
17 
18         if (!empty($postStr)){
19                 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
20                 $MSG_TYPE = trim($postObj->MsgType);
21                 
22                 switch ($MSG_TYPE) {
23                     case "text":
24                         $resultStr = $this->handleText($postObj);
25                         break;
26                     case "image":
27                         $resultStr = $this->handleImage($postObj);
28                         break;
29                     case "voice":
30                         $resultStr = $this->handleVoice($postObj);
31                         break;                        
32                     default:
33                         $resultStr = "Unknow message type: " . $MSG_TYPE;
34                         break;
35                 }
36                 //echo $postStr;
37                 echo $resultStr;
38         }else {
39             echo "";
40             exit;
41         }
42     }
43    
44     private function handleVoice($postObj)
45     {
46         //獲取語音消息媒體id,可以調用多媒體文件下載接口拉取數據
47         $mediaID = trim($postObj->MediaId);
48         $format = trim($postObj->Format);
49         
50         if(!empty($mediaID)){
51             $contentStr = "MediaId : " . $mediaID ."\n" . "Format : " . $format . "\n";
52             $resultStr = $this->responseText($postObj, $contentStr);            
53         }else{
54             $resultStr = "MediaId is empty.";    
55         }
56         
57         return $resultStr;        
58     }
59     
60     
61     private function responseText($object, $content, $flag=0)
62     {
63         $textTpl = "<xml>
64                     <ToUserName><![CDATA[%s]]></ToUserName>
65                     <FromUserName><![CDATA[%s]]></FromUserName>
66                     <CreateTime>%s</CreateTime>
67                     <MsgType><![CDATA[text]]></MsgType>
68                     <Content><![CDATA[%s]]></Content>
69                     <FuncFlag>%d</FuncFlag>
70                     </xml>";
71         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
72         return $resultStr;
73     }     
74 
75 }
76 
77 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM