mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2026-02-15 12:56:26 +08:00
#752 修复微信支付拉取支付评价的接口(limit不参与签名)
This commit is contained in:
@@ -1,5 +1,18 @@
|
||||
package com.github.binarywang.wxpay.util;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
|
||||
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
|
||||
import com.github.binarywang.wxpay.constant.WxPayConstants.SignType;
|
||||
@@ -7,12 +20,6 @@ import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
@@ -25,7 +32,7 @@ import java.util.*;
|
||||
@Slf4j
|
||||
public class SignUtils {
|
||||
/**
|
||||
* 请参考并使用 {@link #createSign(Object, String, String, boolean)}.
|
||||
* 请参考并使用 {@link #createSign(Object, String, String, String[])}.
|
||||
*/
|
||||
@Deprecated
|
||||
public static String createSign(Object xmlBean, String signKey) {
|
||||
@@ -33,45 +40,43 @@ public class SignUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 请参考并使用 {@link #createSign(Map, String, String, boolean)}.
|
||||
* 请参考并使用 {@link #createSign(Map, String, String, String[])} .
|
||||
*/
|
||||
@Deprecated
|
||||
public static String createSign(Map<String, String> params, String signKey) {
|
||||
return createSign(params, null, signKey, false);
|
||||
return createSign(params, null, signKey, new String[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3).
|
||||
*
|
||||
* @param xmlBean Bean里的属性如果存在XML注解,则使用其作为key,否则使用变量名
|
||||
* @param signType 签名类型,如果为空,则默认为MD5
|
||||
* @param signKey 签名Key
|
||||
* @param isIgnoreSignType 签名时,是否忽略signType
|
||||
* @param xmlBean Bean里的属性如果存在XML注解,则使用其作为key,否则使用变量名
|
||||
* @param signType 签名类型,如果为空,则默认为MD5
|
||||
* @param signKey 签名Key
|
||||
* @param ignoredParams 签名时需要忽略的特殊参数
|
||||
* @return 签名字符串
|
||||
*/
|
||||
public static String createSign(Object xmlBean, String signType, String signKey, boolean isIgnoreSignType) {
|
||||
return createSign(xmlBean2Map(xmlBean), signType, signKey, isIgnoreSignType);
|
||||
public static String createSign(Object xmlBean, String signType, String signKey, String[] ignoredParams) {
|
||||
return createSign(xmlBean2Map(xmlBean), signType, signKey, ignoredParams);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3).
|
||||
*
|
||||
* @param params 参数信息
|
||||
* @param signType 签名类型,如果为空,则默认为MD5
|
||||
* @param signKey 签名Key
|
||||
* @param ignoreSignType 签名时,是否忽略signType
|
||||
* @param params 参数信息
|
||||
* @param signType 签名类型,如果为空,则默认为MD5
|
||||
* @param signKey 签名Key
|
||||
* @param ignoredParams 签名时需要忽略的特殊参数
|
||||
* @return 签名字符串
|
||||
*/
|
||||
public static String createSign(Map<String, String> params, String signType, String signKey, boolean ignoreSignType) {
|
||||
public static String createSign(Map<String, String> params, String signType, String signKey, String[] ignoredParams) {
|
||||
SortedMap<String, String> sortedMap = new TreeMap<>(params);
|
||||
|
||||
StringBuilder toSign = new StringBuilder();
|
||||
for (String key : sortedMap.keySet()) {
|
||||
String value = params.get(key);
|
||||
boolean shouldSign = false;
|
||||
if (ignoreSignType && "sign_type".equals(key)) {
|
||||
shouldSign = false;
|
||||
} else if (StringUtils.isNotEmpty(value)
|
||||
if (StringUtils.isNotEmpty(value) && !ArrayUtils.contains(ignoredParams, key)
|
||||
&& !Lists.newArrayList("sign", "key", "xmlString", "xmlDoc", "couponList").contains(key)) {
|
||||
shouldSign = true;
|
||||
}
|
||||
@@ -110,12 +115,12 @@ public class SignUtils {
|
||||
* @return true - 签名校验成功,false - 签名校验失败
|
||||
*/
|
||||
public static boolean checkSign(Map<String, String> params, String signType, String signKey) {
|
||||
String sign = createSign(params, signType, signKey, false);
|
||||
String sign = createSign(params, signType, signKey, new String[0]);
|
||||
return sign.equals(params.get("sign"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 将bean按照@XStreamAlias标识的字符串内容生成以之为key的map对象
|
||||
* 将bean按照@XStreamAlias标识的字符串内容生成以之为key的map对象.
|
||||
*
|
||||
* @param bean 包含@XStreamAlias的xml bean对象
|
||||
* @return map对象
|
||||
|
||||
Reference in New Issue
Block a user