From 96bda5c25741e2ad67699c12a0f70262df05670c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 02:28:39 +0000 Subject: [PATCH 1/4] Initial plan From 8009b157bd318cb441f8fe957c52126aacf0049e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 02:36:19 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=95=86=E5=AE=B6?= =?UTF-8?q?=E8=BD=AC=E8=B4=A6=E7=94=B5=E5=AD=90=E5=9B=9E=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=B8=BA=E6=96=B0=E7=89=88fund-app=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/8e47db93-4c11-4263-a22d-8823b3f7d2b8 Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../marketing/transfer/BillReceiptResult.java | 4 +- .../transfer/ReceiptBillRequest.java | 2 +- .../ElectronicBillApplyRequest.java | 2 +- .../ElectronicBillResult.java | 4 +- .../service/MerchantTransferService.java | 8 +- .../wxpay/service/PartnerTransferService.java | 8 +- .../impl/MerchantTransferServiceImpl.java | 4 +- .../impl/PartnerTransferServiceImpl.java | 4 +- .../TransferReceiptApiCompatibilityTest.java | 123 ++++++++++++++++++ 9 files changed, 141 insertions(+), 18 deletions(-) create mode 100644 weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java index fc0b97d7bb..435f513ab2 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java @@ -38,7 +38,7 @@ public String toString() { * 示例值:plfk2020042013 * */ - @SerializedName(value = "out_batch_no") + @SerializedName(value = "out_bill_no", alternate = {"out_batch_no"}) private String outBatchNo; /** @@ -68,7 +68,7 @@ public String toString() { * 示例值:ACCEPTED * */ - @SerializedName(value = "signature_status") + @SerializedName(value = "state", alternate = {"signature_status"}) private String signatureStatus; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java index 1995ac1656..10ec1b3427 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java @@ -30,6 +30,6 @@ public class ReceiptBillRequest implements Serializable { * 示例值:plfk2020042013 * */ - @SerializedName(value = "out_batch_no") + @SerializedName(value = "out_bill_no", alternate = {"out_batch_no"}) private String outBatchNo; } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java index 363c0e357e..725a8c653a 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java @@ -33,6 +33,6 @@ public class ElectronicBillApplyRequest implements Serializable { * 示例值:plfk2020042013 * */ - @SerializedName("out_batch_no") + @SerializedName(value = "out_bill_no", alternate = {"out_batch_no"}) private String outBatchNo; } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java index aaff96ad43..2e6034768d 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java @@ -33,7 +33,7 @@ public class ElectronicBillResult implements Serializable { * 示例值:plfk2020042013 * */ - @SerializedName("out_batch_no") + @SerializedName(value = "out_bill_no", alternate = {"out_batch_no"}) private String outBatchNo; /** @@ -63,7 +63,7 @@ public class ElectronicBillResult implements Serializable { * 示例值:ACCEPTED * */ - @SerializedName("signature_status") + @SerializedName(value = "state", alternate = {"signature_status"}) private String signatureStatus; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java index 585a96e763..81294a83ac 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java @@ -91,8 +91,8 @@ public interface MerchantTransferService { * 转账电子回单申请受理API *

* 适用对象:直连商户 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_7.shtml - * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt + * 文档详见: https://pay.weixin.qq.com/doc/v3/merchant/4012716452 + * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no * 请求方式:POST * 接口限频: 单个商户 20QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 * @@ -106,8 +106,8 @@ public interface MerchantTransferService { * 查询转账电子回单API *

* 适用对象:直连商户 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_8.shtml - * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt/{out_batch_no} + * 文档详见: https://pay.weixin.qq.com/doc/v3/merchant/4012716436 + * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no/{out_bill_no} * 请求方式:GET * * @param outBatchNo the out batch no diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java index b7397605ac..9da0365f4d 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java @@ -99,8 +99,8 @@ public interface PartnerTransferService { * 转账电子回单申请受理API * 接口说明 * 适用对象:直连商户 服务商 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_1.shtml - * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt + * 文档详见: https://pay.weixin.qq.com/doc/v3/merchant/4012716452 + * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no * 请求方式:POST * * @param request 商家批次单号 @@ -114,8 +114,8 @@ public interface PartnerTransferService { * 查询转账电子回单API * 接口说明 * 适用对象:直连商户 服务商 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_2.shtml - * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt/{out_batch_no} + * 文档详见: https://pay.weixin.qq.com/doc/v3/merchant/4012716436 + * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no/{out_bill_no} * 请求方式:GET * * @param outBatchNo 商家批次单号 diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java index 8974ca7e2b..cdc852c442 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java @@ -92,14 +92,14 @@ public DetailsQueryResult queryMerchantDetails(MerchantDetailsQueryRequest reque @Override public ElectronicBillResult applyElectronicBill(ElectronicBillApplyRequest request) throws WxPayException { - String url = String.format("%s/v3/transfer/bill-receipt", this.wxPayService.getPayBaseUrl()); + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no", this.wxPayService.getPayBaseUrl()); String response = wxPayService.postV3(url, GSON.toJson(request)); return GSON.fromJson(response, ElectronicBillResult.class); } @Override public ElectronicBillResult queryElectronicBill(String outBatchNo) throws WxPayException { - String url = String.format("%s/v3/transfer/bill-receipt/%s", this.wxPayService.getPayBaseUrl(), outBatchNo); + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.wxPayService.getPayBaseUrl(), outBatchNo); String response = wxPayService.getV3(url); return GSON.fromJson(response, ElectronicBillResult.class); } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java index d5ee9dfebb..ee5ed47d60 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java @@ -196,7 +196,7 @@ public BatchDetailsResult queryBatchDetailByMch(String outBatchNo, String outDet */ @Override public BillReceiptResult receiptBill(ReceiptBillRequest request) throws WxPayException { - String url = String.format("%s/v3/transfer/bill-receipt", this.payService.getPayBaseUrl()); + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no", this.payService.getPayBaseUrl()); String response = this.payService.postV3(url, GSON.toJson(request)); return GSON.fromJson(response, BillReceiptResult.class); } @@ -216,7 +216,7 @@ public BillReceiptResult receiptBill(ReceiptBillRequest request) throws WxPayExc */ @Override public BillReceiptResult queryBillReceipt(String outBatchNo) throws WxPayException { - String url = String.format("%s/v3/transfer/bill-receipt/%s", this.payService.getPayBaseUrl(), outBatchNo); + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.payService.getPayBaseUrl(), outBatchNo); String response = this.payService.getV3(url); return GSON.fromJson(response, BillReceiptResult.class); } diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java new file mode 100644 index 0000000000..5e17dcb541 --- /dev/null +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java @@ -0,0 +1,123 @@ +package com.github.binarywang.wxpay.service.impl; + +import com.github.binarywang.wxpay.bean.marketing.transfer.BillReceiptResult; +import com.github.binarywang.wxpay.bean.marketing.transfer.ReceiptBillRequest; +import com.github.binarywang.wxpay.bean.merchanttransfer.ElectronicBillApplyRequest; +import com.github.binarywang.wxpay.bean.merchanttransfer.ElectronicBillResult; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.WxPayService; +import com.google.gson.Gson; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +@Test +public class TransferReceiptApiCompatibilityTest { + + private static final String BASE_URL = "https://api.mch.weixin.qq.com"; + + public void shouldUseNewMerchantTransferElecsignApiPath() throws WxPayException { + RequestCaptureHandler handler = new RequestCaptureHandler(); + WxPayService wxPayService = handler.createWxPayService(); + MerchantTransferServiceImpl merchantTransferService = new MerchantTransferServiceImpl(wxPayService); + + merchantTransferService.applyElectronicBill(new ElectronicBillApplyRequest().setOutBatchNo("plfk2020042013")); + Assert.assertEquals(handler.lastPostUrl, BASE_URL + "/v3/fund-app/mch-transfer/elecsign/out-bill-no"); + Assert.assertTrue(handler.lastPostBody.contains("\"out_bill_no\"")); + Assert.assertFalse(handler.lastPostBody.contains("\"out_batch_no\"")); + + merchantTransferService.queryElectronicBill("plfk2020042013"); + Assert.assertEquals(handler.lastGetUrl, BASE_URL + "/v3/fund-app/mch-transfer/elecsign/out-bill-no/plfk2020042013"); + } + + public void shouldUseNewPartnerTransferElecsignApiPath() throws WxPayException { + RequestCaptureHandler handler = new RequestCaptureHandler(); + WxPayService wxPayService = handler.createWxPayService(); + PartnerTransferServiceImpl partnerTransferService = new PartnerTransferServiceImpl(wxPayService); + + ReceiptBillRequest request = new ReceiptBillRequest(); + request.setOutBatchNo("plfk2020042013"); + partnerTransferService.receiptBill(request); + Assert.assertEquals(handler.lastPostUrl, BASE_URL + "/v3/fund-app/mch-transfer/elecsign/out-bill-no"); + Assert.assertTrue(handler.lastPostBody.contains("\"out_bill_no\"")); + Assert.assertFalse(handler.lastPostBody.contains("\"out_batch_no\"")); + + partnerTransferService.queryBillReceipt("plfk2020042013"); + Assert.assertEquals(handler.lastGetUrl, BASE_URL + "/v3/fund-app/mch-transfer/elecsign/out-bill-no/plfk2020042013"); + } + + public void shouldDeserializeNewResponseFieldNames() { + Gson gson = new Gson(); + BillReceiptResult billReceiptResult = + gson.fromJson("{\"out_bill_no\":\"plfk2020042013\",\"state\":\"FINISHED\"}", BillReceiptResult.class); + Assert.assertEquals(billReceiptResult.getOutBatchNo(), "plfk2020042013"); + Assert.assertEquals(billReceiptResult.getSignatureStatus(), "FINISHED"); + + ElectronicBillResult electronicBillResult = + gson.fromJson("{\"out_bill_no\":\"plfk2020042013\",\"state\":\"FINISHED\"}", ElectronicBillResult.class); + Assert.assertEquals(electronicBillResult.getOutBatchNo(), "plfk2020042013"); + Assert.assertEquals(electronicBillResult.getSignatureStatus(), "FINISHED"); + } + + private static class RequestCaptureHandler implements InvocationHandler { + private String lastPostUrl; + private String lastPostBody; + private String lastGetUrl; + + private WxPayService createWxPayService() { + return (WxPayService) Proxy.newProxyInstance( + WxPayService.class.getClassLoader(), + new Class[]{WxPayService.class}, + this + ); + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + if ("getPayBaseUrl".equals(method.getName())) { + return BASE_URL; + } + if ("postV3".equals(method.getName())) { + this.lastPostUrl = (String) args[0]; + this.lastPostBody = (String) args[1]; + return "{}"; + } + if ("getV3".equals(method.getName())) { + this.lastGetUrl = (String) args[0]; + return "{}"; + } + if ("toString".equals(method.getName())) { + return "MockWxPayService"; + } + Class returnType = method.getReturnType(); + if (boolean.class.equals(returnType)) { + return false; + } + if (int.class.equals(returnType)) { + return 0; + } + if (long.class.equals(returnType)) { + return 0L; + } + if (double.class.equals(returnType)) { + return 0D; + } + if (float.class.equals(returnType)) { + return 0F; + } + if (short.class.equals(returnType)) { + return (short) 0; + } + if (byte.class.equals(returnType)) { + return (byte) 0; + } + if (char.class.equals(returnType)) { + return (char) 0; + } + return null; + } + } +} From 06dc88f1dbda115fe06c78fd7e1be6a7836b70af Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 02:39:24 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=94=B5=E5=AD=90?= =?UTF-8?q?=E5=9B=9E=E5=8D=95=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E5=B9=B6=E5=A4=84=E7=90=86=E5=AE=A1=E6=9F=A5=E5=8F=8D?= =?UTF-8?q?=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/8e47db93-4c11-4263-a22d-8823b3f7d2b8 Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../wxpay/service/MerchantTransferService.java | 4 ++-- .../wxpay/service/PartnerTransferService.java | 4 ++-- .../service/impl/MerchantTransferServiceImpl.java | 4 ++-- .../service/impl/PartnerTransferServiceImpl.java | 10 +++++----- .../impl/TransferReceiptApiCompatibilityTest.java | 12 ++++++++++++ 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java index 81294a83ac..3b6c19cc9c 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java @@ -110,11 +110,11 @@ public interface MerchantTransferService { * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no/{out_bill_no} * 请求方式:GET * - * @param outBatchNo the out batch no + * @param outBillNo 商户转账单号 * @return electronic bill result * @throws WxPayException the wx pay exception */ - ElectronicBillResult queryElectronicBill(String outBatchNo) throws WxPayException; + ElectronicBillResult queryElectronicBill(String outBillNo) throws WxPayException; /** * 转账明细电子回单受理API diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java index 9da0365f4d..90ee2bd5ad 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java @@ -118,11 +118,11 @@ public interface PartnerTransferService { * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no/{out_bill_no} * 请求方式:GET * - * @param outBatchNo 商家批次单号 + * @param outBillNo 商户转账单号 * @return 返回数据 fund balance result * @throws WxPayException the wx pay exception */ - BillReceiptResult queryBillReceipt(String outBatchNo) throws WxPayException; + BillReceiptResult queryBillReceipt(String outBillNo) throws WxPayException; /** * 转账明细电子回单受理API diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java index cdc852c442..5d63dc5900 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java @@ -98,8 +98,8 @@ public ElectronicBillResult applyElectronicBill(ElectronicBillApplyRequest reque } @Override - public ElectronicBillResult queryElectronicBill(String outBatchNo) throws WxPayException { - String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.wxPayService.getPayBaseUrl(), outBatchNo); + public ElectronicBillResult queryElectronicBill(String outBillNo) throws WxPayException { + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.wxPayService.getPayBaseUrl(), outBillNo); String response = wxPayService.getV3(url); return GSON.fromJson(response, ElectronicBillResult.class); } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java index ee5ed47d60..86b87a7a41 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java @@ -206,17 +206,17 @@ public BillReceiptResult receiptBill(ReceiptBillRequest request) throws WxPayExc * 查询转账电子回单API * 接口说明 * 适用对象:直连商户 服务商 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_2.shtml - * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt/{out_batch_no} + * 文档详见: https://pay.weixin.qq.com/doc/v3/merchant/4012716436 + * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no/{out_bill_no} * 请求方式:GET * - * @param outBatchNo 商家批次单号 + * @param outBillNo 商户转账单号 * @return 返回数据 fund balance result * @throws WxPayException the wx pay exception */ @Override - public BillReceiptResult queryBillReceipt(String outBatchNo) throws WxPayException { - String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.payService.getPayBaseUrl(), outBatchNo); + public BillReceiptResult queryBillReceipt(String outBillNo) throws WxPayException { + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.payService.getPayBaseUrl(), outBillNo); String response = this.payService.getV3(url); return GSON.fromJson(response, BillReceiptResult.class); } diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java index 5e17dcb541..2fbb56fded 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/TransferReceiptApiCompatibilityTest.java @@ -19,6 +19,9 @@ public class TransferReceiptApiCompatibilityTest { private static final String BASE_URL = "https://api.mch.weixin.qq.com"; + /** + * 验证直连商户电子回单接口已切换到新版fund-app路径。 + */ public void shouldUseNewMerchantTransferElecsignApiPath() throws WxPayException { RequestCaptureHandler handler = new RequestCaptureHandler(); WxPayService wxPayService = handler.createWxPayService(); @@ -33,6 +36,9 @@ public void shouldUseNewMerchantTransferElecsignApiPath() throws WxPayException Assert.assertEquals(handler.lastGetUrl, BASE_URL + "/v3/fund-app/mch-transfer/elecsign/out-bill-no/plfk2020042013"); } + /** + * 验证服务商电子回单接口已切换到新版fund-app路径。 + */ public void shouldUseNewPartnerTransferElecsignApiPath() throws WxPayException { RequestCaptureHandler handler = new RequestCaptureHandler(); WxPayService wxPayService = handler.createWxPayService(); @@ -49,6 +55,9 @@ public void shouldUseNewPartnerTransferElecsignApiPath() throws WxPayException { Assert.assertEquals(handler.lastGetUrl, BASE_URL + "/v3/fund-app/mch-transfer/elecsign/out-bill-no/plfk2020042013"); } + /** + * 验证新版字段名能够正确反序列化到现有结果对象。 + */ public void shouldDeserializeNewResponseFieldNames() { Gson gson = new Gson(); BillReceiptResult billReceiptResult = @@ -62,6 +71,9 @@ public void shouldDeserializeNewResponseFieldNames() { Assert.assertEquals(electronicBillResult.getSignatureStatus(), "FINISHED"); } + /** + * 通过动态代理拦截WxPayService请求并记录URL/请求体,便于断言接口路径和参数。 + */ private static class RequestCaptureHandler implements InvocationHandler { private String lastPostUrl; private String lastPostBody; From fc608386fbdff518227f56348a235ad9169c87f8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 05:24:26 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8C=89=E8=AF=84=E5=AE=A1=E6=84=8F?= =?UTF-8?q?=E8=A7=81=E5=90=8C=E6=AD=A5=E6=9B=B4=E6=96=B0=E7=94=B5=E5=AD=90?= =?UTF-8?q?=E5=9B=9E=E5=8D=95=E6=B3=A8=E9=87=8A=E5=B9=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=B6=85=E9=95=BF=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/a12a98fa-8363-4088-8250-377242395520 Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../wxpay/bean/marketing/transfer/BillReceiptResult.java | 9 +++++---- .../bean/marketing/transfer/ReceiptBillRequest.java | 8 ++++---- .../merchanttransfer/ElectronicBillApplyRequest.java | 6 +++--- .../bean/merchanttransfer/ElectronicBillResult.java | 9 +++++---- .../binarywang/wxpay/service/PartnerTransferService.java | 2 +- .../wxpay/service/impl/MerchantTransferServiceImpl.java | 3 ++- .../wxpay/service/impl/PartnerTransferServiceImpl.java | 9 +++++---- 7 files changed, 25 insertions(+), 21 deletions(-) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java index 435f513ab2..221e0fa623 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java @@ -29,12 +29,12 @@ public String toString() { /** *

-   * 字段名:商家批次单号
-   * 变量名:out_batch_no
+   * 字段名:商户转账单号
+   * 变量名:out_bill_no
    * 是否必填:是
    * 类型:string[5,32]
    * 描述:
-   *  商户系统内部的商家批次单号,在商户系统内部唯一。需要电子回单的批次单号
+   *  商户系统内部的商户转账单号,在商户系统内部唯一。兼容旧字段out_batch_no
    *  示例值:plfk2020042013
    * 
*/ @@ -58,13 +58,14 @@ public String toString() { /** *
    * 字段名:电子回单状态
-   * 变量名:signature_status
+   * 变量名:state
    * 是否必填:否
    * 类型:string[1,10]
    * 描述:
    *  枚举值:
    *     ACCEPTED:已受理,电子签章已受理成功
    *     FINISHED:已完成。电子签章已处理完成
+   *     兼容旧字段signature_status
    *     示例值:ACCEPTED
    * 
*/ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java index 10ec1b3427..cf605474fd 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java @@ -9,7 +9,7 @@ /** * 转账电子回单申请受理API *
- * 文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_1.shtml
+ * 文档地址:https://pay.weixin.qq.com/doc/v3/merchant/4012716452
  * 
* * @author xiaoqiang @@ -21,12 +21,12 @@ public class ReceiptBillRequest implements Serializable { private static final long serialVersionUID = 1L; /** *
-   * 字段名:商家批次单号
-   * 变量名:out_batch_no
+   * 字段名:商户转账单号
+   * 变量名:out_bill_no
    * 是否必填:是
    * 类型:string[5, 32]
    * 描述:
-   *  body商户系统内部的商家批次单号,在商户系统内部唯一。需要电子回单的批次单号
+   *  body商户系统内部的商户转账单号,在商户系统内部唯一。兼容旧字段out_batch_no
    *  示例值:plfk2020042013
    * 
*/ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java index 725a8c653a..4d2ed6183e 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java @@ -24,12 +24,12 @@ public class ElectronicBillApplyRequest implements Serializable { private static final long serialVersionUID = -2121536206019844928L; /** *
-   * 字段名:商家批次单号
-   * 变量名:out_batch_no
+   * 字段名:商户转账单号
+   * 变量名:out_bill_no
    * 是否必填:是
    * 类型:string[5,32]
    * 描述:
-   *  body商户系统内部的商家批次单号,在商户系统内部唯一。需要电子回单的批次单号
+   *  body商户系统内部的商户转账单号,在商户系统内部唯一。兼容旧字段out_batch_no
    * 示例值:plfk2020042013
    * 
*/ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java index 2e6034768d..1c5094bbbb 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java @@ -24,12 +24,12 @@ public class ElectronicBillResult implements Serializable { private static final long serialVersionUID = 7528245102572829190L; /** *
-   * 字段名:商家批次单号
-   * 变量名:out_batch_no
+   * 字段名:商户转账单号
+   * 变量名:out_bill_no
    * 是否必填:是
    * 类型:string[5,32]
    * 描述:
-   *  body商户系统内部的商家批次单号,在商户系统内部唯一。需要电子回单的批次单号
+   *  body商户系统内部的商户转账单号,在商户系统内部唯一。兼容旧字段out_batch_no
    * 示例值:plfk2020042013
    * 
*/ @@ -53,13 +53,14 @@ public class ElectronicBillResult implements Serializable { /** *
    * 字段名:电子回单状态
-   * 变量名:signature_status
+   * 变量名:state
    * 是否必填:否
    * 类型:string[1,10]
    * 描述:
    *  枚举值:
    * ACCEPTED:已受理,电子签章已受理成功
    * FINISHED:已完成。电子签章已处理完成
+   *  兼容旧字段signature_status
    * 示例值:ACCEPTED
    * 
*/ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java index 90ee2bd5ad..cea20e86f0 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/PartnerTransferService.java @@ -103,7 +103,7 @@ public interface PartnerTransferService { * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no * 请求方式:POST * - * @param request 商家批次单号 + * @param request 商户转账单号 * @return 返回数据 fund balance result * @throws WxPayException the wx pay exception */ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java index 5d63dc5900..df4b36fdb9 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantTransferServiceImpl.java @@ -99,7 +99,8 @@ public ElectronicBillResult applyElectronicBill(ElectronicBillApplyRequest reque @Override public ElectronicBillResult queryElectronicBill(String outBillNo) throws WxPayException { - String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.wxPayService.getPayBaseUrl(), outBillNo); + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", + this.wxPayService.getPayBaseUrl(), outBillNo); String response = wxPayService.getV3(url); return GSON.fromJson(response, ElectronicBillResult.class); } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java index 86b87a7a41..0fe6ac860d 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PartnerTransferServiceImpl.java @@ -186,11 +186,11 @@ public BatchDetailsResult queryBatchDetailByMch(String outBatchNo, String outDet * 转账电子回单申请受理API * 接口说明 * 适用对象:直连商户 服务商 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_1.shtml - * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt + * 文档详见: https://pay.weixin.qq.com/doc/v3/merchant/4012716452 + * 请求URL:https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/elecsign/out-bill-no * 请求方式:POST * - * @param request 商家批次单号 + * @param request 商户转账单号 * @return 返回数据 fund balance result * @throws WxPayException the wx pay exception */ @@ -216,7 +216,8 @@ public BillReceiptResult receiptBill(ReceiptBillRequest request) throws WxPayExc */ @Override public BillReceiptResult queryBillReceipt(String outBillNo) throws WxPayException { - String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", this.payService.getPayBaseUrl(), outBillNo); + String url = String.format("%s/v3/fund-app/mch-transfer/elecsign/out-bill-no/%s", + this.payService.getPayBaseUrl(), outBillNo); String response = this.payService.getV3(url); return GSON.fromJson(response, BillReceiptResult.class); }