jeewx的使用_02 解析微信服务器post过来的数据

如果在微信公众号接入了第三方的URL,那么用户微信服务器的请求将会被推送到第三方的URL上面,那么该如何解析数据呢?下面来分析

找到MessageUtil.java 这个类中有一个parseXml的静态方法

 1 /**
 2      * 解析微信发来的请求(XML)
 3      * 
 4      * @param request
 5      * @return
 6      * @throws Exception
 7      */
 8     @SuppressWarnings("unchecked")
 9     public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
10         // 将解析结果存储在HashMap中
11         Map<String, String> map = new HashMap<String, String>();
12 
13         // 从request中取得输入流
14         InputStream inputStream = request.getInputStream();
15         // 读取输入流
16         SAXReader reader = new SAXReader();
17         Document document = reader.read(inputStream);
18         // 得到xml根元素
19         Element root = document.getRootElement();
20         // 得到根元素的所有子节点
21         List<Element> elementList = root.elements();
22 
23         // 遍历所有子节点
24         for (Element e : elementList){
25             
26                 map.put(e.getName(), e.getText());
27         }
28         // 释放资源
29         inputStream.close();
30         inputStream = null;
31 
32         return map;
33     }

该方法将xml的数据包解析为一个map的数据结构,然后开发者就可以从这个map中获取所需要的各种数据信息

 1  // xml请求解析
 2 Map<String, String> requestMap = MessageUtil.parseXml(request);
 3 
 4 1 // 发送方帐号(用户的open_id)
 5  2 String fromUserName = requestMap.get("FromUserName");
 6  3 // 公众帐号
 7  4 String toUserName = requestMap.get("ToUserName");
 8  5 // 消息类型
 9  6 String msgType = requestMap.get("MsgType");
10  7 //消息id
11  8 String msgId = requestMap.get("MsgId");
12  9 // 消息内容
13 10 String content = requestMap.get("Content");
14 11 //扫描类型
15 12 String scanType=requestMap.get("ScanType");
16 13 //扫描结果
17 14 String scanResult=requestMap.get("ScanResult");

这样就可以根据消息类型来做出不同的响应了

 

posted @ 2016-02-26 14:33  npe0  阅读(361)  评论(0编辑  收藏  举报