微信支付 MD5加密 、xml转Map/Json 、 Map转xml
来源:互联网 发布:巧克力键盘 知乎 编辑:程序博客网 时间:2024/06/07 11:58
一、MD5加密
public class WxUtils { private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };//获取MessageDigest.digest(str) 后的字节数组(数组长度16 范围-128~127) private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb = new StringBuffer(); for (int i = 0; i < b.length; i++) resultSb.append(byteToHexString(b[i])); return resultSb.toString(); }//对数组中的每个字节进行计算(返回两个字符,最后组成32位密文) private static String byteToHexString(byte b) { int n = b; if (n < 0) n += 256; int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; }//主方法 public static String MD5Encode(String origin, String charsetname) { String resultString = null; try { resultString = new String(origin); MessageDigest md = MessageDigest.getInstance("MD5"); if (charsetname == null || "".equals(charsetname)) //执行md.digest(byte []bytes)过程中,会先执行 update,将字符串的bytes数组加入进程 md.digest(bytes) 返回长度为16的字节数组 resultString = byteArrayToHexString(md.digest(resultString .getBytes())); else resultString = byteArrayToHexString(md.digest(resultString .getBytes(charsetname))); } catch (Exception exception) { } return resultString; } public static void main(String args[]){ WxUtils.MD5Encode("hello","utf-8"); }}
注意:编码格式在没有中文情况下得到的结果是一样的,在有中文的情况下编码格式会影响最后结果,微信sign签名方式为 utf-8 编码格式
二、xml 转 Map/Json (json为例)
package com.wxpay.utils;import net.sf.json.JSONObject;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.springSupport.utils.Md5Util;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.security.MessageDigest;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;public class Test { public JSONObject xmlToMap(Element node) throws DocumentException { JSONObject jsonObject = new JSONObject(); System.out.println("节点的名称:" + node.getName()); //首先获取当前节点的所有属性节点 List<Attribute> list = node.attributes(); //遍历属性节点 for(Attribute attribute : list){ System.out.println("属性"+attribute.getName() +":" + attribute.getValue()); } //如果当前节点内容不为空,则输出 if(!(node.getTextTrim().equals(""))){ System.out.println( node.getName() + ":" + node.getText()); jsonObject.put(node.getName(),node.getText()); } //同时迭代当前节点下面的所有子节点 //使用递归 Iterator<Element> iterator = node.elementIterator(); while(iterator.hasNext()){ Element e = iterator.next(); xmlToMap(e); } return jsonObject; } public static void main(String []args) throws DocumentException { //创建SAXReader对象 SAXReader reader = new SAXReader(); InputStream is = new ByteArrayInputStream("<xml><id>1</id><name>frank</name></xml>".getBytes()); //读取文件 转换成Document Document document = reader.read(is); //获取根节点元素对象 Element root = document.getRootElement(); Test t = new Test(); t.xmlToMap(root); }}
输出结果,如图:
三、Map 转 xml
package com.wxpay.utils;import net.sf.json.JSONObject;import org.apache.commons.lang.StringUtils;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.springSupport.utils.Md5Util;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.security.MessageDigest;import java.util.*;public class Test { /** * map转成xml * @param parm * @param isAddCDATA * @return */ public String mapToXml(Map<String, String> parm, boolean isAddCDATA) {//首先要对map进行ASCLL码排序 ArrayList<Map.Entry<String,String>> arrayList = new ArrayList<>(parm.entrySet()); Collections.sort(arrayList, new Comparator<Map.Entry<String, String>>() { @Override public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) { return o1.getKey().compareTo(o2.getKey()); } }); StringBuffer strbuff = new StringBuffer("<xml>"); if (parm != null && !parm.isEmpty()) { for (Map.Entry<String, String> entry : arrayList) { strbuff.append("<").append(entry.getKey()).append(">"); if (isAddCDATA) { strbuff.append("<![CDATA["); if (StringUtils.isNotEmpty(entry.getValue())) { strbuff.append(entry.getValue()); } strbuff.append("]]>"); } else { if (StringUtils.isNotEmpty(entry.getValue())) { strbuff.append(entry.getValue()); } } strbuff.append("</").append(entry.getKey()).append(">"); } } return strbuff.append("</xml>").toString(); } public static void main(String []args) throws DocumentException { Map<String,String> map = new HashMap<>(); map.put("appid","11111111111111"); map.put("mch_id","222222222222"); map.put("body","测试"); map.put("sign_type","MD5"); Test t = new Test();//是否添加CDATA标签,false为否 System.out.println(t.mapToXml(map,false)); }}
输出结果,如图
阅读全文
1 0
- 微信支付 MD5加密 、xml转Map/Json 、 Map转xml
- 微信支付中xml和map互转
- Android 微信支付返回xml转换成map格式
- json转xml,json转map
- java xml 转 map / map 转 xml
- XML报文转Map
- XML 转 map集合
- Xml字符串转Map
- java Map转XML
- XML字符串转Map
- 微信支付api返回的xml转换为Map的方法
- xml,list,map和json互转的问题
- XML json map list转换
- JSON,Bean,XML,List,Map
- java xml转map map转xml 带属性
- String转XML转Map
- 微信支付(网站支付,APP支付,扫码支付)并充值钻石 Java服务端代码 xml解析 map排序
- MD5加密支付宝支付与微信支付
- Qt调用zlib压缩解压文件
- service tomcat does not support chkconfig 的解决办法:
- jQuery-EasyUI-DataGrid 数据表格
- php的转义字符
- Hanoi Tower汉诺塔问题函数递归算法分析及相应python代码
- 微信支付 MD5加密 、xml转Map/Json 、 Map转xml
- js地理位置管理
- 增强学习系列之(二):实现一个简单的增强学习的例子
- windows下用eclipse+goclipse插件
- 第3章 IAR编程
- 验证用户名,手机号,ip地址,邮箱,url,密码,汉字等等的工具类
- C语言面试题---逻辑短路问题
- xPath语法
- shiro实例 realm