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("