package cn.ksource.web.controller.wxpay.util; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.web.controller.wxpay.WxNativeConfig; /** * User: rizenguo * Date: 2014/10/29 * Time: 15:23 */ public class Signature { /** * 签名算法 * @param o 要参与签名的数据对象 * @return 签名 * @throws IllegalAccessException */ public static String getSign(Object o) throws IllegalAccessException { ArrayList list = new ArrayList(); Class cls = o.getClass(); Field[] fields = cls.getDeclaredFields(); for (Field f : fields) { f.setAccessible(true); if (f.get(o) != null && f.get(o) != "") { list.add(f.getName() + "=" + f.get(o) + "&"); } } int size = list.size(); String [] arrayToSort = list.toArray(new String[size]); Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER); StringBuilder sb = new StringBuilder(); for(int i = 0; i < size; i ++) { sb.append(arrayToSort[i]); } String result = sb.toString(); result += "key=" + WxNativeConfig.key; result = MD5.MD5Encode(result).toUpperCase(); return result; } public static String getSign(Map map){ ArrayList list = new ArrayList(); for(Map.Entry entry:map.entrySet()){ if(StringUtil.notEmpty(ConvertUtil.obj2StrBlank(entry.getValue()))){ list.add(entry.getKey() + "=" + entry.getValue() + "&"); } } int size = list.size(); String [] arrayToSort = list.toArray(new String[size]); Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER); StringBuilder sb = new StringBuilder(); for(int i = 0; i < size; i ++) { sb.append(arrayToSort[i]); } String result = sb.toString(); result += "key=" + WxNativeConfig.key; //Util.log("Sign Before MD5:" + result); result = MD5.MD5Encode(result).toUpperCase(); //Util.log("Sign Result:" + result); return result; } public static String getSignMap(Map map){ ArrayList list = new ArrayList(); for(Map.Entry entry:map.entrySet()){ if(StringUtil.notEmpty(ConvertUtil.obj2StrBlank(entry.getValue()))){ list.add(entry.getKey() + "=" + entry.getValue() + "&"); } } int size = list.size(); String [] arrayToSort = list.toArray(new String[size]); Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER); StringBuilder sb = new StringBuilder(); for(int i = 0; i < size; i ++) { sb.append(arrayToSort[i]); } String result = sb.toString(); result += "key=" + WxNativeConfig.key; //Util.log("Sign Before MD5:" + result); result = MD5.MD5Encode(result).toUpperCase(); //Util.log("Sign Result:" + result); return result; } }