1
0
mirror of synced 2026-10-08 07:46:22 +08:00

🐛 #4114【微信支付】修复电商旧接口closePartnerTransactions丢失outTradeNo

This commit is contained in:
LJY
2026-08-25 15:58:31 +08:00
committed by GitHub
parent 25423da463
commit ce51e0331b
2 changed files with 33 additions and 1 deletions

View File

@@ -109,7 +109,7 @@ public interface EcommerceService {
/** @deprecated 从 4.8.5.B 起,请改用 {@link #closePartnerOrder(WxPayPartnerOrderCloseV3Request)};5.0 将移除。 */
@Deprecated
default String closePartnerTransactions(com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsCloseRequest request) throws WxPayException {
closePartnerOrder(LEGACY_ECOMMERCE_GSON.fromJson(LEGACY_ECOMMERCE_GSON.toJson(request), WxPayPartnerOrderCloseV3Request.class));
closePartnerOrder(toUnifiedPartnerOrderCloseRequest(request));
return null;
}
@@ -122,6 +122,21 @@ public interface EcommerceService {
.signature(header.getSigned()).serial(header.getSerialNo()).build();
}
/**
* 旧电商关闭请求转统一模型。
* <p>{@code outTradeNo} 在两侧均为 path 参数({@code transient}),不能走 Gson 往返,否则会丢失。
*/
static WxPayPartnerOrderCloseV3Request toUnifiedPartnerOrderCloseRequest(
com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsCloseRequest request) {
if (request == null) {
return null;
}
return new WxPayPartnerOrderCloseV3Request()
.setSpMchId(request.getSpMchid())
.setSubMchId(request.getSubMchid())
.setOutTradeNo(request.getOutTradeNo());
}
/**
* <pre>
* 二级商户进件API

View File

@@ -1,7 +1,9 @@
package com.github.binarywang.wxpay.service;
import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsCloseRequest;
import com.github.binarywang.wxpay.bean.ecommerce.TransactionsResult;
import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
import com.github.binarywang.wxpay.bean.request.WxPayPartnerOrderCloseV3Request;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -68,6 +70,21 @@ public class LegacyEcommerceApiCompatibilityTest {
Assert.assertNotEquals(first, second);
}
@Test
public void shouldPreserveOutTradeNoWhenMappingLegacyCloseRequest() {
PartnerTransactionsCloseRequest legacyRequest = new PartnerTransactionsCloseRequest();
legacyRequest.setSpMchid("1230000109");
legacyRequest.setSubMchid("1900000109");
legacyRequest.setOutTradeNo("1217752501201407033233368018");
WxPayPartnerOrderCloseV3Request unifiedRequest =
EcommerceService.toUnifiedPartnerOrderCloseRequest(legacyRequest);
Assert.assertEquals(unifiedRequest.getSpMchId(), "1230000109");
Assert.assertEquals(unifiedRequest.getSubMchId(), "1900000109");
Assert.assertEquals(unifiedRequest.getOutTradeNo(), "1217752501201407033233368018");
}
@Test
public void shouldReadLegacySerializedHeaderFields() throws Exception {
String legacySerializedHeader = "rO0ABXNyADpjb20uZ2l0aHViLmJpbmFyeXdhbmcud3hwYXkuYmVhbi5lY29tbWVyY2UuU2lnbmF0dXJlSGVhZGVyn3ApxLekv9MCAARMAAVub25jZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wACHNlcmlhbE5vcQB+AAFMAAZzaWduZWRxAH4AAUwACXRpbWVTdGFtcHEAfgABeHB0AAVub25jZXQACXNlcmlhbC1ub3QABnNpZ25lZHQACXRpbWVzdGFtcA==";