微信公众平台API测试——接收地理位置消息

2019-03-02 00:47|来源: 网路

一、简介

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

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

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

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

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

二、适用场景

    普通微信用户通过微信给公众账号发送的位置信息,微信服务器将收到的位置信息封装为位置消息发送到开发者URL。开发者可以从消息中解析出:经度,纬度,当前地图缩放比例,位置描述。通过上述信息,可以精确定位发送位置的用户。

三、消息格式说明

 1 <xml>
 2 <ToUserName><![CDATA[toUser]]></ToUserName>
 3 <FromUserName><![CDATA[fromUser]]></FromUserName>
 4 <CreateTime>1351776360</CreateTime>
 5 <MsgType><![CDATA[location]]></MsgType>
 6 <Location_X>23.134521</Location_X>
 7 <Location_Y>113.358803</Location_Y>
 8 <Scale>20</Scale>
 9 <Label><![CDATA[位置信息]]></Label>
10 <MsgId>1234567890123456</MsgId>
11 </xml> 
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType location
Location_X 地理位置维度
Location_Y 地理位置经度
Scale 地图缩放大小
Label 地理位置信息
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                     default:
39                         $resultStr = "Unknow message type: " . $MSG_TYPE;
40                         break;
41                 }
42                 //echo $postStr;
43                 echo $resultStr;
44         }else {
45             echo "";
46             exit;
47         }
48     }
49     
50     private function handleLocation($postObj)
51     {
52         //获取纬度
53         $latitude  = trim($postObj->Location_X);
54         //获取经度
55         $longitude = trim($postObj->Location_Y);
56         
57         $scale = trim($postObj->Scale);
58         
59         $locationLabel = trim($postObj->Label);64         
65         if(!empty($latitude)){
66             $contentStr = "Latitude : " . $latitude ."\n" 
67                         . "Longitude : " . $longitude . "\n" 
68                         . "Scale : " . $scale . "\n" 
69                          . "Label : " . $locationLabel . "\n" ;
70             $resultStr = $this->responseText($postObj, $contentStr);            
71         }else{
72             $resultStr = "MediaId is empty.";    
73         }
74         
75         return $resultStr;        
76     }         
77     
78     private function responseText($object, $content, $flag=0)
79     {
80         $textTpl = "<xml>
81                     <ToUserName><![CDATA[%s]]></ToUserName>
82                     <FromUserName><![CDATA[%s]]></FromUserName>
83                     <CreateTime>%s</CreateTime>
84                     <MsgType><![CDATA[text]]></MsgType>
85                     <Content><![CDATA[%s]]></Content>
86                     <FuncFlag>%d</FuncFlag>
87                     </xml>";
88         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
89         return $resultStr;
90     }     
91 
92 }
93 
94 ?>

五、获取到的结果

 


转自:http://www.cnblogs.com/youlangu/p/3699901

相关问答

更多
  • 先用抓包软件抓下登录时的数据包,然后 分析他用的是什么协议,然后 根据他的协议来写自己的程序,不过这个是一个比较大的工作量大事。不比抢票软件简单
  • 能使用的!微信 在安卓手机里可以使用,安装是用java 开发的,所以 可以用java开发
  • 微信公众平台多客服无法接收消息: 1、您需要核实确认是否设置微信号。公众平台需要设置微信号之后才可以使用多客服。新申请帐号未设置微信号的情况下无法正常使用。 2、请您确认当前使用的模式,如果是使用编辑模式下接收不到消息,还请您查看是否开启了自动接入会话。打开自动接入后,即可正常查看多客服消息。如果多个客服同时登录,请核实是否为其他客服接待了用户。 3、如果当前使用是的开发模式,服务器配置已启用,还请您通过查看开发者文档,或者联系第三方核实确认,感谢您的支持。
  • 微信公众平台开发注意事项: 一、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。 二、在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。 三、在开发过程中,可以使用接口调试工具来在线调试某些接口。 四、每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。 五、在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台 ...
  • 小猪cms还凑合,,有源码的 ,每周更新两三个模板的 ,你可以看下 ,,
  • 微网站开发模式教程:   第一步:申请消息接口   在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名。   第二步:验证URL有效性   开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:   开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回 echostr参数内容,则接入生效,成为开发 ...
  • 刚刚看错了 这个在原理上是可以实现的 但是电话号码除外 这个需要关注的人自己提供给公众号才行
  • 这个需要根据你找什么样的开发商,然后开发什么样的功能,如果是该需要对接你们系统之类的功能比较复杂,有几千的,也有好几万的,这个看你的需求
  • 由于小程序只提供了我们一个获取地理位置、速度的api,并没有获取的相关地位位置的信息等等,因此我们还需要借助一些第三方的api来实现 我们可以使用百度地图的api来获取地位位置的信息。 1>申请地址 http://lbsyun.baidu.com/index.php?title=wxjsapi/guide/key 2> 第二步:下载百度地图的api ,链接:http://download.csdn.net/detail/michael_ouyang/9754015 解压后,里面有2个js文件,一个是常规没压 ...
  • 登录你的微信平台,点击“公众号设置”。 点击“功能设置”,然后点击“设置”。 设置JS接口安全域名。这里填写的是一级域名,不带www和http。最多可以设置三个域名。设置完后点击确定。(多说一句,相比以前的分享没有任何域名限制,这里设置安全域名,目的是为了当发现此公众平台发现诱导分享行为时,可以根据此域名追溯到所有分享出去的链接,以及通过这些链接增加的粉丝。这样,微信就可以牢牢控制了你的微信平台,一旦发现违规,让分享链接失效,删除掉诱导行为增加的粉丝,是瞬间就可以完成的。因此,微信平台的开发者,一定要合理来 ...