微信公众平台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 ?>
复制代码

 

微信公众平台API测试——接收语音消息,布布扣,bubuko.com