您的位置:首页 > 移动开发 > 微信开发

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

2020-03-29 18:33 781 查看

一、简介

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

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

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

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

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

二、适用场景

    普通微信用户通过微信给公众账号转发其他链接消息时,微信服务器就会将此消息的参数封装为链接消息发送到开发者URL。服务器接收到此消息后,可以解析出此消息的:标题,描述和链接URL。通过URL,可以获取用户转发来的网页信息。

 

三、消息格式说明

1 <xml>
2 <ToUserName><![CDATA[toUser]]></ToUserName>
3 <FromUserName><![CDATA[fromUser]]></FromUserName>
4 <CreateTime>1351776360</CreateTime>
5 <MsgType><![CDATA[link]]></MsgType>
6 <Title><![CDATA[公众平台官网链接]]></Title>
7 <Description><![CDATA[公众平台官网链接]]></Description>
8 <Url><![CDATA

五、解析到的结果

 

转载于:https://www.cnblogs.com/youlangu/p/3699923.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
[url=https://blog.csdn.net/amwhbngv30764]amwhbngv30764" target=_blank>]></Url> 9 <MsgId>1234567890123456</MsgId> 10 </xml> [/code]
参数描述
ToUserName 接收方微信号
FromUserName 发送方微信号,若为普通用户,则是一个OpenID
CreateTime 消息创建时间
MsgType 消息类型,link
Title 消息标题
Description 消息描述
Url 消息链接
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                      case "location":
36                         $resultStr = $this->handleLocation($postObj);
37                         break;
38                      case "link":
39                         $resultStr = $this->handleLink($postObj);
40                         break;
41                     default:
42                         $resultStr = "Unknow message type: " . $MSG_TYPE;
43                         break;
44                 }
45                 //echo $postStr;
46                 echo $resultStr;
47         }else {
48             echo "";
49             exit;
50         }
51     }
52
53     private function handleLink($postObj)
54     {
55         //标题
56         $title  = trim($postObj->Title);
57         //消息描述
58         $description = trim($postObj->Description);
59         //链接地址
60         $url = trim($postObj->Url);
61
62         if(!empty($url)){
63             $contentStr = "Title : " . $title ."\n"
64                         . "Description : " . $description . "\n"
65                          . "URL : " . $url . "\n" ;
66             $resultStr = $this->responseText($postObj, $contentStr);
67         }else{
68             $resultStr = "URL is empty.";
69         }
70
71         return $resultStr;
72     }
73
74     private function responseText($object, $content, $flag=0)
75     {
76         $textTpl = "<xml>
77                     <ToUserName><![CDATA[%s]]></ToUserName>
78                     <FromUserName><![CDATA[%s]]></FromUserName>
79                     <CreateTime>%s</CreateTime>
80                     <MsgType><![CDATA[text]]></MsgType>
81                     <Content><![CDATA[%s]]></Content>
82                     <FuncFlag>%d</FuncFlag>
83                     </xml>";
84         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
85         return $resultStr;
86     }
87
88 }
89
90 ?>

五、解析到的结果

 

转载于:https://www.cnblogs.com/youlangu/p/3699923.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
[url=https://blog.csdn.net/amwhbngv30764]amwhbngv30764
发布了0 篇原创文章 · 获赞 0 · 访问量 36 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: