From f2260125c3b9b4b948ee5bad81932073bc1ca2d1 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Tue, 21 Jul 2026 15:36:52 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E4=BF=9D=E7=95=99=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=BA=AF=E7=AD=BE=E7=BA=A6=E7=89=88=E6=9C=AC=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/request/WxMaEntrustRequest.java | 20 ++++---- .../bean/request/WxMaEntrustRequestTest.java | 46 +++++++++++++++++++ 2 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxMaEntrustRequestTest.java 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..43971abf12 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; @@ -101,18 +102,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 +150,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/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..00faed99b6 --- /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(""); + boolean fastMode = XmlConfig.fastMode; + try { + XmlConfig.fastMode = true; + assertThat(request.toXML()).doesNotContain(""); + } finally { + XmlConfig.fastMode = fastMode; + } + assertThat(request.getSign()).isEqualTo(SignUtils.createSign( + request, WxPayConstants.SignType.MD5, config.getMchKey(), new String[]{"version"})); + } +} From 7652e4b1a2d8876ba02c39131f6842b83dff999e Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 22 Jul 2026 14:28:23 +0800 Subject: [PATCH 2/3] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../binarywang/wxpay/bean/request/WxMaEntrustRequestTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 00faed99b6..fbfb0e4a81 100644 --- 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 @@ -31,7 +31,7 @@ public void versionIsExcludedFromPayloadAndSignature() throws Exception { request.checkAndSign(config); - assertThat(request.toString()).doesNotContain("version"); + assertThat(request.toString()).doesNotContain("\"version\""); assertThat(request.toXML()).doesNotContain(""); boolean fastMode = XmlConfig.fastMode; try { From cb0072cc288b58276a304b846f3e678ca8a7fb0a Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 22 Jul 2026 14:31:59 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E5=AE=8C=E5=96=84=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=BA=AF=E7=AD=BE=E7=BA=A6=E7=89=88=E6=9C=AC=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../binarywang/wxpay/bean/request/WxMaEntrustRequest.java | 2 ++ .../java/com/github/binarywang/wxpay/util/SignUtils.java | 5 +++++ .../wxpay/bean/request/WxMaEntrustRequestTest.java | 6 +++--- 3 files changed, 10 insertions(+), 3 deletions(-) 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 43971abf12..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 @@ -26,6 +26,8 @@ @AllArgsConstructor @XStreamAlias("xml") public class WxMaEntrustRequest extends BaseWxPayRequest { + private static final long serialVersionUID = -2823017402712927893L; + /** *
    * 协议模板ID
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
index fbfb0e4a81..5c243f0ea4 100644
--- 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
@@ -32,15 +32,15 @@ public void versionIsExcludedFromPayloadAndSignature() throws Exception {
     request.checkAndSign(config);
 
     assertThat(request.toString()).doesNotContain("\"version\"");
-    assertThat(request.toXML()).doesNotContain("");
+    assertThat(request.toXML()).doesNotContain("");
+      assertThat(request.toXML()).doesNotContain("