老师所说的location_select是一个自定义菜单事件推送(准确的说是弹出地理位置选择器的事件推送)
而老师去debug时并不是通过点击自定义菜单去发送位置消息,应该是通过聊天框最右边的“+”号里的“位置”去发送的位置消息
而这样的话,微信服务器返回的就是一个普通的地理位置消息的xml数据,并不是自定义菜单事件推送里的,弹出地理位置选择器的事件的xml数据,而老师在视频里是用这两个不同的事件去做对比的,这两个事件所返回的xml数据包是不同的,所以老师是不是误会了?
然后我自己通过在下面这个方法中的一个输出语句去遍历map中的值,就是那个循环里的输出语句,(因为我不会debug....)
public static Map<String,String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException { Map<String,String> map = new HashMap<String, String>(); SAXReader reader = new SAXReader(); InputStream ins = request.getInputStream(); Document doc = reader.read(ins); Element root = doc.getRootElement(); List<Element> list = root.elements(); for (Element e:list) { map.put(e.getName(),e.getText()); System.out.println(e.getName()+"-->"+e.getText()); } ins.close(); return map; }
我是通过点击我自己创建的自定义菜单中的地理位置选择器去发送位置的,不是老师那样,然后得到了下面这段输出,下面的那一段就是普通的位置消息的数据,与开发文档中的都可以对得上,而上面这一段与自定义菜单的位置事件消息的数据,能对得上前面几个,而后边的几个就是没有了,我就一脸懵逼了....
请大佬们指出哪里有问题,还是说我理解得不对,都请指出,不胜感激!(来自一个很白很白的小白..)
我的按照老师的写的,两种方式都可以,但是在调试的时候一开始是不可以的,和楼主的问题一样,也是先改为了location_select,但是拿不到这个集合里没有Lable的值,我又改回location后,不用debug可以成功,不知道为啥。
[ INFO ] - [ servlet.WeixinServlet.doPost(WeixinServlet.java:55) ] {Location_X=40.067593, CreateTime=1554020443, Location_Y=116.327114, Label=北京市北京回龙观万龙社区(万龙社区16号), Scale=15, ToUserName=gh_3aaa50434c4f, FromUserName=oeA6ZuEqWJ65v1_PYcxpyfcIi3NQ, MsgType=location, MsgId=22248223037388133}
[ INFO ] - [ servlet.WeixinServlet.doPost(WeixinServlet.java:55) ] {CreateTime=1554020443, EventKey=13, SendLocationInfo=, Event=location_select, ToUserName=gh_3aaa50434c4f, FromUserName=oeA6ZuEqWJ65v1_PYcxpyfcIi3NQ, MsgType=event}
同时收到的两个动作,第一个是接收的普通位置信息,第二个才是点击地理位置选择器的事件(参数对不上)
老师的讲解也是有问题的,点击地理位置选择器并发送位置是两个动作同时回传服务器的(点击位置的事件参数的确是和文档对不上的;位置消息没有问题),老师将位置信息参数当成了位置事件的参数
对得上呢,哪个对不上?