generated from root/miduo_server
Compare commits
10 Commits
5f8256b0b3
...
9604639706
| Author | SHA1 | Date |
|---|---|---|
|
|
9604639706 | |
|
|
0214291769 | |
|
|
48cb3ff326 | |
|
|
37e67277a0 | |
|
|
06acff5c7f | |
|
|
490cc1a7c5 | |
|
|
6fa6ea67a0 | |
|
|
6201c2a6ce | |
|
|
bdc8db7b39 | |
|
|
7faaa5aa2b |
|
|
@ -0,0 +1,80 @@
|
||||||
|
package com.jmfy.controller;
|
||||||
|
|
||||||
|
import com.jmfy.paramBean.PaySdkEnum;
|
||||||
|
import com.jmfy.util.FengTiDesUtil;
|
||||||
|
import com.jmfy.util.JsonUtil;
|
||||||
|
import com.jmfy.util.MD5Util;
|
||||||
|
import com.jmfy.util.XmlUtil;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 悠谷游戏
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
public class ChengfengRechargeController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PayLogic payLogic;
|
||||||
|
|
||||||
|
private static final String Md5_Key = "nsquppru9snefhiheyda86vrya2kf7k3";
|
||||||
|
|
||||||
|
public static final String Callback_Key = "87826953070847860565318328257005";
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(ChengfengRechargeController.class);
|
||||||
|
|
||||||
|
@RequestMapping(value = "/Web/chengfengCallback")
|
||||||
|
public String chengfengCallback(HttpServletRequest request) throws Exception {
|
||||||
|
String result = "error";
|
||||||
|
|
||||||
|
HashMap<String, String> requestMap = JsonUtil.getInstence().getParameterMap2(request);
|
||||||
|
if (requestMap.isEmpty()) {
|
||||||
|
LOGGER.info("疯体 request data is null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
boolean sign = verifySign(requestMap);
|
||||||
|
if (!sign) {
|
||||||
|
LOGGER.info("疯体---》sign error");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String ntData = requestMap.get("nt_data");
|
||||||
|
String decode = FengTiDesUtil.decode(ntData, Callback_Key);
|
||||||
|
|
||||||
|
Map<String, String> map = new HashMap<>();
|
||||||
|
Map<String, String> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证sign
|
||||||
|
* @param map
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean verifySign(Map<String, String> map) {
|
||||||
|
String ntData = map.get("nt_data");
|
||||||
|
String sign = map.get("sign");
|
||||||
|
String md5Sign = map.get("md5Sign");
|
||||||
|
|
||||||
|
LOGGER.info("疯体乘风 加密sign参数,ntdata:{},sign:{}, key:{}",ntData,sign,Md5_Key);
|
||||||
|
String mySign = MD5Util.encrypByMd5(ntData + sign + Md5_Key);
|
||||||
|
if (mySign.equals(md5Sign)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
LOGGER.error("疯体乘风==>sign验证异常, localSign={},md5Sign={},map={}", mySign, md5Sign, map);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
package com.jmfy.controller;
|
||||||
|
|
||||||
|
import com.jmfy.paramBean.PaySdkEnum;
|
||||||
|
import com.jmfy.util.FengTiDesUtil;
|
||||||
|
import com.jmfy.util.JsonUtil;
|
||||||
|
import com.jmfy.util.MD5Util;
|
||||||
|
import com.jmfy.util.XmlUtil;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 悠谷游戏
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
public class FengtiIOSRechargeController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PayLogic payLogic;
|
||||||
|
|
||||||
|
private static final String Md5_Key = "69059243697666791013328131742528";
|
||||||
|
|
||||||
|
public static final String Callback_Key = "65128019344497803431230471351187";
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(FengtiIOSRechargeController.class);
|
||||||
|
|
||||||
|
@RequestMapping(value = "/Web/fengtiIOSCallback")
|
||||||
|
public String fengtiIOSCallback(HttpServletRequest request) throws Exception {
|
||||||
|
String result = "error";
|
||||||
|
|
||||||
|
HashMap<String, String> requestMap = JsonUtil.getInstence().getParameterMap2(request);
|
||||||
|
if (requestMap.isEmpty()) {
|
||||||
|
LOGGER.info("疯体 request data is null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
boolean sign = verifySign(requestMap);
|
||||||
|
if (!sign) {
|
||||||
|
LOGGER.info("疯体---》sign error");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String ntData = requestMap.get("nt_data");
|
||||||
|
String decode = FengTiDesUtil.decode(ntData, Callback_Key);
|
||||||
|
|
||||||
|
Map<String, String> map = new HashMap<>();
|
||||||
|
Map<String, String> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证sign
|
||||||
|
* @param map
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean verifySign(Map<String, String> map) {
|
||||||
|
String ntData = map.get("nt_data");
|
||||||
|
// String decodeNtData = FengTiDesUtil.decode(ntData, Callback_Key);
|
||||||
|
String sign = map.get("sign");
|
||||||
|
// String decodeSign = FengTiDesUtil.decode(sign, Callback_Key);
|
||||||
|
String md5Sign = map.get("md5Sign");
|
||||||
|
|
||||||
|
LOGGER.info("疯体ios 加密sign参数,ntdata:{},sign:{}, key:{}",ntData,sign,Md5_Key);
|
||||||
|
String mySign = MD5Util.encrypByMd5(ntData + sign + Md5_Key);
|
||||||
|
if (mySign.equals(md5Sign)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
LOGGER.error("疯体ios==>sign验证异常, localSign={},md5Sign={},map={}", mySign, md5Sign, map);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,6 +19,7 @@ import java.util.*;
|
||||||
* 疯体 ios
|
* 疯体 ios
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
|
@Deprecated
|
||||||
public class OhayooRechargeController {
|
public class OhayooRechargeController {
|
||||||
@Resource
|
@Resource
|
||||||
private PayLogic payLogic;
|
private PayLogic payLogic;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
package com.jmfy.controller;
|
||||||
|
|
||||||
|
import com.jmfy.paramBean.PaySdkEnum;
|
||||||
|
import com.jmfy.util.JsonUtil;
|
||||||
|
import com.jmfy.util.MD5Util;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 悠谷游戏
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
public class YouGuXQRechargeController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PayLogic payLogic;
|
||||||
|
|
||||||
|
private static final String PAYKEY = "afc0f968ddbdb0d1de3e59ddb01ad892";
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(YouGuXQRechargeController.class);
|
||||||
|
|
||||||
|
@RequestMapping(value = "/Web/youguXQCallback")
|
||||||
|
public String youguCallback(HttpServletRequest request) throws Exception {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("errno","1");
|
||||||
|
|
||||||
|
HashMap<String, String> parameterMap = JsonUtil.getInstence().getParameterMap2(request);
|
||||||
|
if (parameterMap.isEmpty()) {
|
||||||
|
LOGGER.info("悠谷---》youguXQCallback data is null");
|
||||||
|
jsonObject.put("errmsg","youguXQCallback data is null");
|
||||||
|
return jsonObject.toString();
|
||||||
|
}
|
||||||
|
boolean sign = verifySign(parameterMap);
|
||||||
|
if (!sign) {
|
||||||
|
LOGGER.info("悠谷---》sign error");
|
||||||
|
jsonObject.put("errmsg","sign error");
|
||||||
|
return jsonObject.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
String orderno = parameterMap.get("orderno"); // 51sfsy 支付订单号(唯一
|
||||||
|
int amount = Integer.parseInt(parameterMap.get("amount"))*100; // 充值金额(单位:元)(需要换算成分)
|
||||||
|
String gameExt = request.getParameter("extinfo"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符
|
||||||
|
String[] callback = gameExt.split("_");
|
||||||
|
String result = payLogic.initOrder(gameExt, orderno, String.valueOf(amount), new Date(), callback[0], PaySdkEnum.YOUGU);
|
||||||
|
jsonObject.put("errmsg",result);
|
||||||
|
if (result.equals("SUCCESS")){
|
||||||
|
jsonObject.put("errno","0");
|
||||||
|
return jsonObject.toString();
|
||||||
|
}
|
||||||
|
return jsonObject.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证sign
|
||||||
|
* @param map
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean verifySign(Map<String, String> map) {
|
||||||
|
String status = map.get("status"); // 状态(1 成功,2 失败)(目前支付失败不通知)
|
||||||
|
if (status == null || status.isEmpty() || !"1".equals(status)) {
|
||||||
|
LOGGER.error("youguXQCallback orderStatus={}", status);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String sid = map.get("sid"); //游戏区服标识
|
||||||
|
String uid = map.get("uid"); //51sfsy 用户 ID
|
||||||
|
String orderno = map.get("orderno"); // 51sfsy 支付订单号(唯一
|
||||||
|
String amount = map.get("amount"); // 充值金额(单位:元)
|
||||||
|
String gameExt = map.get("extinfo"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符
|
||||||
|
String nonce = map.get("nonce"); //签名时间戳(由 51sfsy 服务端获取当前时间戳,用于生成签名)
|
||||||
|
String token = map.get("token"); //签名(规则见下
|
||||||
|
|
||||||
|
StringBuilder sbKey = new StringBuilder();
|
||||||
|
sbKey.append(sid).append(uid).append(orderno).append(amount).append(gameExt).append(nonce).append(PAYKEY);
|
||||||
|
String mySign = MD5Util.encrypByMd5(sbKey.toString());
|
||||||
|
if (!mySign.equals(token)) {
|
||||||
|
LOGGER.error("youguXQCallback==>roleUid={},sin derify fail, my sign={} sign={}", gameExt, mySign, token);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,8 @@ public enum PaySdkEnum {
|
||||||
HANFAN(9,"HAOFAN"),
|
HANFAN(9,"HAOFAN"),
|
||||||
FENGTIIOS(10,"FENGTIIOS"),
|
FENGTIIOS(10,"FENGTIIOS"),
|
||||||
ANJIU(11, "ANJIU"),
|
ANJIU(11, "ANJIU"),
|
||||||
YOUGU(12,"YOUGU")
|
YOUGU(12,"YOUGU"),
|
||||||
|
FENGTI(13,"FENGTI"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private int id;
|
private int id;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.jmfy.util;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class FengTiDesUtil {
|
||||||
|
|
||||||
|
|
||||||
|
private final static Pattern pattern = Pattern.compile("\\d+");
|
||||||
|
|
||||||
|
private final static String charset="utf-8";
|
||||||
|
|
||||||
|
public static String encode(String src,String key) {
|
||||||
|
try {
|
||||||
|
byte[] data = src.getBytes(charset);
|
||||||
|
byte[] keys = key.getBytes();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0; i < data.length; i++) {
|
||||||
|
int n = (0xff & data[i]) + (0xff & keys[i % keys.length]);
|
||||||
|
sb.append("@" + n);
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}catch (UnsupportedEncodingException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String decode(String src,String key) {
|
||||||
|
if(src == null || src.length() == 0){
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
Matcher m = pattern.matcher(src);
|
||||||
|
List<Integer> list = new ArrayList<Integer>();
|
||||||
|
while (m.find()) {
|
||||||
|
try {
|
||||||
|
String group = m.group();
|
||||||
|
list.add(Integer.valueOf(group));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list.size() > 0) {
|
||||||
|
try {
|
||||||
|
byte[] data = new byte[list.size()];
|
||||||
|
byte[] keys = key.getBytes();
|
||||||
|
|
||||||
|
for (int i = 0; i < data.length; i++) {
|
||||||
|
data[i] = (byte) (list.get(i) - (0xff & keys[i % keys.length]));
|
||||||
|
}
|
||||||
|
return new String(data, charset);
|
||||||
|
} catch (UnsupportedEncodingException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return src;
|
||||||
|
} else {
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,214 @@
|
||||||
|
package com.jmfy.util;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
public class XmlUtil {
|
||||||
|
public void readStringXml(String xml) {
|
||||||
|
Document doc = null;
|
||||||
|
try {
|
||||||
|
|
||||||
|
// 读取并解析XML文档
|
||||||
|
// SAXReader就是一个管道,用一个流的方式,把xml文件读出来
|
||||||
|
//
|
||||||
|
// SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档
|
||||||
|
// Document document = reader.read(new File("User.hbm.xml"));
|
||||||
|
// 下面的是通过解析xml字符串的
|
||||||
|
doc = DocumentHelper.parseText(xml); // 将字符串转为XML
|
||||||
|
|
||||||
|
Element rootElt = doc.getRootElement(); // 获取根节点
|
||||||
|
System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
|
||||||
|
|
||||||
|
Iterator iter = rootElt.elementIterator("head"); // 获取根节点下的子节点head
|
||||||
|
|
||||||
|
// 遍历head节点
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
|
||||||
|
Element recordEle = (Element) iter.next();
|
||||||
|
String title = recordEle.elementTextTrim("title"); // 拿到head节点下的子节点title值
|
||||||
|
System.out.println("title:" + title);
|
||||||
|
|
||||||
|
Iterator iters = recordEle.elementIterator("script"); // 获取子节点head下的子节点script
|
||||||
|
|
||||||
|
// 遍历Header节点下的Response节点
|
||||||
|
while (iters.hasNext()) {
|
||||||
|
|
||||||
|
Element itemEle = (Element) iters.next();
|
||||||
|
|
||||||
|
String username = itemEle.elementTextTrim("username"); // 拿到head下的子节点script下的字节点username的值
|
||||||
|
String password = itemEle.elementTextTrim("password");
|
||||||
|
|
||||||
|
System.out.println("username:" + username);
|
||||||
|
System.out.println("password:" + password);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Iterator iterss = rootElt.elementIterator("body"); ///获取根节点下的子节点body
|
||||||
|
// 遍历body节点
|
||||||
|
while (iterss.hasNext()) {
|
||||||
|
|
||||||
|
Element recordEless = (Element) iterss.next();
|
||||||
|
String result = recordEless.elementTextTrim("result"); // 拿到body节点下的子节点result值
|
||||||
|
System.out.println("result:" + result);
|
||||||
|
|
||||||
|
Iterator itersElIterator = recordEless.elementIterator("form"); // 获取子节点body下的子节点form
|
||||||
|
// 遍历Header节点下的Response节点
|
||||||
|
while (itersElIterator.hasNext()) {
|
||||||
|
|
||||||
|
Element itemEle = (Element) itersElIterator.next();
|
||||||
|
|
||||||
|
String banlce = itemEle.elementTextTrim("banlce"); // 拿到body下的子节点form下的字节点banlce的值
|
||||||
|
String subID = itemEle.elementTextTrim("subID");
|
||||||
|
|
||||||
|
System.out.println("banlce:" + banlce);
|
||||||
|
System.out.println("subID:" + subID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (DocumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将xml转换为Map。 支持xml标签多层嵌套,并以"."分隔多级标签(不包括根节点)。 不支持XML标签重复时的情况
|
||||||
|
*
|
||||||
|
* @param xml
|
||||||
|
* @param map
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Map<String, String> parseXml2Map(String xml, Map<String, String> 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
|
||||||
|
* @return Map
|
||||||
|
*/
|
||||||
|
public static Map readStringXmlOut(String xml) {
|
||||||
|
Map map = new HashMap();
|
||||||
|
Document doc = null;
|
||||||
|
try {
|
||||||
|
// 将字符串转为XML
|
||||||
|
doc = DocumentHelper.parseText(xml);
|
||||||
|
// 获取根节点
|
||||||
|
Element rootElt = doc.getRootElement();
|
||||||
|
// 拿到根节点的名称
|
||||||
|
System.out.println("根节点:" + rootElt.getName());
|
||||||
|
|
||||||
|
// 获取根节点下的子节点head
|
||||||
|
Iterator iter = rootElt.elementIterator("head");
|
||||||
|
// 遍历head节点
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
|
||||||
|
Element recordEle = (Element) iter.next();
|
||||||
|
// 拿到head节点下的子节点title值
|
||||||
|
String title = recordEle.elementTextTrim("title");
|
||||||
|
System.out.println("title:" + title);
|
||||||
|
map.put("title", title);
|
||||||
|
// 获取子节点head下的子节点script
|
||||||
|
Iterator iters = recordEle.elementIterator("script");
|
||||||
|
// 遍历Header节点下的Response节点
|
||||||
|
while (iters.hasNext()) {
|
||||||
|
Element itemEle = (Element) iters.next();
|
||||||
|
// 拿到head下的子节点script下的字节点username的值
|
||||||
|
String username = itemEle.elementTextTrim("username");
|
||||||
|
String password = itemEle.elementTextTrim("password");
|
||||||
|
|
||||||
|
System.out.println("username:" + username);
|
||||||
|
System.out.println("password:" + password);
|
||||||
|
map.put("username", username);
|
||||||
|
map.put("password", password);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取根节点下的子节点body
|
||||||
|
Iterator iterss = rootElt.elementIterator("body");
|
||||||
|
// 遍历body节点
|
||||||
|
while (iterss.hasNext()) {
|
||||||
|
Element recordEless = (Element) iterss.next();
|
||||||
|
// 拿到body节点下的子节点result值
|
||||||
|
String result = recordEless.elementTextTrim("result");
|
||||||
|
System.out.println("result:" + result);
|
||||||
|
// 获取子节点body下的子节点form
|
||||||
|
Iterator itersElIterator = recordEless.elementIterator("form");
|
||||||
|
// 遍历Header节点下的Response节点
|
||||||
|
while (itersElIterator.hasNext()) {
|
||||||
|
Element itemEle = (Element) itersElIterator.next();
|
||||||
|
// 拿到body下的子节点form下的字节点banlce的值
|
||||||
|
String banlce = itemEle.elementTextTrim("banlce");
|
||||||
|
String subID = itemEle.elementTextTrim("subID");
|
||||||
|
|
||||||
|
System.out.println("banlce:" + banlce);
|
||||||
|
System.out.println("subID:" + subID);
|
||||||
|
map.put("result", result);
|
||||||
|
map.put("banlce", banlce);
|
||||||
|
map.put("subID", subID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (DocumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// 下面是需要解析的xml字符串例子
|
||||||
|
String xmlString = "<html>" + "<head>" + "<title>dom4j解析一个例子</title>"
|
||||||
|
+ "<script>" + "<username>yangrong</username>"
|
||||||
|
+ "<password>123456</password>" + "</script>" + "</head>"
|
||||||
|
+ "<body>" + "<result>0</result>" + "<form>"
|
||||||
|
+ "<banlce>1000</banlce>" + "<subID>36242519880716</subID>"
|
||||||
|
+ "</form>" + "</body>" + "</html>";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test2 test = new Test2(); test.readStringXml(xmlString);
|
||||||
|
*/
|
||||||
|
Map map = readStringXmlOut(xmlString);
|
||||||
|
Iterator iters = map.keySet().iterator();
|
||||||
|
while (iters.hasNext()) {
|
||||||
|
String key = iters.next().toString(); // 拿到键
|
||||||
|
String val = map.get(key).toString(); // 拿到值
|
||||||
|
System.out.println(key + "=" + val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue