Skip to content

Commit ce51e03

Browse files
authored
🐛 #4114【微信支付】修复电商旧接口closePartnerTransactions丢失outTradeNo
1 parent 25423da commit ce51e03

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/EcommerceService.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ default com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult que
109109
/** @deprecated 从 4.8.5.B 起,请改用 {@link #closePartnerOrder(WxPayPartnerOrderCloseV3Request)};5.0 将移除。 */
110110
@Deprecated
111111
default String closePartnerTransactions(com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsCloseRequest request) throws WxPayException {
112-
closePartnerOrder(LEGACY_ECOMMERCE_GSON.fromJson(LEGACY_ECOMMERCE_GSON.toJson(request), WxPayPartnerOrderCloseV3Request.class));
112+
closePartnerOrder(toUnifiedPartnerOrderCloseRequest(request));
113113
return null;
114114
}
115115

@@ -122,6 +122,21 @@ static SignatureHeader toUnifiedSignatureHeader(com.github.binarywang.wxpay.bean
122122
.signature(header.getSigned()).serial(header.getSerialNo()).build();
123123
}
124124

125+
/**
126+
* 旧电商关闭请求转统一模型。
127+
* <p>{@code outTradeNo} 在两侧均为 path 参数({@code transient}),不能走 Gson 往返,否则会丢失。
128+
*/
129+
static WxPayPartnerOrderCloseV3Request toUnifiedPartnerOrderCloseRequest(
130+
com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsCloseRequest request) {
131+
if (request == null) {
132+
return null;
133+
}
134+
return new WxPayPartnerOrderCloseV3Request()
135+
.setSpMchId(request.getSpMchid())
136+
.setSubMchId(request.getSubMchid())
137+
.setOutTradeNo(request.getOutTradeNo());
138+
}
139+
125140
/**
126141
* <pre>
127142
* 二级商户进件API

weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/LegacyEcommerceApiCompatibilityTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.github.binarywang.wxpay.service;
22

3+
import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsCloseRequest;
34
import com.github.binarywang.wxpay.bean.ecommerce.TransactionsResult;
45
import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
6+
import com.github.binarywang.wxpay.bean.request.WxPayPartnerOrderCloseV3Request;
57
import org.testng.Assert;
68
import org.testng.annotations.Test;
79

@@ -68,6 +70,21 @@ public void shouldIncludeTimestampAndNonceInLegacyHeaderEquality() {
6870
Assert.assertNotEquals(first, second);
6971
}
7072

73+
@Test
74+
public void shouldPreserveOutTradeNoWhenMappingLegacyCloseRequest() {
75+
PartnerTransactionsCloseRequest legacyRequest = new PartnerTransactionsCloseRequest();
76+
legacyRequest.setSpMchid("1230000109");
77+
legacyRequest.setSubMchid("1900000109");
78+
legacyRequest.setOutTradeNo("1217752501201407033233368018");
79+
80+
WxPayPartnerOrderCloseV3Request unifiedRequest =
81+
EcommerceService.toUnifiedPartnerOrderCloseRequest(legacyRequest);
82+
83+
Assert.assertEquals(unifiedRequest.getSpMchId(), "1230000109");
84+
Assert.assertEquals(unifiedRequest.getSubMchId(), "1900000109");
85+
Assert.assertEquals(unifiedRequest.getOutTradeNo(), "1217752501201407033233368018");
86+
}
87+
7188
@Test
7289
public void shouldReadLegacySerializedHeaderFields() throws Exception {
7390
String legacySerializedHeader = "rO0ABXNyADpjb20uZ2l0aHViLmJpbmFyeXdhbmcud3hwYXkuYmVhbi5lY29tbWVyY2UuU2lnbmF0dXJlSGVhZGVyn3ApxLekv9MCAARMAAVub25jZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wACHNlcmlhbE5vcQB+AAFMAAZzaWduZWRxAH4AAUwACXRpbWVTdGFtcHEAfgABeHB0AAVub25jZXQACXNlcmlhbC1ub3QABnNpZ25lZHQACXRpbWVzdGFtcA==";

0 commit comments

Comments
 (0)