Преглед на файлове

fix: renderPay 补传必选参数 target_terminal_type/initialize_code_type

支付宝实测报错: 参数[target_terminal_type]错误/参数[initialize_code_type]错误(INVALID_PARAMETER)。
枚举取值按接口文档实证(资金转账渲染支付接口):
- target_terminal_type: 小程序=tinyapp / PC端=PC,本产品为 PC 网页收银台取 PC
- initialize_code_type: 短链接=SHORT_URL / 吱口令=SHARE_CODE,PC 端跳转取 SHORT_URL
测试: renderPay_returnsPayUrl 增 ArgumentCaptor 断言,54/54 Service 全绿
alphaH преди 5 дни
родител
ревизия
d76f57dd09

+ 7 - 0
java/src/main/java/com/payment/platform/module/payment/batch/service/AlipayBatchPayService.java

@@ -251,6 +251,11 @@ public class AlipayBatchPayService {
 
     private static final String BATCH_PRODUCT_CODE = "BATCH_API_TO_ACC";
     private static final String BATCH_BIZ_SCENE = "STANDARD_MESSAGE_BATCH_PAY";
+    /** render.pay 必传参数,枚举值文档实证(资金转账渲染支付接口 https://opendocs.alipay.com/pre-open/ffcf2fa0_alipay.fund.trans.render.pay):
+     *  target_terminal_type: 小程序=tinyapp / PC端=PC;本产品为 PC 网页收银台场景,取 PC */
+    private static final String RENDER_TARGET_TERMINAL_TYPE = "PC";
+    /** initialize_code_type: 短链接=SHORT_URL / 吱口令=SHARE_CODE;PC 端浏览器跳转取短链接 */
+    private static final String RENDER_INITIALIZE_CODE_TYPE = "SHORT_URL";
 
     /** alipay.fund.batch.create — 创建批量付款单据(幂等: out_batch_no 唯一) */
     @Transactional
@@ -423,6 +428,8 @@ public class AlipayBatchPayService {
             model.setProductCode(BATCH_PRODUCT_CODE);
             model.setBizScene(BATCH_BIZ_SCENE);
             model.setOrderId(order.getBatchTransId());
+            model.setTargetTerminalType(RENDER_TARGET_TERMINAL_TYPE);
+            model.setInitializeCodeType(RENDER_INITIALIZE_CODE_TYPE);
             AlipayFundTransRenderPayRequest request = new AlipayFundTransRenderPayRequest();
             request.setBizModel(model);
             AlipayFundTransRenderPayResponse response =

+ 11 - 0
java/src/test/java/com/payment/platform/module/payment/batch/service/AlipayBatchPayServiceTest.java

@@ -6,6 +6,7 @@ import com.alipay.api.domain.AccDetailModel;
 import com.alipay.api.domain.AlipayFundAuthorizeUniApplyModel;
 import com.alipay.api.domain.AlipayFundAuthorizeUniQueryModel;
 import com.alipay.api.domain.AlipayFundBatchCreateModel;
+import com.alipay.api.domain.AlipayFundTransRenderPayModel;
 import com.alipay.api.request.AlipayFundAuthorizeUniApplyRequest;
 import com.alipay.api.request.AlipayFundAuthorizeUniQueryRequest;
 import com.alipay.api.request.AlipayFundBatchCloseRequest;
@@ -337,6 +338,16 @@ class AlipayBatchPayServiceTest {
 
         assertNotNull(result.get("pay_url"));
         verify(batchOrderMapper).updateById(order);
+        // render.pay 必传参数必须携带(文档实证枚举值: target_terminal_type=PC / initialize_code_type=SHORT_URL),
+        // 缺失时支付宝返回 INVALID_PARAMETER 报错(用户实测: 参数[target_terminal_type]错误)
+        @SuppressWarnings({ "unchecked", "rawtypes" })
+        ArgumentCaptor<AlipayFundTransRenderPayRequest> cap =
+                ArgumentCaptor.forClass(AlipayFundTransRenderPayRequest.class);
+        verify(alipayClient).pageExecute(cap.capture());
+        AlipayFundTransRenderPayModel model =
+                (AlipayFundTransRenderPayModel) cap.getValue().getBizModel();
+        assertEquals("PC", model.getTargetTerminalType());
+        assertEquals("SHORT_URL", model.getInitializeCodeType());
     }
 
     @Test