diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankRequest.java index a96a547d7..05ccebc23 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankRequest.java @@ -117,8 +117,8 @@ public class EntPayBankRequest extends BaseWxPayRequest { } @Override - protected boolean ignoreSignType() { - return true; + protected String[] getIgnoredParamsForSign() { + return new String[]{"sign_type"}; } @Override diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java index a34eaaa4f..987677a35 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java @@ -54,7 +54,7 @@ public class EntPayQueryRequest extends BaseWxPayRequest { } @Override - protected boolean ignoreSignType() { - return true; + protected String[] getIgnoredParamsForSign() { + return new String[]{"sign_type"}; } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java index 4f640f25f..5bd3f4155 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayRequest.java @@ -198,7 +198,7 @@ public class EntPayRequest extends BaseWxPayRequest { } @Override - protected boolean ignoreSignType() { - return true; + protected String[] getIgnoredParamsForSign() { + return new String[]{"sign_type"}; } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java index 5e40866eb..fda18bb62 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java @@ -187,13 +187,6 @@ public abstract class BaseWxPayRequest implements Serializable { return xstream.toXML(this); } - /** - * 签名时,是否忽略signType. - */ - protected boolean ignoreSignType() { - return false; - } - /** * 签名时,是否忽略appid. */ @@ -201,6 +194,13 @@ public abstract class BaseWxPayRequest implements Serializable { return false; } + /** + * 签名时,忽略的参数. + */ + protected String[] getIgnoredParamsForSign() { + return new String[0]; + } + /** *
* 检查参数,并设置签名. @@ -248,7 +248,6 @@ public abstract class BaseWxPayRequest implements Serializable { } //设置签名字段的值 - this.setSign(SignUtils.createSign(this, this.getSignType(), config.getMchKey(), - this.ignoreSignType())); + this.setSign(SignUtils.createSign(this, this.getSignType(), config.getMchKey(), this.getIgnoredParamsForSign())); } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayDefaultRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayDefaultRequest.java index d37ed7ff7..e44a6111e 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayDefaultRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayDefaultRequest.java @@ -16,4 +16,9 @@ public class WxPayDefaultRequest extends BaseWxPayRequest { protected void checkConstraints() { //do nothing } + + @Override + protected boolean ignoreAppid() { + return true; + } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayQueryCommentRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayQueryCommentRequest.java index d052a26ee..6b81aeed4 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayQueryCommentRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayQueryCommentRequest.java @@ -7,7 +7,7 @@ import me.chanjar.weixin.common.annotation.Required; /** *- * 拉取订单评价数据接口的请求参数封装类 + * 拉取订单评价数据接口的请求参数封装类. * Created by BinaryWang on 2017/9/2. ** @@ -20,14 +20,11 @@ import me.chanjar.weixin.common.annotation.Required; @AllArgsConstructor @XStreamAlias("xml") public class WxPayQueryCommentRequest extends BaseWxPayRequest { - @Override - protected boolean ignoreSignType() { - return true; - } + private static final long serialVersionUID = 2633600418272768186L; /** *- * 字段名:开始时间 + * 字段名:开始时间. * 变量名:begin_time * 是否必填:是 * 类型:String(19) @@ -41,7 +38,7 @@ public class WxPayQueryCommentRequest extends BaseWxPayRequest { /** *- * 字段名:结束时间 + * 字段名:结束时间. * 变量名:end_time * 是否必填:是 * 类型:String(19) @@ -55,7 +52,7 @@ public class WxPayQueryCommentRequest extends BaseWxPayRequest { /** *- * 字段名:位移 + * 字段名:位移. * 变量名:offset * 是否必填:是 * 类型:uint(64) @@ -69,7 +66,7 @@ public class WxPayQueryCommentRequest extends BaseWxPayRequest { /** *- * 字段名:条数 + * 字段名:条数. * 变量名:limit * 是否必填:否 * 类型:uint(32) @@ -81,11 +78,14 @@ public class WxPayQueryCommentRequest extends BaseWxPayRequest { private Integer limit; /** - * 检查约束情况 + * 检查约束情况. */ @Override protected void checkConstraints() throws WxPayException { - } + @Override + protected String[] getIgnoredParamsForSign() { + return new String[]{"limit","sign_type"}; + } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPaySendRedpackRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPaySendRedpackRequest.java index 30be05cc8..4b868a95d 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPaySendRedpackRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPaySendRedpackRequest.java @@ -21,8 +21,8 @@ import lombok.NoArgsConstructor; @XStreamAlias("xml") public class WxPaySendRedpackRequest extends BaseWxPayRequest { @Override - protected boolean ignoreSignType() { - return true; + protected String[] getIgnoredParamsForSign() { + return new String[]{"sign_type"}; } /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java index e1dccd434..d10fc9598 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java @@ -1,19 +1,46 @@ package com.github.binarywang.wxpay.service; -import com.github.binarywang.wxpay.bean.WxPayApiData; -import com.github.binarywang.wxpay.bean.coupon.*; -import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; -import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult; -import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult; -import com.github.binarywang.wxpay.bean.request.*; -import com.github.binarywang.wxpay.bean.result.*; -import com.github.binarywang.wxpay.config.WxPayConfig; -import com.github.binarywang.wxpay.exception.WxPayException; - import java.io.File; import java.util.Date; import java.util.Map; +import com.github.binarywang.wxpay.bean.WxPayApiData; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryResult; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryResult; +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; +import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult; +import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult; +import com.github.binarywang.wxpay.bean.request.WxPayAuthcode2OpenidRequest; +import com.github.binarywang.wxpay.bean.request.WxPayDownloadBillRequest; +import com.github.binarywang.wxpay.bean.request.WxPayDownloadFundFlowRequest; +import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderCloseRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderQueryRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderReverseRequest; +import com.github.binarywang.wxpay.bean.request.WxPayRefundQueryRequest; +import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; +import com.github.binarywang.wxpay.bean.request.WxPayReportRequest; +import com.github.binarywang.wxpay.bean.request.WxPaySendRedpackRequest; +import com.github.binarywang.wxpay.bean.request.WxPayShorturlRequest; +import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; +import com.github.binarywang.wxpay.bean.result.WxPayBillResult; +import com.github.binarywang.wxpay.bean.result.WxPayFundFlowResult; +import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderCloseResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderReverseResult; +import com.github.binarywang.wxpay.bean.result.WxPayRedpackQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayRefundQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; +import com.github.binarywang.wxpay.bean.result.WxPaySendRedpackResult; +import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult; +import com.github.binarywang.wxpay.config.WxPayConfig; +import com.github.binarywang.wxpay.exception.WxPayException; + /** ** 微信支付相关接口. @@ -530,7 +557,7 @@ public interface WxPayService { * @param beginDate 开始时间 * @param endDate 结束时间 * @param offset 位移 - * @param limit 条数 + * @param limit 条数,建议填null,否则接口会报签名错误 */ String queryComment(Date beginDate, Date endDate, Integer offset, Integer limit) throws WxPayException; } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java index a113ca12a..3e7dee676 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java @@ -1,8 +1,29 @@ package com.github.binarywang.wxpay.service.impl; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipException; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.github.binarywang.utils.qrcode.QrcodeUtils; import com.github.binarywang.wxpay.bean.WxPayApiData; -import com.github.binarywang.wxpay.bean.coupon.*; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryResult; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryResult; import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult; @@ -10,8 +31,40 @@ import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult; import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult; import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; -import com.github.binarywang.wxpay.bean.request.*; -import com.github.binarywang.wxpay.bean.result.*; +import com.github.binarywang.wxpay.bean.request.WxPayAuthcode2OpenidRequest; +import com.github.binarywang.wxpay.bean.request.WxPayDefaultRequest; +import com.github.binarywang.wxpay.bean.request.WxPayDownloadBillRequest; +import com.github.binarywang.wxpay.bean.request.WxPayDownloadFundFlowRequest; +import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderCloseRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderQueryRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderReverseRequest; +import com.github.binarywang.wxpay.bean.request.WxPayQueryCommentRequest; +import com.github.binarywang.wxpay.bean.request.WxPayRedpackQueryRequest; +import com.github.binarywang.wxpay.bean.request.WxPayRefundQueryRequest; +import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; +import com.github.binarywang.wxpay.bean.request.WxPayReportRequest; +import com.github.binarywang.wxpay.bean.request.WxPaySendRedpackRequest; +import com.github.binarywang.wxpay.bean.request.WxPayShorturlRequest; +import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; +import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; +import com.github.binarywang.wxpay.bean.result.WxPayAuthcode2OpenidResult; +import com.github.binarywang.wxpay.bean.result.WxPayBillBaseResult; +import com.github.binarywang.wxpay.bean.result.WxPayBillResult; +import com.github.binarywang.wxpay.bean.result.WxPayCommonResult; +import com.github.binarywang.wxpay.bean.result.WxPayFundFlowBaseResult; +import com.github.binarywang.wxpay.bean.result.WxPayFundFlowResult; +import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderCloseResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderReverseResult; +import com.github.binarywang.wxpay.bean.result.WxPayRedpackQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayRefundQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; +import com.github.binarywang.wxpay.bean.result.WxPaySandboxSignKeyResult; +import com.github.binarywang.wxpay.bean.result.WxPaySendRedpackResult; +import com.github.binarywang.wxpay.bean.result.WxPayShorturlResult; +import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult; import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.constant.WxPayConstants.BillType; import com.github.binarywang.wxpay.constant.WxPayConstants.SignType; @@ -23,17 +76,6 @@ import com.github.binarywang.wxpay.util.SignUtils; import com.google.common.base.Joiner; import com.google.common.collect.Maps; import jodd.io.ZipUtil; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.*; -import java.util.zip.ZipException; import static com.github.binarywang.wxpay.constant.WxPayConstants.QUERY_COMMENT_DATE_FORMAT; import static com.github.binarywang.wxpay.constant.WxPayConstants.TarType; @@ -291,7 +333,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { configMap.put("appid", appId); final WxPayAppOrderResult result = WxPayAppOrderResult.builder() - .sign(SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), false)) + .sign(SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), null)) .prepayId(prepayId) .partnerId(partnerId) .appId(appId) @@ -317,7 +359,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { .signType(signType) .build(); - payResult.setPaySign(SignUtils.createSign(payResult, signType, this.getConfig().getMchKey(), false)); + payResult.setPaySign(SignUtils.createSign(payResult, signType, this.getConfig().getMchKey(), null)); return (T) payResult; } @@ -368,7 +410,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { configMap.put("noncestr", nonceStr); configMap.put("appid", appId); // 此map用于客户端与微信服务器交互 - payInfo.put("sign", SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), false)); + payInfo.put("sign", SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), null)); payInfo.put("prepayId", prepayId); payInfo.put("partnerId", partnerId); payInfo.put("appId", appId); @@ -382,7 +424,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { payInfo.put("nonceStr", nonceStr); payInfo.put("package", "prepay_id=" + prepayId); payInfo.put("signType", SignType.MD5); - payInfo.put("paySign", SignUtils.createSign(payInfo, null, this.getConfig().getMchKey(), false)); + payInfo.put("paySign", SignUtils.createSign(payInfo, null, this.getConfig().getMchKey(), null)); } return payInfo; @@ -406,7 +448,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { params.put("time_stamp", String.valueOf(System.currentTimeMillis() / 1000)); params.put("nonce_str", String.valueOf(System.currentTimeMillis())); - String sign = SignUtils.createSign(params, null, this.getConfig().getMchKey(), false); + String sign = SignUtils.createSign(params, null, this.getConfig().getMchKey(), null); params.put("sign", sign); for (String key : params.keySet()) { @@ -632,7 +674,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { } } catch (WxPayException wxPayException) { throw wxPayException; - } catch (Exception e){ + } catch (Exception e) { this.log.error("解析对账单文件时出错", e); throw new WxPayException("解压zip文件出错"); } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java index b50a07862..c9f3ba1d8 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java @@ -1,19 +1,5 @@ package com.github.binarywang.wxpay.service.impl; -import com.github.binarywang.wxpay.bean.entpay.*; -import com.github.binarywang.wxpay.bean.request.WxPayDefaultRequest; -import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.EntPayService; -import com.github.binarywang.wxpay.service.WxPayService; -import com.github.binarywang.wxpay.util.SignUtils; -import org.apache.commons.codec.binary.Base64; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.bouncycastle.openssl.PEMParser; -import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; - -import javax.crypto.Cipher; import java.io.File; import java.io.FileReader; import java.io.IOException; @@ -21,6 +7,28 @@ import java.nio.file.Files; import java.nio.file.Path; import java.security.PublicKey; import java.security.Security; +import javax.crypto.Cipher; + +import org.apache.commons.codec.binary.Base64; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.openssl.PEMParser; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; + +import com.github.binarywang.wxpay.bean.entpay.EntPayBankQueryRequest; +import com.github.binarywang.wxpay.bean.entpay.EntPayBankQueryResult; +import com.github.binarywang.wxpay.bean.entpay.EntPayBankRequest; +import com.github.binarywang.wxpay.bean.entpay.EntPayBankResult; +import com.github.binarywang.wxpay.bean.entpay.EntPayQueryRequest; +import com.github.binarywang.wxpay.bean.entpay.EntPayQueryResult; +import com.github.binarywang.wxpay.bean.entpay.EntPayRequest; +import com.github.binarywang.wxpay.bean.entpay.EntPayResult; +import com.github.binarywang.wxpay.bean.entpay.GetPublicKeyResult; +import com.github.binarywang.wxpay.bean.request.WxPayDefaultRequest; +import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.EntPayService; +import com.github.binarywang.wxpay.service.WxPayService; /** *@@ -65,8 +73,8 @@ public class EntPayServiceImpl implements EntPayService { WxPayDefaultRequest request = new WxPayDefaultRequest(); request.setMchId(this.payService.getConfig().getMchId()); request.setNonceStr(String.valueOf(System.currentTimeMillis())); - request.setSign(SignUtils.createSign(request, null, this.payService.getConfig().getMchKey(), - true)); + + request.checkAndSign(this.payService.getConfig()); String url = "https://fraud.mch.weixin.qq.com/risk/getpublickey"; String responseContent = this.payService.post(url, request.toXML(), true); diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java index eda47de3a..c98783a6a 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java @@ -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.*; /** *@@ -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(Mapparams, 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 params, String signType, String signKey, boolean ignoreSignType) { + public static String createSign(Map params, String signType, String signKey, String[] ignoredParams) { SortedMap 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 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对象 diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java index 8e01429ea..505d5b1f7 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java @@ -1,31 +1,53 @@ package com.github.binarywang.wxpay.service.impl; -import com.github.binarywang.utils.qrcode.QrcodeUtils; -import com.github.binarywang.wxpay.bean.coupon.*; -import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; -import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult; -import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; -import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; -import com.github.binarywang.wxpay.bean.request.*; -import com.github.binarywang.wxpay.bean.result.*; -import com.github.binarywang.wxpay.constant.WxPayConstants.BillType; -import com.github.binarywang.wxpay.constant.WxPayConstants.SignType; -import com.github.binarywang.wxpay.constant.WxPayConstants.TradeType; -import com.github.binarywang.wxpay.constant.WxPayConstants.AccountType; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.WxPayService; -import com.github.binarywang.wxpay.testbase.ApiTestModule; -import com.github.binarywang.wxpay.testbase.XmlWxPayConfig; -import com.google.inject.Inject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.annotations.*; - import java.nio.file.Files; import java.nio.file.Path; import java.util.Calendar; import java.util.Date; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.annotations.*; + +import com.github.binarywang.utils.qrcode.QrcodeUtils; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryResult; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryRequest; +import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryResult; +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResultTest; +import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult; +import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; +import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; +import com.github.binarywang.wxpay.bean.request.WxPayAuthcode2OpenidRequest; +import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderReverseRequest; +import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; +import com.github.binarywang.wxpay.bean.request.WxPayReportRequest; +import com.github.binarywang.wxpay.bean.request.WxPaySendRedpackRequest; +import com.github.binarywang.wxpay.bean.request.WxPayShorturlRequest; +import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; +import com.github.binarywang.wxpay.bean.result.WxPayBillResult; +import com.github.binarywang.wxpay.bean.result.WxPayFundFlowResult; +import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderReverseResult; +import com.github.binarywang.wxpay.bean.result.WxPayRedpackQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayRefundQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; +import com.github.binarywang.wxpay.bean.result.WxPaySendRedpackResult; +import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult; +import com.github.binarywang.wxpay.constant.WxPayConstants.AccountType; +import com.github.binarywang.wxpay.constant.WxPayConstants.BillType; +import com.github.binarywang.wxpay.constant.WxPayConstants.SignType; +import com.github.binarywang.wxpay.constant.WxPayConstants.TradeType; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.WxPayService; +import com.github.binarywang.wxpay.testbase.ApiTestModule; +import com.github.binarywang.wxpay.testbase.XmlWxPayConfig; +import com.google.inject.Inject; + import static com.github.binarywang.wxpay.constant.WxPayConstants.TarType; import static org.assertj.core.api.Assertions.assertThat; import static org.testng.Assert.*; @@ -407,13 +429,12 @@ public class BaseWxPayServiceImplTest { Date endDate = calendar.getTime(); calendar.add(Calendar.DAY_OF_MONTH, -88); Date beginDate = calendar.getTime(); - String result = this.payService.queryComment(beginDate, endDate, 0, null); + String result = this.payService.queryComment(beginDate, endDate, 0, 1); this.logger.info(result); } /** - * @see {@link com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResultTest} - * @throws Exception + * @see WxPayOrderNotifyResultTest#testFromXML() */ @Test public void testParseOrderNotifyResult() throws Exception { diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/util/SignUtilsTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/util/SignUtilsTest.java index 57c185b54..b060cfd4c 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/util/SignUtilsTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/util/SignUtilsTest.java @@ -1,10 +1,11 @@ package com.github.binarywang.wxpay.util; +import org.testng.annotations.*; + import com.google.common.base.Splitter; -import org.testng.annotations.Test; import static com.github.binarywang.wxpay.constant.WxPayConstants.SignType.HMAC_SHA256; -import static org.testng.Assert.assertEquals; +import static org.testng.Assert.*; /** * @@ -20,7 +21,7 @@ public class SignUtilsTest { public void testCreateSign() throws Exception { String signKey = "192006250b4c09247ec02edce69f6a2d"; String message = "appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"; - assertEquals(SignUtils.createSign((Splitter.on("&").withKeyValueSeparator("=").split(message)), null, signKey, false), + assertEquals(SignUtils.createSign((Splitter.on("&").withKeyValueSeparator("=").split(message)), null, signKey, null), "9A0A8659F005D6984697E2CA0A9CF3B7"); } @@ -29,7 +30,7 @@ public class SignUtilsTest { String signKey = "192006250b4c09247ec02edce69f6a2d"; final String message = "appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"; String sign = SignUtils.createSign(Splitter.on("&").withKeyValueSeparator("=").split(message), - HMAC_SHA256, signKey, false); + HMAC_SHA256, signKey, null); assertEquals(sign, "6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6"); }