diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequest.java index 33dc7ef8e0..bc56d4ca0b 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequest.java @@ -6,6 +6,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName; import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamOmitField; import lombok.*; import me.chanjar.weixin.common.annotation.Required; @@ -25,6 +26,8 @@ @AllArgsConstructor @XStreamAlias("xml") public class WxMaEntrustRequest extends BaseWxPayRequest { + private static final long serialVersionUID = -2823017402712927893L; + /** *
* 协议模板ID
@@ -101,18 +104,12 @@ public class WxMaEntrustRequest extends BaseWxPayRequest {
private String notifyUrl;
/**
- *
- * 版本号
- * sign
- * 是
- * string(8)
- * 1.0
- * 固定值1.0
- *
+ * @deprecated 小程序纯签约接口不支持该参数,设置后不会参与请求序列化或签名。
*/
- @Required
+ @Deprecated
+ @XStreamOmitField
@XStreamAlias("version")
- private String version;
+ private transient String version;
/**
@@ -155,6 +152,11 @@ protected boolean needNonceStr() {
return false;
}
+ @Override
+ protected String[] getIgnoredParamsForSign() {
+ return new String[]{"version"};
+ }
+
@Override
protected void storeMap(Map map) {
map.put("plan_id", planId);
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 9d4a9b0237..6cd58a5b36 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
@@ -6,6 +6,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamOmitField;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.ArrayUtils;
@@ -238,6 +239,10 @@ public static Map xmlBean2Map(Object bean) {
for (Field field : fields) {
try {
+ if (field.isAnnotationPresent(XStreamOmitField.class)) {
+ continue;
+ }
+
boolean isAccessible = field.isAccessible();
field.setAccessible(true);
if (field.get(bean) == null) {
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequestTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequestTest.java
new file mode 100644
index 0000000000..5c243f0ea4
--- /dev/null
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequestTest.java
@@ -0,0 +1,46 @@
+package com.github.binarywang.wxpay.bean.request;
+
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.util.SignUtils;
+import com.github.binarywang.wxpay.util.XmlConfig;
+import org.testng.annotations.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link WxMaEntrustRequest}.
+ */
+public class WxMaEntrustRequestTest {
+
+ @Test
+ public void versionIsExcludedFromPayloadAndSignature() throws Exception {
+ WxMaEntrustRequest request = WxMaEntrustRequest.newBuilder()
+ .planId("plan-id")
+ .contractCode("contract-code")
+ .requestSerial(1L)
+ .contractDisplayAccount("account")
+ .notifyUrl("https://example.com/notify")
+ .timestamp("1710000000")
+ .version("1.0")
+ .build();
+ WxPayConfig config = new WxPayConfig();
+ config.setAppId("wx-app-id");
+ config.setMchId("mch-id");
+ config.setMchKey("mch-key");
+
+ request.checkAndSign(config);
+
+ assertThat(request.toString()).doesNotContain("\"version\"");
+ assertThat(request.toXML()).doesNotContain("