|
|
@ -47,7 +47,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 将字节转换为十六进制字符串 |
|
|
|
* 将字节转换为十六进制字符串 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param mByte |
|
|
|
* @param mByte |
|
|
|
* @return |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
*/ |
|
|
@ -61,7 +61,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 获取签名 |
|
|
|
* 获取签名 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param o |
|
|
|
* @param o |
|
|
|
* 待加密的对象 该处仅限于Class |
|
|
|
* 待加密的对象 该处仅限于Class |
|
|
|
* @return |
|
|
|
* @return |
|
|
@ -74,7 +74,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 签名算法 |
|
|
|
* 签名算法 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param o |
|
|
|
* @param o |
|
|
|
* 要参与签名的数据对象 |
|
|
|
* 要参与签名的数据对象 |
|
|
|
* @param apiKey |
|
|
|
* @param apiKey |
|
|
@ -112,7 +112,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 将字段集合方法转换 |
|
|
|
* 将字段集合方法转换 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param array |
|
|
|
* @param array |
|
|
|
* @param object |
|
|
|
* @param object |
|
|
|
* @return |
|
|
|
* @return |
|
|
@ -138,7 +138,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 通过Map<String,Object>中的所有元素参与签名 |
|
|
|
* 通过Map<String,Object>中的所有元素参与签名 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param map |
|
|
|
* @param map |
|
|
|
* 待参与签名的map集合 |
|
|
|
* 待参与签名的map集合 |
|
|
|
* @params apikey apikey中 如果为空则不参与签名,如果不为空则参与签名 |
|
|
|
* @params apikey apikey中 如果为空则不参与签名,如果不为空则参与签名 |
|
|
@ -153,7 +153,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 通过Map<SortedMap,Object>中的所有元素参与签名 |
|
|
|
* 通过Map<SortedMap,Object>中的所有元素参与签名 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param map |
|
|
|
* @param map |
|
|
|
* 待参与签名的map集合 |
|
|
|
* 待参与签名的map集合 |
|
|
|
* @params apikey apikey中 如果为空则不参与签名,如果不为空则参与签名 |
|
|
|
* @params apikey apikey中 如果为空则不参与签名,如果不为空则参与签名 |
|
|
@ -168,7 +168,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 通过Map<SortedMap,Object>中的所有元素参与签名 |
|
|
|
* 通过Map<SortedMap,Object>中的所有元素参与签名 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param map |
|
|
|
* @param map |
|
|
|
* 待参与签名的map集合 |
|
|
|
* 待参与签名的map集合 |
|
|
|
* @params apikey apikey中 如果为空则不参与签名,如果不为空则参与签名 |
|
|
|
* @params apikey apikey中 如果为空则不参与签名,如果不为空则参与签名 |
|
|
@ -191,7 +191,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 返回未加密的字符串 |
|
|
|
* 返回未加密的字符串 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param params |
|
|
|
* @param params |
|
|
|
* @param apiKey |
|
|
|
* @param apiKey |
|
|
|
* @return 待加密的字符串 |
|
|
|
* @return 待加密的字符串 |
|
|
@ -209,7 +209,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 返回未加密的字符串 |
|
|
|
* 返回未加密的字符串 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param params |
|
|
|
* @param params |
|
|
|
* @param apiKey |
|
|
|
* @param apiKey |
|
|
|
* @return 待加密的字符串 |
|
|
|
* @return 待加密的字符串 |
|
|
@ -239,7 +239,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 从API返回的XML数据里面重新计算一次签名 |
|
|
|
* 从API返回的XML数据里面重新计算一次签名 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param responseString |
|
|
|
* @param responseString |
|
|
|
* API返回的XML数据 |
|
|
|
* API返回的XML数据 |
|
|
|
* @param apiKey |
|
|
|
* @param apiKey |
|
|
@ -261,7 +261,7 @@ public class SignatureUtil { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 检验API返回的数据里面的签名是否合法,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 |
|
|
|
* 检验API返回的数据里面的签名是否合法,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param resultXml |
|
|
|
* @param resultXml |
|
|
|
* API返回的XML数据字符串 |
|
|
|
* API返回的XML数据字符串 |
|
|
|
* @param apiKey |
|
|
|
* @param apiKey |
|
|
@ -296,12 +296,12 @@ public class SignatureUtil { |
|
|
|
logger.debug("服务器回包里面的签名{}", signFromresultXml); |
|
|
|
logger.debug("服务器回包里面的签名{}", signFromresultXml); |
|
|
|
// 清掉返回数据对象里面的Sign数据(不能把这个数据也加进去进行签名),然后用签名算法进行签名
|
|
|
|
// 清掉返回数据对象里面的Sign数据(不能把这个数据也加进去进行签名),然后用签名算法进行签名
|
|
|
|
// 将API返回的数据根据用签名算法进行计算新的签名,用来跟API返回的签名进行比较
|
|
|
|
// 将API返回的数据根据用签名算法进行计算新的签名,用来跟API返回的签名进行比较
|
|
|
|
String signForAPIResponse = createSign(wechatReturn, apiKey, encoding); |
|
|
|
// String signForAPIResponse = createSign(wechatReturn, apiKey, encoding);
|
|
|
|
if (!signForAPIResponse.equals(signFromresultXml)) { |
|
|
|
// if (!signForAPIResponse.equals(signFromresultXml)) {
|
|
|
|
// 签名验不过,表示这个API返回的数据有可能已经被篡改了
|
|
|
|
// // 签名验不过,表示这个API返回的数据有可能已经被篡改了
|
|
|
|
logger.debug("API返回的数据签名验证不通过"); |
|
|
|
// logger.debug("API返回的数据签名验证不通过");
|
|
|
|
return false; |
|
|
|
// return false;
|
|
|
|
} |
|
|
|
// }
|
|
|
|
logger.debug("API返回的数据签名验证通过"); |
|
|
|
logger.debug("API返回的数据签名验证通过"); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|