Skip to content

Commit 64f0e7c

Browse files
committed
#355 修复为支持拉取订单评价数据接口而引入的签名bug
1 parent 447c73e commit 64f0e7c

File tree

11 files changed

+168
-108
lines changed

11 files changed

+168
-108
lines changed

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/menu/WxMpSelfMenuInfo.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void setButtons(List<WxMpSelfMenuButton> buttons) {
3838

3939
public static class WxMpSelfMenuButton implements Serializable {
4040
private static final long serialVersionUID = -4426602953309048341L;
41-
41+
4242
/**
4343
* <pre>
4444
* 菜单的类型,公众平台官网上能够设置的菜单类型有view(跳转网页)、text(返回文本,下同)、img、photo、video、voice。

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayBaseRequest.java

+18-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
import java.math.BigDecimal;
1616

17+
import static com.github.binarywang.wxpay.constant.WxPayConstants.SignType.ALL_SIGN_TYPES;
18+
1719
/**
1820
* <pre>
1921
* Created by Binary Wang on 2016-10-24.
@@ -189,8 +191,9 @@ public String toXML() {
189191
* </pre>
190192
*
191193
* @param config 支付配置对象,用于读取相应系统配置信息
194+
* @param isIgnoreSignType 签名时,是否忽略signType
192195
*/
193-
public void checkAndSign(WxPayConfig config) throws WxPayException {
196+
public void checkAndSign(WxPayConfig config, boolean isIgnoreSignType) throws WxPayException {
194197
this.checkFields();
195198

196199
if (StringUtils.isBlank(getAppid())) {
@@ -209,11 +212,24 @@ public void checkAndSign(WxPayConfig config) throws WxPayException {
209212
this.setSubMchId(config.getSubMchId());
210213
}
211214

215+
if (StringUtils.isBlank(getSignType())) {
216+
if (config.getSignType() != null && !ALL_SIGN_TYPES.contains(config.getSignType())) {
217+
throw new WxPayException("非法的signType配置:" + config.getSignType() + ",请检查配置!");
218+
}
219+
this.setSignType(StringUtils.trimToNull(config.getSignType()));
220+
} else {
221+
if (!ALL_SIGN_TYPES.contains(this.getSignType())) {
222+
throw new WxPayException("非法的sign_type参数:" + this.getSignType());
223+
}
224+
}
225+
212226
if (StringUtils.isBlank(getNonceStr())) {
213227
this.setNonceStr(String.valueOf(System.currentTimeMillis()));
214228
}
229+
215230
//设置签名字段的值
216-
this.setSign(SignUtils.createSign(this, config.getMchKey(), this.signType));
231+
this.setSign(SignUtils.createSign(this, this.getSignType(), config.getMchKey(),
232+
isIgnoreSignType));
217233
}
218234

219235
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundRequest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,12 @@ public class WxPayRefundRequest extends WxPayBaseRequest {
165165
private String refundDesc;
166166

167167
@Override
168-
public void checkAndSign(WxPayConfig config) throws WxPayException {
168+
public void checkAndSign(WxPayConfig config, boolean isIgnoreSignType) throws WxPayException {
169169
if (StringUtils.isBlank(this.getOpUserId())) {
170170
this.setOpUserId(config.getMchId());
171171
}
172172

173-
super.checkAndSign(config);
173+
super.checkAndSign(config, isIgnoreSignType);
174174
}
175175

176176
@Override

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayUnifiedOrderRequest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ protected void checkConstraints() throws WxPayException {
349349
}
350350

351351
@Override
352-
public void checkAndSign(WxPayConfig config) throws WxPayException {
352+
public void checkAndSign(WxPayConfig config, boolean isIgnoreSignType) throws WxPayException {
353353
if (StringUtils.isBlank(this.getNotifyURL())) {
354354
this.setNotifyURL(config.getNotifyUrl());
355355
}
@@ -358,7 +358,7 @@ public void checkAndSign(WxPayConfig config) throws WxPayException {
358358
this.setTradeType(config.getTradeType());
359359
}
360360

361-
super.checkAndSign(config);
361+
super.checkAndSign(config, isIgnoreSignType);
362362
}
363363

364364
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayBaseResult.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -216,12 +216,13 @@ protected Integer getXmlValueAsInt(String... path) {
216216
/**
217217
* 校验返回结果签名
218218
*
219+
* @param signType 签名类型
219220
* @param checkSuccess 是否同时检查结果是否成功
220221
*/
221-
public void checkResult(WxPayServiceAbstractImpl wxPayService, boolean checkSuccess) throws WxPayException {
222+
public void checkResult(WxPayServiceAbstractImpl wxPayService, String signType, boolean checkSuccess) throws WxPayException {
222223
//校验返回结果签名
223224
Map<String, String> map = toMap();
224-
if (getSign() != null && !SignUtils.checkSign(map, wxPayService.getConfig().getMchKey())) {
225+
if (getSign() != null && !SignUtils.checkSign(map, signType, wxPayService.getConfig().getMchKey())) {
225226
this.getLogger().debug("校验结果签名失败,参数:{}", map);
226227
throw new WxPayException("参数格式校验错误!");
227228
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java

+14
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class WxPayConfig {
3636
private String subMchId;
3737
private String notifyUrl;
3838
private String tradeType;
39+
private String signType;
3940
private SSLContext sslContext;
4041
private String keyPath;
4142
private boolean useSandboxEnv = false;
@@ -139,6 +140,19 @@ public void setTradeType(String tradeType) {
139140
this.tradeType = tradeType;
140141
}
141142

143+
/**
144+
* 签名方式
145+
* 有两种HMAC_SHA256 和MD5
146+
* @see com.github.binarywang.wxpay.constant.WxPayConstants.SignType
147+
*/
148+
public String getSignType() {
149+
return this.signType;
150+
}
151+
152+
public void setSignType(String signType) {
153+
this.signType = signType;
154+
}
155+
142156
public SSLContext getSslContext() {
143157
return this.sslContext;
144158
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/constant/WxPayConstants.java

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.github.binarywang.wxpay.constant;
22

3+
import com.google.common.collect.Lists;
4+
35
import java.text.SimpleDateFormat;
6+
import java.util.List;
47

58
/**
69
* <pre>
@@ -96,6 +99,7 @@ public static class TradeType {
9699
public static class SignType {
97100
public static final String HMAC_SHA256 = "HMAC-SHA256";
98101
public static final String MD5 = "MD5";
102+
public static final List<String> ALL_SIGN_TYPES = Lists.newArrayList(HMAC_SHA256, MD5);
99103
}
100104

101105
/**

0 commit comments

Comments
 (0)