diff --git a/src/main/java/com/jmfy/controller/ChengfengRechargeController.java b/src/main/java/com/jmfy/controller/ChengfengRechargeController.java index 95b5010..8d8c81e 100644 --- a/src/main/java/com/jmfy/controller/ChengfengRechargeController.java +++ b/src/main/java/com/jmfy/controller/ChengfengRechargeController.java @@ -48,11 +48,13 @@ public class ChengfengRechargeController { String ntData = requestMap.get("nt_data"); String decode = FengTiDesUtil.decode(ntData, Callback_Key); - HashMap data = (HashMap) XmlUtil.readStringXmlOut(decode); - LOGGER.info("疯体,解析xml参数:{}",data); - String orderno = data.get("order_no"); // 支付订单号 - double amount = Double.parseDouble(data.get("amount")) * 100; //充值金额(单位:元)(需要换算成分) - String gameExt = data.get("extras_params"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符 + + Map map = new HashMap<>(); + Map data = XmlUtil.parseXml2Map(decode, map); + LOGGER.info("疯体xml参数,解析前:{},解析后:{}",decode, data); + String orderno = data.get("message.order_no"); // 支付订单号 + double amount = Double.parseDouble(data.get("message.amount")) * 100; //充值金额(单位:元)(需要换算成分) + String gameExt = data.get("message.extras_params"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符 String[] callback = gameExt.split("_"); return payLogic.initOrder(gameExt, orderno, String.valueOf(amount), new Date(), callback[0], PaySdkEnum.FENGTIIOS); } diff --git a/src/main/java/com/jmfy/controller/FengtiIOSRechargeController.java b/src/main/java/com/jmfy/controller/FengtiIOSRechargeController.java index a7b3e05..e2a9b13 100644 --- a/src/main/java/com/jmfy/controller/FengtiIOSRechargeController.java +++ b/src/main/java/com/jmfy/controller/FengtiIOSRechargeController.java @@ -46,11 +46,14 @@ public class FengtiIOSRechargeController { String ntData = requestMap.get("nt_data"); String decode = FengTiDesUtil.decode(ntData, Callback_Key); - HashMap data = (HashMap) XmlUtil.readStringXmlOut(decode); - LOGGER.info("疯体,解析xml参数:{}",data); - String orderno = data.get("out_order_no"); // 支付订单号 - double amount = Double.parseDouble(data.get("amount")) * 100; //充值金额(单位:元)(需要换算成分) - String gameExt = data.get("extras_params"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符 + + Map map = new HashMap<>(); + Map data = XmlUtil.parseXml2Map(decode, map); + LOGGER.info("疯体xml参数,解析前:{},解析后:{}",decode, data); + String orderno = data.get("message.order_no"); // 支付订单号 + double amount = Double.parseDouble(data.get("message.amount")) * 100; //充值金额(单位:元)(需要换算成分) + String gameExt = data.get("message.extras_params"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符 + String[] callback = gameExt.split("_"); return payLogic.initOrder(gameExt, orderno, String.valueOf(amount), new Date(), callback[0], PaySdkEnum.FENGTIIOS); } diff --git a/src/main/java/com/jmfy/util/XmlUtil.java b/src/main/java/com/jmfy/util/XmlUtil.java index d3b90dc..8194189 100644 --- a/src/main/java/com/jmfy/util/XmlUtil.java +++ b/src/main/java/com/jmfy/util/XmlUtil.java @@ -4,7 +4,9 @@ import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; +import org.dom4j.io.SAXReader; +import java.io.StringReader; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -78,6 +80,42 @@ public class XmlUtil { } } + /** + * 将xml转换为Map。 支持xml标签多层嵌套,并以"."分隔多级标签(不包括根节点)。 不支持XML标签重复时的情况 + * + * @param xml + * @param map + * @return + */ + public static Map parseXml2Map(String xml, Map map) { + try { + SAXReader reader = new SAXReader(); + Document doc = reader.read(new StringReader(xml)); + Element root = doc.getRootElement(); + String path = ""; + if (map.containsKey(root.getName().trim())) { + path = map.get(root.getName().trim()); + map.remove(root.getName().trim()); + } + for (Iterator i = root.elementIterator(); i.hasNext();) { + Element element = (Element) i.next(); + if (element.isTextOnly()) { + if (path.length() > 0) { + map.put(path + element.getName().trim(), element.getTextTrim()); + } else { + map.put(element.getName().trim(), element.getTextTrim()); + } + } else { + map.put(element.getName().trim(), path+ element.getName().trim() + "."); + parseXml2Map(element.asXML(), map); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return map; + } + /** * @description 将xml字符串转换成map * @param xml