1
0
mirror of synced 2026-10-14 19:33:43 +08:00

🎨 #4074 【微信支付】完善小程序纯签约接口的版本字段的兼容性

This commit is contained in:
Binary Wang
2026-07-23 16:57:20 +08:00
committed by GitHub
parent 22765e2727
commit cd6e36bed1
3 changed files with 63 additions and 10 deletions

View File

@@ -6,6 +6,7 @@ import com.google.gson.Gson;
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 @@ import java.util.Map;
@AllArgsConstructor
@XStreamAlias("xml")
public class WxMaEntrustRequest extends BaseWxPayRequest {
private static final long serialVersionUID = -2823017402712927893L;
/**
* <pre>
* 协议模板ID
@@ -101,18 +104,12 @@ public class WxMaEntrustRequest extends BaseWxPayRequest {
private String notifyUrl;
/**
* <pre>
* 版本号
* sign
* 是
* string(8)
* 1.0
* 固定值1.0
* </pre>
* @deprecated 小程序纯签约接口不支持该参数,设置后不会参与请求序列化或签名。
*/
@Required
@Deprecated
@XStreamOmitField
@XStreamAlias("version")
private String version;
private transient String version;
/**
@@ -155,6 +152,11 @@ public class WxMaEntrustRequest extends BaseWxPayRequest {
return false;
}
@Override
protected String[] getIgnoredParamsForSign() {
return new String[]{"version"};
}
@Override
protected void storeMap(Map<String, String> map) {
map.put("plan_id", planId);

View File

@@ -6,6 +6,7 @@ import com.github.binarywang.wxpay.constant.WxPayConstants.SignType;
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 class SignUtils {
for (Field field : fields) {
try {
if (field.isAnnotationPresent(XStreamOmitField.class)) {
continue;
}
boolean isAccessible = field.isAccessible();
field.setAccessible(true);
if (field.get(bean) == null) {

View File

@@ -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("<version");
boolean fastMode = XmlConfig.fastMode;
try {
XmlConfig.fastMode = true;
assertThat(request.toXML()).doesNotContain("<version");
} finally {
XmlConfig.fastMode = fastMode;
}
assertThat(request.getSign()).isEqualTo(SignUtils.createSign(
request, WxPayConstants.SignType.MD5, config.getMchKey(), null));
}
}