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");
这样就可以根据消息类型来做出不同的响应了