如果在微信公众号接入了第三方的URL,那么用户微信服务器的请求将会被推送到第三方的URL上面,那么该如何解析数据呢?下面来分析
找到MessageUtil.java 这个类中有一个parseXml的静态方法
1 /** 2 * 解析微信发来的请求(XML) 3 * 4 * @param request 5 * @return 6 * @throws Exception 7 */ 8 @SuppressWarnings("unchecked") 9 public static MapparseXml(HttpServletRequest request) throws Exception {10 // 将解析结果存储在HashMap中11 Map map = new HashMap ();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 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 MaprequestMap = 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 //消息id11 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");
这样就可以根据消息类型来做出不同的响应了