Skip to content

Commit cd6e36b

Browse files
authored
🎨 #4074 【微信支付】完善小程序纯签约接口的版本字段的兼容性
1 parent 22765e2 commit cd6e36b

3 files changed

Lines changed: 63 additions & 10 deletions

File tree

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.google.gson.GsonBuilder;
77
import com.google.gson.annotations.SerializedName;
88
import com.thoughtworks.xstream.annotations.XStreamAlias;
9+
import com.thoughtworks.xstream.annotations.XStreamOmitField;
910
import lombok.*;
1011
import me.chanjar.weixin.common.annotation.Required;
1112

@@ -25,6 +26,8 @@
2526
@AllArgsConstructor
2627
@XStreamAlias("xml")
2728
public class WxMaEntrustRequest extends BaseWxPayRequest {
29+
private static final long serialVersionUID = -2823017402712927893L;
30+
2831
/**
2932
* <pre>
3033
* 协议模板ID
@@ -101,18 +104,12 @@ public class WxMaEntrustRequest extends BaseWxPayRequest {
101104
private String notifyUrl;
102105

103106
/**
104-
* <pre>
105-
* 版本号
106-
* sign
107-
* 是
108-
* string(8)
109-
* 1.0
110-
* 固定值1.0
111-
* </pre>
107+
* @deprecated 小程序纯签约接口不支持该参数,设置后不会参与请求序列化或签名。
112108
*/
113-
@Required
109+
@Deprecated
110+
@XStreamOmitField
114111
@XStreamAlias("version")
115-
private String version;
112+
private transient String version;
116113

117114

118115
/**
@@ -155,6 +152,11 @@ protected boolean needNonceStr() {
155152
return false;
156153
}
157154

155+
@Override
156+
protected String[] getIgnoredParamsForSign() {
157+
return new String[]{"version"};
158+
}
159+
158160
@Override
159161
protected void storeMap(Map<String, String> map) {
160162
map.put("plan_id", planId);

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.google.common.collect.Lists;
77
import com.google.common.collect.Maps;
88
import com.thoughtworks.xstream.annotations.XStreamAlias;
9+
import com.thoughtworks.xstream.annotations.XStreamOmitField;
910
import lombok.extern.slf4j.Slf4j;
1011
import org.apache.commons.codec.digest.DigestUtils;
1112
import org.apache.commons.lang3.ArrayUtils;
@@ -238,6 +239,10 @@ public static Map<String, String> xmlBean2Map(Object bean) {
238239

239240
for (Field field : fields) {
240241
try {
242+
if (field.isAnnotationPresent(XStreamOmitField.class)) {
243+
continue;
244+
}
245+
241246
boolean isAccessible = field.isAccessible();
242247
field.setAccessible(true);
243248
if (field.get(bean) == null) {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.github.binarywang.wxpay.bean.request;
2+
3+
import com.github.binarywang.wxpay.config.WxPayConfig;
4+
import com.github.binarywang.wxpay.constant.WxPayConstants;
5+
import com.github.binarywang.wxpay.util.SignUtils;
6+
import com.github.binarywang.wxpay.util.XmlConfig;
7+
import org.testng.annotations.Test;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
/**
12+
* Tests for {@link WxMaEntrustRequest}.
13+
*/
14+
public class WxMaEntrustRequestTest {
15+
16+
@Test
17+
public void versionIsExcludedFromPayloadAndSignature() throws Exception {
18+
WxMaEntrustRequest request = WxMaEntrustRequest.newBuilder()
19+
.planId("plan-id")
20+
.contractCode("contract-code")
21+
.requestSerial(1L)
22+
.contractDisplayAccount("account")
23+
.notifyUrl("https://example.com/notify")
24+
.timestamp("1710000000")
25+
.version("1.0")
26+
.build();
27+
WxPayConfig config = new WxPayConfig();
28+
config.setAppId("wx-app-id");
29+
config.setMchId("mch-id");
30+
config.setMchKey("mch-key");
31+
32+
request.checkAndSign(config);
33+
34+
assertThat(request.toString()).doesNotContain("\"version\"");
35+
assertThat(request.toXML()).doesNotContain("<version");
36+
boolean fastMode = XmlConfig.fastMode;
37+
try {
38+
XmlConfig.fastMode = true;
39+
assertThat(request.toXML()).doesNotContain("<version");
40+
} finally {
41+
XmlConfig.fastMode = fastMode;
42+
}
43+
assertThat(request.getSign()).isEqualTo(SignUtils.createSign(
44+
request, WxPayConstants.SignType.MD5, config.getMchKey(), null));
45+
}
46+
}

0 commit comments

Comments
 (0)