首页 > 代码库 > 微信公众平台API测试——接收视频消息

微信公众平台API测试——接收视频消息

一、简介

     当普通微信用户向公众账号发消息时,微信服务器将用户发送的消息封装成XML数据包,通过POST消息发送到开发者的URL上。

     微信服务器在五秒内收不到服务器的响应会断掉连接,并且重新发起请求,总共重试三次。关于重试的消息排重,推荐使用msgid排重。

     假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

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

  • 1 文本消息
  • 2 图片消息
  • 3 语音消息
  • 4 视频消息
  • 5 地理位置消息
  • 6 链接消息

二、适用场景

    普通微信用户通过微信给公众账号发送的视频时,微信服务器将此视频信息封装为视频消息发送到开发者URL。服务器接收到此消息后,可以通过解析到的MediaId调用多媒体文件下载接口获取视频数据,根据解析到的ThumbMediaId可以调用多媒体文件下载接口获取视频消息缩略图。

三、消息格式说明

1 <xml>
2 <ToUserName><![CDATA[toUser]]></ToUserName>
3 <FromUserName><![CDATA[fromUser]]></FromUserName>
4 <CreateTime>1357290913</CreateTime>
5 <MsgType><![CDATA[video]]></MsgType>
6 <MediaId><![CDATA[media_id]]></MediaId>
7 <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
8 <MsgId>1234567890123456</MsgId>
9 </xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 视频为video
MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
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                     case "video":
33                         $resultStr = $this->handleVideo($postObj);
34                         break;                     
35                     default:
36                         $resultStr = "Unknow message type: " . $MSG_TYPE;
37                         break;
38                 }
39                 //echo $postStr;
40                 echo $resultStr;
41         }else {
42             echo "";
43             exit;
44         }
45     }
46     
47     private function handleVideo($postObj)
48     {
49         //获取视频消息媒体id,可以调用多媒体文件下载接口拉取视频
50         $mediaID = trim($postObj->MediaId);
51         
52         //获取视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取缩略图
53         $thumbMediaId = trim($postObj->ThumbMediaId);
54         
55         if(!empty($mediaID)){
56             $contentStr = "MediaId : " . $mediaID ."\n" . "ThumbMediaId : " . $thumbMediaId . "\n";
57             $resultStr = $this->responseText($postObj, $contentStr);            
58         }else{
59             $resultStr = "MediaId is empty.";    
60         }
61         
62         return $resultStr;        
63     }    
64     
65     private function responseText($object, $content, $flag=0)
66     {
67         $textTpl = "<xml>
68                     <ToUserName><![CDATA[%s]]></ToUserName>
69                     <FromUserName><![CDATA[%s]]></FromUserName>
70                     <CreateTime>%s</CreateTime>
71                     <MsgType><![CDATA[text]]></MsgType>
72                     <Content><![CDATA[%s]]></Content>
73                     <FuncFlag>%d</FuncFlag>
74                     </xml>";
75         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
76         return $resultStr;
77     }     
78 
79 }
80 
81 ?>