🐛 #4114【微信支付】修复电商旧接口closePartnerTransactions丢失outTradeNo
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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==";
|
||||
|
||||
Reference in New Issue
Block a user