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<String> list = new ArrayList<String>();
|
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<String,Object> map){
|
ArrayList<String> list = new ArrayList<String>();
|
for(Map.Entry<String,Object> 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<String,String> map){
|
ArrayList<String> list = new ArrayList<String>();
|
for(Map.Entry<String,String> 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;
|
}
|
|
}
|