java map生成xml_Xml转map map转xml 生成签名 签名校验

package com.cm.weixin.pay.utils;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import java.io.ByteArrayInputStream;

import java.io.InputStream;

import java.io.StringWriter;

import java.util.*;

/**

* 微信支付工具类,xml转map,map转xml,生成签名

*/

public class WXPayUtil {

/**

* XML格式字符串转换为Map

*

* @param strXML XML字符串

* @return XML数据转换后的Map

* @throws Exception

*/

public static Map xmlToMap(String strXML) throws Exception {

try {

Map data = new HashMap();

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8"));

org.w3c.dom.Document doc = documentBuilder.parse(stream);

doc.getDocumentElement().normalize();

NodeList nodeList = doc.getDocumentElement().getChildNodes();

for (int idx = 0; idx < nodeList.getLength(); ++idx) {

Node node = nodeList.item(idx);

if (node.getNodeType() == Node.ELEMENT_NODE) {

org.w3c.dom.Element element = (org.w3c.dom.Element) node;

data.put(element.getNodeName(), element.getTextContent());

}

}

try {

stream.close();

} catch (Exception ex) {

// do nothing

}

return data;

} catch (Exception ex) {

throw ex;

}

}

/**

* 将Map转换为XML格式的字符串

*

* @param data Map类型数据

* @return XML格式的字符串

* @throws Exception

*/

public static String mapToXml(Map data) throws Exception {

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();

org.w3c.dom.Document document = documentBuilder.newDocument();

org.w3c.dom.Element root = document.createElement("xml");

document.appendChild(root);

for (String key: data.keySet()) {

String value = data.get(key);

if (value == null) {

value = "";

}

value = value.trim();

org.w3c.dom.Element filed = document.createElement(key);

filed.appendChild(document.createTextNode(value));

root.appendChild(filed);

}

TransformerFactory tf = TransformerFactory.newInstance();

Transformer transformer = tf.newTransformer();

DOMSource source = new DOMSource(document);

transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

StringWriter writer = new StringWriter();

StreamResult result = new StreamResult(writer);

transformer.transform(source, result);

String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", "");

try {

writer.close();

}

catch (Exception ex) {

}

return output;

}

/**

* 生成微信支付sign

* @return

*/

public static String createSign(SortedMap params, String key){

StringBuilder sb = new StringBuilder();

Set> es = params.entrySet();

Iterator> it = es.iterator();

//生成 stringA="appid=123123&body=cm&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA";

while (it.hasNext()){

Map.Entry entry = (Map.Entry)it.next();

String k = (String)entry.getKey();

String v = (String)entry.getValue();

if(null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)){

sb.append(k+"="+v+"&");

}

}

sb.append("key=").append(key);

String sign = CommonUtils.MD5(sb.toString()).toUpperCase();

return sign;

}

/**

* 校验签名

*

* @param params

* @param key

* @return

*/

public static boolean isCorrectSign(SortedMap params, String key){

String sign = createSign(params,key);

String weixinPaySign = params.get("sign").toUpperCase();

return weixinPaySign.equals(sign);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值