From 4869479583a106614d952a7cee9bbe3eff71f350 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 2 Jul 2024 11:23:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpayv3):=20=E6=96=B0=E5=A2=9E=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=95=86=E5=B9=B3=E5=8F=B0=E6=94=B6=E4=BB=98=E9=80=9A?= =?UTF-8?q?=E5=95=86=E5=AE=B6=E8=BD=AC=E8=B4=A6=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/WechatTenpayV3/Basic_ModelDefinition.md | 24 ++ ...tTenpayClientExecuteEcommerceExtensions.cs | 136 ++++++++++ ...yClientExecutePartnerTransferExtensions.cs | 2 +- ...ClientExecutePlatformSolutionExtensions.cs | 237 +++++++++++++++++ ...celEcommerceMerchantTransferBillRequest.cs | 22 ++ ...elEcommerceMerchantTransferBillResponse.cs | 47 ++++ ...rceMerchantTransferAuthorizationRequest.cs | 61 +++++ ...ceMerchantTransferAuthorizationResponse.cs | 42 +++ ...ateEcommerceMerchantTransferBillRequest.cs | 81 ++++++ ...teEcommerceMerchantTransferBillResponse.cs | 61 +++++ ...sferAuthorizationBySubMerchantIdRequest.cs | 15 ++ ...ferAuthorizationBySubMerchantIdResponse.cs | 33 +++ ...chantTransferBillByOutBillNumberRequest.cs | 22 ++ ...hantTransferBillByOutBillNumberResponse.cs | 115 ++++++++ ...TransferBillByTransferBillNumberRequest.cs | 22 ++ ...ransferBillByTransferBillNumberResponse.cs | 10 + ...ormSolutionMerchantTransferBatchRequest.cs | 128 +++++++++ ...rmSolutionMerchantTransferBatchResponse.cs | 40 +++ ...utionMerchantTransferReservationRequest.cs | 160 ++++++++++++ ...tionMerchantTransferReservationResponse.cs | 54 ++++ ...utionMerchantTransferReservationRequest.cs | 22 ++ ...tionMerchantTransferReservationResponse.cs | 9 + ...onMerchantTransferBatchByBatchIdRequest.cs | 50 ++++ ...nMerchantTransferBatchByBatchIdResponse.cs | 47 ++++ ...antTransferBatchByOutBatchNumberRequest.cs | 50 ++++ ...ntTransferBatchByOutBatchNumberResponse.cs | 196 ++++++++++++++ ...antTransferBatchDetailByDetailIdRequest.cs | 29 +++ ...ntTransferBatchDetailByDetailIdResponse.cs | 12 + ...sferBatchDetailByOutDetailNumberRequest.cs | 29 +++ ...ferBatchDetailByOutDetailNumberResponse.cs | 138 ++++++++++ ...eservationByOutReservationNumberRequest.cs | 22 ++ ...servationByOutReservationNumberResponse.cs | 150 +++++++++++ ...ansferReservationByReservationIdRequest.cs | 22 ++ ...nsferReservationByReservationIdResponse.cs | 11 + .../CreatePartnerTransferBatchRequest.cs | 3 +- ...lEcommerceMerchantTransferBillRequest.json | 3 + ...EcommerceMerchantTransferBillResponse.json | 7 + ...eMerchantTransferAuthorizationRequest.json | 11 + ...MerchantTransferAuthorizationResponse.json | 6 + ...eEcommerceMerchantTransferBillRequest.json | 11 + ...EcommerceMerchantTransferBillResponse.json | 9 + ...rAuthorizationBySubMerchantIdResponse.json | 5 + ...ntTransferBillByOutBillNumberResponse.json | 16 ++ ...nsferBillByTransferBillNumberResponse.json | 16 ++ ...mSolutionMerchantTransferBatchRequest.json | 21 ++ ...SolutionMerchantTransferBatchResponse.json | 6 + ...ionMerchantTransferReservationRequest.json | 23 ++ ...onMerchantTransferReservationResponse.json | 8 + ...onMerchantTransferReservationResponse.json | 21 ++ ...erchantTransferBatchByBatchIdResponse.json | 30 +++ ...TransferBatchByOutBatchNumberResponse.json | 30 +++ ...TransferBatchDetailByDetailIdResponse.json | 19 ++ ...rBatchDetailByOutDetailNumberResponse.json | 19 ++ ...rvationByOutReservationNumberResponse.json | 21 ++ ...ferReservationByReservationIdResponse.json | 21 ++ .../TestCase_RequestEncryptionTests.cs | 105 ++++++++ .../TestCase_ResponseDecryptionTests.cs | 245 +++++++++++++++++- 57 files changed, 2752 insertions(+), 3 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.json diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md index 5372626b..1118a8fc 100644 --- a/docs/WechatTenpayV3/Basic_ModelDefinition.md +++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md @@ -941,6 +941,30 @@ - 下载账单:`DownloadBillFile` + - 平台收付通(商家转账) + + - 批量商家转账 + + - 受理商家转账:`ApplyPlatformSolutionMerchantTransferBatch` + + - 微信支付转账批次单号查询批次单:`GetPlatformSolutionMerchantTransferBatchByBatchId` + + - 微信支付转账明细单号查询明细单:`GetPlatformSolutionMerchantTransferBatchDetailByDetailId` + + - 商户转账批次单号查询批次单:`GetPlatformSolutionMerchantTransferBatchByOutBatchNumber` + + - 商户明细单号查询明细单:`GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumber` + + - 预约商家转账 + + - 受理单次预约商家转账:`ApplyPlatformSolutionMerchantTransferReservation` + + - 商户预约单号查询预约商家转账记录:`GetPlatformSolutionMerchantTransferReservationByOutReservationNumber` + + - 关闭预约商家转账记录:`ClosePlatformSolutionMerchantTransferReservation` + + - 微信支付预约单号查询预约商家转账记录:`GetPlatformSolutionMerchantTransferReservationByReservationId` + - 代金券 - 创建代金券批次:`CreateMarketingFavorStock` diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteEcommerceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteEcommerceExtensions.cs index 8e0acf1e..ee89d586 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteEcommerceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteEcommerceExtensions.cs @@ -311,6 +311,142 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 } #endregion + #region MerchantTransfer + /// + /// 异步调用 [POST] /ecommerce/mch-transfer/authorizations 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCreateEcommerceMerchantTransferAuthorizationAsync(this WechatTenpayClient client, Models.CreateEcommerceMerchantTransferAuthorizationRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "ecommerce", "mch-transfer", "authorizations"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /ecommerce/mch-transfer/authorizations/{sub_mchid} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetEcommerceMerchantTransferAuthorizationBySubMerchantIdAsync(this WechatTenpayClient client, Models.GetEcommerceMerchantTransferAuthorizationBySubMerchantIdRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "ecommerce", "mch-transfer", "authorizations", request.SubMerchantId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /ecommerce/mch-transfer/transfer-bills 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCreateEcommerceMerchantTransferBillAsync(this WechatTenpayClient client, Models.CreateEcommerceMerchantTransferBillRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "ecommerce", "mch-transfer", "transfer-bills"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /ecommerce/mch-transfer/transfer-bills/out-bill-no/{out_bill_no} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetEcommerceMerchantTransferBillByOutBillNumberAsync(this WechatTenpayClient client, Models.GetEcommerceMerchantTransferBillByOutBillNumberRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "ecommerce", "mch-transfer", "transfer-bills", "out-bill-no", request.OutBillNumber) + .SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /ecommerce/mch-transfer/transfer-bills/transfer-bill-no/{transfer_bill_no} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetEcommerceMerchantTransferBillByTransferBillNumberAsync(this WechatTenpayClient client, Models.GetEcommerceMerchantTransferBillByTransferBillNumberRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "ecommerce", "mch-transfer", "transfer-bills", "transfer-bill-no", request.TransferBillNumber) + .SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /ecommerce/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}/cancel 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCancelEcommerceMerchantTransferBillAsync(this WechatTenpayClient client, Models.CancelEcommerceMerchantTransferBillRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "ecommerce", "mch-transfer", "transfer-bills", "out-bill-no", request.OutBillNumber, "cancel"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + #endregion + #region ProfitSharing /// /// 异步调用 [POST] /ecommerce/profitsharing/orders 接口。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerTransferExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerTransferExtensions.cs index e16b9d3d..1b3b8119 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerTransferExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerTransferExtensions.cs @@ -50,7 +50,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Get, "partner-transfer", "batches", "out-batch-no", request.OutBatchNumber) - .SetQueryParam("need_query_detail", request.RequireQueryDetail); + .SetQueryParam("need_query_detail", request.RequireQueryDetail ? "true" : "false"); if (request.DetailStatus is not null) flurlReq.SetQueryParam("detail_status", request.DetailStatus); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs new file mode 100644 index 00000000..90471617 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs @@ -0,0 +1,237 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + public static class WechatTenpayClientExecutePlatformSolutionExtensions + { + #region MerchantTransfer + /// + /// 异步调用 [POST] /platsolution/mch-transfer/batches/apply 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteApplyPlatformSolutionMerchantTransferBatchAsync(this WechatTenpayClient client, Models.ApplyPlatformSolutionMerchantTransferBatchRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "platsolution", "mch-transfer", "batches", "apply"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /platsolution/mch-transfer/batches/out-batch-no/{out_batch_no} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetPlatformSolutionMerchantTransferBatchByOutBatchNumberAsync(this WechatTenpayClient client, Models.GetPlatformSolutionMerchantTransferBatchByOutBatchNumberRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "platsolution", "mch-transfer", "batches", "out-batch-no", request.OutBatchNumber) + .SetQueryParam("sub_mchid", request.SubMerchantId) + .SetQueryParam("need_query_detail", request.RequireQueryDetail ? "true" : "false"); + + if (request.DetailState is not null) + flurlReq.SetQueryParam("detail_state", request.DetailState); + + if (request.Offset is not null) + flurlReq.SetQueryParam("offset", request.Offset.Value); + + if (request.Limit is not null) + flurlReq.SetQueryParam("limit", request.Limit.Value); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /platsolution/mch-transfer/batches/batch-id/{batch_id} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetPlatformSolutionMerchantTransferBatchByBatchIdAsync(this WechatTenpayClient client, Models.GetPlatformSolutionMerchantTransferBatchByBatchIdRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "platsolution", "mch-transfer", "batches", "batch-id", request.BatchId) + .SetQueryParam("sub_mchid", request.SubMerchantId) + .SetQueryParam("need_query_detail", request.RequireQueryDetail ? "true" : "false"); + + if (request.DetailState is not null) + flurlReq.SetQueryParam("detail_state", request.DetailState); + + if (request.Offset is not null) + flurlReq.SetQueryParam("offset", request.Offset.Value); + + if (request.Limit is not null) + flurlReq.SetQueryParam("limit", request.Limit.Value); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /platsolution/mch-transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberAsync(this WechatTenpayClient client, Models.GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "platsolution", "mch-transfer", "batches", "out-batch-no", request.OutBatchNumber, "details", "out-detail-no", request.OutDetailNumber) + .SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /platsolution/mch-transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetPlatformSolutionMerchantTransferBatchDetailByDetailIdAsync(this WechatTenpayClient client, Models.GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "platsolution", "mch-transfer", "batches", "out-batch-no", request.BatchId, "details", "detail-id", request.DetailId) + .SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /platsolution/mch-transfer/reservation/apply 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteApplyPlatformSolutionMerchantTransferReservationAsync(this WechatTenpayClient client, Models.ApplyPlatformSolutionMerchantTransferReservationRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "platsolution", "mch-transfer", "reservation", "apply"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /platsolution/mch-transfer/reservation/out-reservation-no/{out_reservation_no} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetPlatformSolutionMerchantTransferReservationByOutReservationNumberAsync(this WechatTenpayClient client, Models.GetPlatformSolutionMerchantTransferReservationByOutReservationNumberRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "platsolution", "mch-transfer", "reservation", "out-reservation-no", request.OutReservationNumber) + .SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /platsolution/mch-transfer/reservation/reservation-id/{reservation_id} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetPlatformSolutionMerchantTransferReservationByReservationIdAsync(this WechatTenpayClient client, Models.GetPlatformSolutionMerchantTransferReservationByReservationIdRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "platsolution", "mch-transfer", "reservation", "reservation-id", request.ReservationId) + .SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /platsolution/mch-transfer/reservation/out-reservation-no/{out_reservation_no}/close 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteClosePlatformSolutionMerchantTransferReservationAsync(this WechatTenpayClient client, Models.ClosePlatformSolutionMerchantTransferReservationRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "platsolution", "mch-transfer", "reservation", "out-reservation-no", request.OutReservationNumber, "close"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.cs new file mode 100644 index 00000000..0ce29991 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /ecommerce/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}/cancel 接口的请求。 + /// + public class CancelEcommerceMerchantTransferBillRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置商户转账单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutBillNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.cs new file mode 100644 index 00000000..01780154 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.cs @@ -0,0 +1,47 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /ecommerce/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}/cancel 接口的响应。 + /// + public class CancelEcommerceMerchantTransferBillResponse : WechatTenpayResponse + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置商户转账单号。 + /// + [Newtonsoft.Json.JsonProperty("out_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_bill_no")] + public string OutBillNumber { get; set; } = default!; + + /// + /// 获取或设置微信转账单号。 + /// + [Newtonsoft.Json.JsonProperty("transfer_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_bill_no")] + public string TransferBillNumber { get; set; } = default!; + + /// + /// 获取或设置单据状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.cs new file mode 100644 index 00000000..8e3b7a1a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /ecommerce/mch-transfer/authorizations 接口的请求。 + /// + public class CreateEcommerceMerchantTransferAuthorizationRequest : WechatTenpayRequest + { + public static class Types + { + public class Agreement + { + /// + /// 获取或设置协议编号。 + /// + [Newtonsoft.Json.JsonProperty("agreement_code")] + [System.Text.Json.Serialization.JsonPropertyName("agreement_code")] + public string AgreementCode { get; set; } = string.Empty; + + /// + /// 获取或设置协议版本号。 + /// + [Newtonsoft.Json.JsonProperty("agreement_version")] + [System.Text.Json.Serialization.JsonPropertyName("agreement_version")] + public string AgreementVersion { get; set; } = string.Empty; + + /// + /// 获取或设置签约主体。 + /// + [Newtonsoft.Json.JsonProperty("sign_organization")] + [System.Text.Json.Serialization.JsonPropertyName("sign_organization")] + public string SignOrganization { get; set; } = string.Empty; + + /// + /// 获取或设置签约时间。 + /// + [Newtonsoft.Json.JsonProperty("sign_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("sign_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset SignTime { get; set; } + } + } + + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置签约协议列表。 + /// + [Newtonsoft.Json.JsonProperty("agreement_list")] + [System.Text.Json.Serialization.JsonPropertyName("agreement_list")] + public IList AgreementList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.cs new file mode 100644 index 00000000..9d9f31ef --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.cs @@ -0,0 +1,42 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /ecommerce/mch-transfer/authorizations 接口的响应。 + /// + public class CreateEcommerceMerchantTransferAuthorizationResponse : WechatTenpayResponse + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置授权状态。 + /// + [Newtonsoft.Json.JsonProperty("authorization_state")] + [System.Text.Json.Serialization.JsonPropertyName("authorization_state")] + public string AuthorizationState { get; set; } = default!; + + /// + /// 获取或设置受理时间。 + /// + [Newtonsoft.Json.JsonProperty("accept_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("accept_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset AcceptTime { get; set; } + + /// + /// 获取或设置授权时间。 + /// + [Newtonsoft.Json.JsonProperty("authorize_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("authorize_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? AuthorizeTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.cs new file mode 100644 index 00000000..c553a3d8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.cs @@ -0,0 +1,81 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /ecommerce/mch-transfer/transfer-bills 接口的请求。 + /// + [WechatTenpaySensitive] + public class CreateEcommerceMerchantTransferBillRequest : WechatTenpayRequest + { + public static class Types + { + public class TransferDetail : CreateTransferBatchRequest.Types.TransferDetail + { + } + } + + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置服务商 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置商户转账单号。 + /// + [Newtonsoft.Json.JsonProperty("out_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_bill_no")] + public string OutBillNumber { get; set; } = string.Empty; + + /// + /// 获取或设置转账场景 ID。 + /// + [Newtonsoft.Json.JsonProperty("transfer_scene_id")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_scene_id")] + public string TransferSceneId { get; set; } = string.Empty; + + /// + /// 获取或设置收款用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置收款用户姓名(需使用平台公钥/证书加密)。 + /// + [Newtonsoft.Json.JsonProperty("user_name")] + [System.Text.Json.Serialization.JsonPropertyName("user_name")] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)] + public string? UserName { get; set; } + + /// + /// 获取或设置转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("transfer_amount")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_amount")] + public int TransferAmount { get; set; } + + /// + /// 获取或设置转账备注。 + /// + [Newtonsoft.Json.JsonProperty("transfer_remark")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_remark")] + public string TransferRemark { get; set; } = string.Empty; + + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string? NotifyUrl { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.cs new file mode 100644 index 00000000..5d8cdba5 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.cs @@ -0,0 +1,61 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /ecommerce/mch-transfer/transfer-bills 接口的响应。 + /// + public class CreateEcommerceMerchantTransferBillResponse : WechatTenpayResponse + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置商户转账单号。 + /// + [Newtonsoft.Json.JsonProperty("out_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_bill_no")] + public string OutBillNumber { get; set; } = default!; + + /// + /// 获取或设置微信转账单号。 + /// + [Newtonsoft.Json.JsonProperty("transfer_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_bill_no")] + public string TransferBillNumber { get; set; } = default!; + + /// + /// 获取或设置单据状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置失败原因。 + /// + [Newtonsoft.Json.JsonProperty("fail_reason")] + [System.Text.Json.Serialization.JsonPropertyName("fail_reason")] + public string? FailReason { get; set; } + + /// + /// 获取或设置创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置跳转领取页面的信息。 + /// + [Newtonsoft.Json.JsonProperty("package_info")] + [System.Text.Json.Serialization.JsonPropertyName("package_info")] + public string? PackageInfo { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdRequest.cs new file mode 100644 index 00000000..69e43519 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /ecommerce/mch-transfer/authorizations/{sub_mchid} 接口的请求。 + /// + public class GetEcommerceMerchantTransferAuthorizationBySubMerchantIdRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.cs new file mode 100644 index 00000000..1832d383 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.cs @@ -0,0 +1,33 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /ecommerce/mch-transfer/authorizations/{sub_mchid} 接口的响应。 + /// + public class GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse : WechatTenpayResponse + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置授权状态。 + /// + [Newtonsoft.Json.JsonProperty("authorization_state")] + [System.Text.Json.Serialization.JsonPropertyName("authorization_state")] + public string AuthorizationState { get; set; } = default!; + + /// + /// 获取或设置授权时间。 + /// + [Newtonsoft.Json.JsonProperty("authorize_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("authorize_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? AuthorizeTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberRequest.cs new file mode 100644 index 00000000..4b889bf4 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /ecommerce/mch-transfer/transfer-bills/out-bill-no/{out_bill_no} 接口的请求。 + /// + public class GetEcommerceMerchantTransferBillByOutBillNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置商户转账单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutBillNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.cs new file mode 100644 index 00000000..a59040af --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.cs @@ -0,0 +1,115 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /ecommerce/mch-transfer/transfer-bills/out-bill-no/{out_bill_no} 接口的响应。 + /// + [WechatTenpaySensitive] + public class GetEcommerceMerchantTransferBillByOutBillNumberResponse : WechatTenpayResponse + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置服务商 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置商户转账单号。 + /// + [Newtonsoft.Json.JsonProperty("out_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_bill_no")] + public string OutBillNumber { get; set; } = default!; + + /// + /// 获取或设置微信转账单号。 + /// + [Newtonsoft.Json.JsonProperty("transfer_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_bill_no")] + public string TransferBillNumber { get; set; } = default!; + + /// + /// 获取或设置单据状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置转账场景 ID。 + /// + [Newtonsoft.Json.JsonProperty("transfer_scene_id")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_scene_id")] + public string TransferSceneId { get; set; } = default!; + + /// + /// 获取或设置收款用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置收款用户姓名(需使用商户私钥解密)。 + /// + [Newtonsoft.Json.JsonProperty("user_name")] + [System.Text.Json.Serialization.JsonPropertyName("user_name")] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)] + public string? UserName { get; set; } + + /// + /// 获取或设置转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("transfer_amount")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_amount")] + public int TransferAmount { get; set; } + + /// + /// 获取或设置转账备注。 + /// + [Newtonsoft.Json.JsonProperty("transfer_remark")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_remark")] + public string TransferRemark { get; set; } = default!; + + /// + /// 获取或设置失败原因。 + /// + [Newtonsoft.Json.JsonProperty("fail_reason")] + [System.Text.Json.Serialization.JsonPropertyName("fail_reason")] + public string? FailReason { get; set; } + + /// + /// 获取或设置创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberRequest.cs new file mode 100644 index 00000000..9a520135 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /ecommerce/mch-transfer/transfer-bills/transfer-bill-no/{transfer_bill_no} 接口的请求。 + /// + public class GetEcommerceMerchantTransferBillByTransferBillNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置微信转账单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string TransferBillNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.cs new file mode 100644 index 00000000..24e25e52 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.cs @@ -0,0 +1,10 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /ecommerce/mch-transfer/transfer-bills/transfer-bill-no/{transfer_bill_no} 接口的响应。 + /// + [WechatTenpaySensitive] + public class GetEcommerceMerchantTransferBillByTransferBillNumberResponse : GetEcommerceMerchantTransferBillByOutBillNumberResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.cs new file mode 100644 index 00000000..62e01911 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.cs @@ -0,0 +1,128 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /platsolution/mch-transfer/batches/apply 接口的请求。 + /// + public class ApplyPlatformSolutionMerchantTransferBatchRequest : WechatTenpayRequest + { + public static class Types + { + public class TransferDetail + { + /// + /// 获取或设置商户明细单号。 + /// + [Newtonsoft.Json.JsonProperty("out_detail_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_detail_no")] + public string OutDetailNumber { get; set; } = string.Empty; + + /// + /// 获取或设置转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("transfer_amount")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_amount")] + public int TransferAmount { get; set; } + + /// + /// 获取或设置转账备注。 + /// + [Newtonsoft.Json.JsonProperty("transfer_remark")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_remark")] + public string TransferRemark { get; set; } = string.Empty; + + /// + /// 获取或设置收款用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = string.Empty; + + /// + /// 获取或设置微信转账预约单号。 + /// + [Newtonsoft.Json.JsonProperty("reservation_id")] + [System.Text.Json.Serialization.JsonPropertyName("reservation_id")] + public string ReservationId { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置特约商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置服务商 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_appid")] + public string? AppId { get; set; } + + /// + /// 获取或设置二级商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutBatchNumber { get; set; } = string.Empty; + + /// + /// 获取或设置批次名称。 + /// + [Newtonsoft.Json.JsonProperty("batch_name")] + [System.Text.Json.Serialization.JsonPropertyName("batch_name")] + public string BatchName { get; set; } = string.Empty; + + /// + /// 获取或设置批次备注。 + /// + [Newtonsoft.Json.JsonProperty("batch_remark")] + [System.Text.Json.Serialization.JsonPropertyName("batch_remark")] + public string BatchRemark { get; set; } = string.Empty; + + /// + /// 获取或设置转账场景 ID。 + /// + [Newtonsoft.Json.JsonProperty("transfer_scene_id")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_scene_id")] + public string TransferSceneId { get; set; } = string.Empty; + + /// + /// 获取或设置转账总金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_amount")] + [System.Text.Json.Serialization.JsonPropertyName("total_amount")] + public int TotalAmount { get; set; } + + /// + /// 获取或设置转账总笔数。 + /// + [Newtonsoft.Json.JsonProperty("total_num")] + [System.Text.Json.Serialization.JsonPropertyName("total_num")] + public int TotalNumber { get; set; } + + /// + /// 获取或设置转账明细列表。 + /// + [Newtonsoft.Json.JsonProperty("transfer_detail_list")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_detail_list")] + public IList TransferDetailList { get; set; } = new List(); + + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string? NotifyUrl { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.cs new file mode 100644 index 00000000..ad4c6cc4 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.cs @@ -0,0 +1,40 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /platsolution/mch-transfer/batches/apply 接口的响应。 + /// + public class ApplyPlatformSolutionMerchantTransferBatchResponse : WechatTenpayResponse + { + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutBatchNumber { get; set; } = default!; + + /// + /// 获取或设置微信批次单号。 + /// + [Newtonsoft.Json.JsonProperty("batch_id")] + [System.Text.Json.Serialization.JsonPropertyName("batch_id")] + public string BatchId { get; set; } = default!; + + /// + /// 获取或设置批次创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置批次状态。 + /// + [Newtonsoft.Json.JsonProperty("batch_state")] + [System.Text.Json.Serialization.JsonPropertyName("batch_state")] + public string? BatchState { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.cs new file mode 100644 index 00000000..6632d863 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.cs @@ -0,0 +1,160 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /platsolution/mch-transfer/reservation/apply 接口的请求。 + /// + [WechatTenpaySensitive] + public class ApplyPlatformSolutionMerchantTransferReservationRequest : WechatTenpayRequest + { + public static class Types + { + public class SceneReportData + { + public static class Types + { + public class InsurancePolicy + { + /// + /// 获取或设置保险产品备案编号。 + /// + [Newtonsoft.Json.JsonProperty("product_registration_no")] + [System.Text.Json.Serialization.JsonPropertyName("product_registration_no")] + public string? ProductRegistrationNumber { get; set; } + + /// + /// 获取或设置保险单号。 + /// + [Newtonsoft.Json.JsonProperty("policy_no")] + [System.Text.Json.Serialization.JsonPropertyName("policy_no")] + public string PolicyNumber { get; set; } = string.Empty; + + /// + /// 获取或设置保险名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = string.Empty; + + /// + /// 获取或设置取现单号。 + /// + [Newtonsoft.Json.JsonProperty("withdrawal_no")] + [System.Text.Json.Serialization.JsonPropertyName("withdrawal_no")] + public string? WithdrawalNumber { get; set; } + + /// + /// 获取或设置理赔单号。 + /// + [Newtonsoft.Json.JsonProperty("claim_no")] + [System.Text.Json.Serialization.JsonPropertyName("claim_no")] + public string? ClaimNumber { get; set; } + } + } + + /// + /// 获取或设置保险保单报备信息。 + /// + [Newtonsoft.Json.JsonProperty("insurance_policy")] + [System.Text.Json.Serialization.JsonPropertyName("insurance_policy")] + public Types.InsurancePolicy? InsurancePolicy { get; set; } + } + } + + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置服务商 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置二级商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置商户预约单号。 + /// + [Newtonsoft.Json.JsonProperty("out_reservation_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_reservation_no")] + public string OutReservationNumber { get; set; } = string.Empty; + + /// + /// 获取或设置转账场景 ID。 + /// + [Newtonsoft.Json.JsonProperty("transfer_scene_id")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_scene_id")] + public string TransferSceneId { get; set; } = string.Empty; + + /// + /// 获取或设置预计最晚转账日期。 + /// + [Newtonsoft.Json.JsonProperty("estimated_date")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("estimated_date")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? EstimatedDate { get; set; } + + /// + /// 获取或设置预计最大转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("estimated_max_amount")] + [System.Text.Json.Serialization.JsonPropertyName("estimated_max_amount")] + public int? EstimatedMaxAmount { get; set; } + + /// + /// 获取或设置准确转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("exact_amount")] + [System.Text.Json.Serialization.JsonPropertyName("exact_amount")] + public int? ExactAmount { get; set; } + + /// + /// 获取或设置收款用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = string.Empty; + + /// + /// 获取或设置收款用户姓名(需使用平台公钥/证书加密)。 + /// + [Newtonsoft.Json.JsonProperty("user_real_name")] + [System.Text.Json.Serialization.JsonPropertyName("user_real_name")] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)] + public string? UserName { get; set; } + + /// + /// 获取或设置预约备注。 + /// + [Newtonsoft.Json.JsonProperty("reserve_remark")] + [System.Text.Json.Serialization.JsonPropertyName("reserve_remark")] + public string ReserveRemark { get; set; } = string.Empty; + + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string? NotifyUrl { get; set; } + + /// + /// 获取或设置场景报备信息。 + /// + [Newtonsoft.Json.JsonProperty("scene_report_data")] + [System.Text.Json.Serialization.JsonPropertyName("scene_report_data")] + public Types.SceneReportData? SceneReportData { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.cs new file mode 100644 index 00000000..f0a09803 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.cs @@ -0,0 +1,54 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /platsolution/mch-transfer/reservation/apply 接口的响应。 + /// + public class ApplyPlatformSolutionMerchantTransferReservationResponse : WechatTenpayResponse + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置商户预约单号。 + /// + [Newtonsoft.Json.JsonProperty("out_reservation_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_reservation_no")] + public string OutReservationNumber { get; set; } = default!; + + /// + /// 获取或设置微信预约单号。 + /// + [Newtonsoft.Json.JsonProperty("reservation_id")] + [System.Text.Json.Serialization.JsonPropertyName("reservation_id")] + public string ReservationId { get; set; } = default!; + + /// + /// 获取或设置预约记录状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置预约受理时间。 + /// + [Newtonsoft.Json.JsonProperty("accept_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("accept_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset AcceptTime { get; set; } + + /// + /// 获取或设置跳转预约页面的信息。 + /// + [Newtonsoft.Json.JsonProperty("package_info")] + [System.Text.Json.Serialization.JsonPropertyName("package_info")] + public string? PackageInfo { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationRequest.cs new file mode 100644 index 00000000..e1a9a7a3 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /platsolution/mch-transfer/reservation/out-reservation-no/{out_reservation_no}/close 接口的请求。 + /// + public class ClosePlatformSolutionMerchantTransferReservationRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置商户预约单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutReservationNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.cs new file mode 100644 index 00000000..45aaf7ec --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /platsolution/mch-transfer/reservation/out-reservation-no/{out_reservation_no}/close 接口的响应。 + /// + public class ClosePlatformSolutionMerchantTransferReservationResponse : GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdRequest.cs new file mode 100644 index 00000000..d253bf0e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdRequest.cs @@ -0,0 +1,50 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/batch-id/{batch_id} 接口的请求。 + /// + public class GetPlatformSolutionMerchantTransferBatchByBatchIdRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置微信批次单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string BatchId { get; set; } = string.Empty; + + /// + /// 获取或设置是否查询转账明细单。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public bool RequireQueryDetail { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Offset { get; set; } + + /// + /// 获取或设置分页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Limit { get; set; } + + /// + /// 获取或设置明细状态。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? DetailState { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.cs new file mode 100644 index 00000000..3b67a487 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.cs @@ -0,0 +1,47 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/batch-id/{batch_id} 接口的响应。 + /// + public class GetPlatformSolutionMerchantTransferBatchByBatchIdResponse : WechatTenpayResponse + { + public static class Types + { + public class TransferBatch : GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.Types.TransferBatch + { + } + + public class TransferDetail : GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.Types.TransferDetail + { + } + } + + /// + /// 获取或设置转账批次信息。 + /// + [Newtonsoft.Json.JsonProperty("transfer_batch")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_batch")] + public Types.TransferBatch TransferBatch { get; set; } = default!; + + /// + /// 获取或设置转账明细单列表。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.TransferDetail[]? TransferDetailList { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Offset { get; set; } + + /// + /// 获取或设置分页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberRequest.cs new file mode 100644 index 00000000..b198e66e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberRequest.cs @@ -0,0 +1,50 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/out-batch-no/{out_batch_no} 接口的请求。 + /// + public class GetPlatformSolutionMerchantTransferBatchByOutBatchNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutBatchNumber { get; set; } = string.Empty; + + /// + /// 获取或设置是否查询转账明细单。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public bool RequireQueryDetail { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Offset { get; set; } + + /// + /// 获取或设置分页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Limit { get; set; } + + /// + /// 获取或设置明细状态。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? DetailState { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.cs new file mode 100644 index 00000000..44bab88c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.cs @@ -0,0 +1,196 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/out-batch-no/{out_batch_no} 接口的响应。 + /// + public class GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse : WechatTenpayResponse + { + public static class Types + { + public class TransferBatch + { + /// + /// 获取或设置服务商商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置特约商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置服务商 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置特约商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutBatchNumber { get; set; } = default!; + + /// + /// 获取或设置微信批次单号。 + /// + [Newtonsoft.Json.JsonProperty("batch_id")] + [System.Text.Json.Serialization.JsonPropertyName("batch_id")] + public string BatchId { get; set; } = default!; + + /// + /// 获取或设置批次状态。 + /// + [Newtonsoft.Json.JsonProperty("batch_state")] + [System.Text.Json.Serialization.JsonPropertyName("batch_state")] + public string BatchState { get; set; } = default!; + + /// + /// 获取或设置批次名称。 + /// + [Newtonsoft.Json.JsonProperty("batch_name")] + [System.Text.Json.Serialization.JsonPropertyName("batch_name")] + public string BatchName { get; set; } = default!; + + /// + /// 获取或设置批次备注。 + /// + [Newtonsoft.Json.JsonProperty("batch_remark")] + [System.Text.Json.Serialization.JsonPropertyName("batch_remark")] + public string BatchRemark { get; set; } = default!; + + /// + /// 获取或设置转账场景 ID。 + /// + [Newtonsoft.Json.JsonProperty("transfer_scene_id")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_scene_id")] + public string TransferSceneId { get; set; } = default!; + + /// + /// 获取或设置批次关闭原因。 + /// + [Newtonsoft.Json.JsonProperty("close_reason")] + [System.Text.Json.Serialization.JsonPropertyName("close_reason")] + public string? CloseReason { get; set; } + + /// + /// 获取或设置转账总金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_amount")] + [System.Text.Json.Serialization.JsonPropertyName("total_amount")] + public int TotalAmount { get; set; } + + /// + /// 获取或设置转账总笔数。 + /// + [Newtonsoft.Json.JsonProperty("total_num")] + [System.Text.Json.Serialization.JsonPropertyName("total_num")] + public int TotalNumber { get; set; } + + /// + /// 获取或设置批次创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置转账成功金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("success_amount")] + [System.Text.Json.Serialization.JsonPropertyName("success_amount")] + public int SuccessAmount { get; set; } + + /// + /// 获取或设置转账成功笔数。 + /// + [Newtonsoft.Json.JsonProperty("success_num")] + [System.Text.Json.Serialization.JsonPropertyName("success_num")] + public int SuccessNumber { get; set; } + + /// + /// 获取或设置转账失败金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("failed_amount")] + [System.Text.Json.Serialization.JsonPropertyName("failed_amount")] + public int FailAmount { get; set; } + + /// + /// 获取或设置转账失败笔数。 + /// + [Newtonsoft.Json.JsonProperty("failed_num")] + [System.Text.Json.Serialization.JsonPropertyName("failed_num")] + public int FailNumber { get; set; } + } + + public class TransferDetail + { + /// + /// 获取或设置商户明细单号。 + /// + [Newtonsoft.Json.JsonProperty("out_detail_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_detail_no")] + public string OutDetailNumber { get; set; } = default!; + + /// + /// 获取或设置微信明细单号。 + /// + [Newtonsoft.Json.JsonProperty("detail_id")] + [System.Text.Json.Serialization.JsonPropertyName("detail_id")] + public string DetailId { get; set; } = default!; + + /// + /// 获取或设置明细状态。 + /// + [Newtonsoft.Json.JsonProperty("detail_state")] + [System.Text.Json.Serialization.JsonPropertyName("detail_state")] + public string DetailState { get; set; } = default!; + } + } + + /// + /// 获取或设置转账批次信息。 + /// + [Newtonsoft.Json.JsonProperty("transfer_batch")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_batch")] + public Types.TransferBatch TransferBatch { get; set; } = default!; + + /// + /// 获取或设置转账明细单列表。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.TransferDetail[]? TransferDetailList { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Offset { get; set; } + + /// + /// 获取或设置分页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest.cs new file mode 100644 index 00000000..5397935e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id} 接口的请求。 + /// + public class GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置微信批次单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string BatchId { get; set; } = string.Empty; + + /// + /// 获取或设置微信明细单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string DetailId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.cs new file mode 100644 index 00000000..7ae55d62 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.cs @@ -0,0 +1,12 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id} 接口的响应。 + /// + [WechatTenpaySensitive] + public class GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse : GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest.cs new file mode 100644 index 00000000..7965cbaa --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no} 接口的请求。 + /// + public class GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutBatchNumber { get; set; } = string.Empty; + + /// + /// 获取或设置商户明细单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutDetailNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.cs new file mode 100644 index 00000000..27985b8b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.cs @@ -0,0 +1,138 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no} 接口的响应。 + /// + [WechatTenpaySensitive] + public class GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse : WechatTenpayResponse + { + /// + /// 获取或设置特约商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置服务商 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置特约商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutBatchNumber { get; set; } = default!; + + /// + /// 获取或设置微信批次单号。 + /// + [Newtonsoft.Json.JsonProperty("batch_id")] + [System.Text.Json.Serialization.JsonPropertyName("batch_id")] + public string BatchId { get; set; } = default!; + + /// + /// 获取或设置商户明细单号。 + /// + [Newtonsoft.Json.JsonProperty("out_detail_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_detail_no")] + public string OutDetailNumber { get; set; } = default!; + + /// + /// 获取或设置微信明细单号。 + /// + [Newtonsoft.Json.JsonProperty("detail_id")] + [System.Text.Json.Serialization.JsonPropertyName("detail_id")] + public string DetailId { get; set; } = default!; + + /// + /// 获取或设置明细状态。 + /// + [Newtonsoft.Json.JsonProperty("detail_state")] + [System.Text.Json.Serialization.JsonPropertyName("detail_state")] + public string DetailState { get; set; } = default!; + + /// + /// 获取或设置转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("transfer_amount")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_amount")] + public int TransferAmount { get; set; } + + /// + /// 获取或设置转账备注。 + /// + [Newtonsoft.Json.JsonProperty("transfer_remark")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_remark")] + public string TransferRemark { get; set; } = default!; + + /// + /// 获取或设置失败原因。 + /// + [Newtonsoft.Json.JsonProperty("fail_reason")] + [System.Text.Json.Serialization.JsonPropertyName("fail_reason")] + public string? FailReason { get; set; } + + /// + /// 获取或设置收款用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = default!; + + /// + /// 获取或设置收款银行类型。 + /// + [Newtonsoft.Json.JsonProperty("bank_type")] + [System.Text.Json.Serialization.JsonPropertyName("bank_type")] + public string? BankType { get; set; } + + /// + /// 获取或设置收款用户姓名(需使用商户私钥解密)。 + /// + [Newtonsoft.Json.JsonProperty("user_name")] + [System.Text.Json.Serialization.JsonPropertyName("user_name")] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)] + public string? UserName { get; set; } + + /// + /// 获取或设置创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置转账完成时间。 + /// + [Newtonsoft.Json.JsonProperty("transfer_finish_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("transfer_finish_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? TransferFinishTime { get; set; } + + /// + /// 获取或设置银行退票时间。 + /// + [Newtonsoft.Json.JsonProperty("bank_refund_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("bank_refund_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? BankRefundTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberRequest.cs new file mode 100644 index 00000000..133109c6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/reservation/out-reservation-no/{out_reservation_no} 接口的请求。 + /// + public class GetPlatformSolutionMerchantTransferReservationByOutReservationNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置商户预约单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutReservationNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.cs new file mode 100644 index 00000000..ff10bfab --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.cs @@ -0,0 +1,150 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/reservation/out-reservation-no/{out_reservation_no} 接口的响应。 + /// + public class GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse : WechatTenpayResponse + { + public static class Types + { + public class CloseInfo + { + /// + /// 获取或设置关闭原因。 + /// + [Newtonsoft.Json.JsonProperty("close_reason")] + [System.Text.Json.Serialization.JsonPropertyName("close_reason")] + public string CloseReason { get; set; } = default!; + + /// + /// 获取或设置关闭时间。 + /// + [Newtonsoft.Json.JsonProperty("close_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("close_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset CloseTime { get; set; } + } + } + + /// + /// 获取或设置服务商商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置服务商 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置二级商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置商户预约单号。 + /// + [Newtonsoft.Json.JsonProperty("out_reservation_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_reservation_no")] + public string OutReservationNumber { get; set; } = default!; + + /// + /// 获取或设置微信预约单号。 + /// + [Newtonsoft.Json.JsonProperty("reservation_id")] + [System.Text.Json.Serialization.JsonPropertyName("reservation_id")] + public string ReservationId { get; set; } = default!; + + /// + /// 获取或设置转账场景 ID。 + /// + [Newtonsoft.Json.JsonProperty("transfer_scene_id")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_scene_id")] + public string TransferSceneId { get; set; } = default!; + + /// + /// 获取或设置预计最晚转账日期。 + /// + [Newtonsoft.Json.JsonProperty("estimated_date")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("estimated_date")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? EstimatedDate { get; set; } + + /// + /// 获取或设置预计最大转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("estimated_max_amount")] + [System.Text.Json.Serialization.JsonPropertyName("estimated_max_amount")] + public int? EstimatedMaxAmount { get; set; } + + /// + /// 获取或设置准确转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("exact_amount")] + [System.Text.Json.Serialization.JsonPropertyName("exact_amount")] + public int? ExactAmount { get; set; } + + /// + /// 获取或设置收款用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = default!; + + /// + /// 获取或设置收款银行类型。 + /// + [Newtonsoft.Json.JsonProperty("bank_type")] + [System.Text.Json.Serialization.JsonPropertyName("bank_type")] + public string? BankType { get; set; } + + /// + /// 获取或设置预约记录状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置预约受理时间。 + /// + [Newtonsoft.Json.JsonProperty("accept_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("accept_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset AcceptTime { get; set; } + + /// + /// 获取或设置确认预约时间。 + /// + [Newtonsoft.Json.JsonProperty("reserve_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("reserve_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? ReserveTime { get; set; } + + /// + /// 获取或设置预约关闭信息。 + /// + [Newtonsoft.Json.JsonProperty("close_info")] + [System.Text.Json.Serialization.JsonPropertyName("close_info")] + public Types.CloseInfo? CloseInfo { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdRequest.cs new file mode 100644 index 00000000..3aa66909 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/reservation/reservation-id/{reservation_id} 接口的请求。 + /// + public class GetPlatformSolutionMerchantTransferReservationByReservationIdRequest : WechatTenpayRequest + { + /// + /// 获取或设置二级商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SubMerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置微信预约单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string ReservationId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.cs new file mode 100644 index 00000000..39bbcc76 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.cs @@ -0,0 +1,11 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /platsolution/mch-transfer/reservation/reservation-id/{reservation_id} 接口的响应。 + /// + public class GetPlatformSolutionMerchantTransferReservationByReservationIdResponse : GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Transfer/Batches/CreatePartnerTransferBatchRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Transfer/Batches/CreatePartnerTransferBatchRequest.cs index 8990ebf7..e54197cb 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Transfer/Batches/CreatePartnerTransferBatchRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Transfer/Batches/CreatePartnerTransferBatchRequest.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { /// /// 表示 [POST] /partner-transfer/batches 接口的请求。 /// + [WechatTenpaySensitive] public class CreatePartnerTransferBatchRequest : WechatTenpayRequest { public static class Types diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.json new file mode 100644 index 00000000..7d58dc71 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillRequest.json @@ -0,0 +1,3 @@ +{ + "sub_mchid": "1900001109" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.json new file mode 100644 index 00000000..b6deaba3 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CancelEcommerceMerchantTransferBillResponse.json @@ -0,0 +1,7 @@ +{ + "sub_mchid": "1900001109", + "out_bill_no": "plfk2020042013", + "transfer_bill_no": "1330000071100999991182020050700019480001", + "state": "CANCELING", + "update_time": "2015-05-20T13:29:35.120+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.json new file mode 100644 index 00000000..4be19fc5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationRequest.json @@ -0,0 +1,11 @@ +{ + "sub_mchid": "1900001109", + "agreement_list": [ + { + "agreement_code": "1", + "agreement_version": "20230101", + "sign_organization": "示例有限责任公司", + "sign_time": "2015-05-20T13:29:35.120+08:00" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.json new file mode 100644 index 00000000..ee92df11 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferAuthorizationResponse.json @@ -0,0 +1,6 @@ +{ + "sub_mchid": "1900001109", + "authorization_state": "AUTHORIZE_PROCESSING", + "accept_time": "2015-05-20T13:29:35.120+08:00", + "authorize_time": "2015-05-20T13:29:35.120+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.json new file mode 100644 index 00000000..8e10abd9 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillRequest.json @@ -0,0 +1,11 @@ +{ + "sub_mchid": "1900001109", + "appid": "wxf636efh567hg4356", + "out_bill_no": "plfk2020042013", + "transfer_scene_id": "1000", + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "user_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45", + "transfer_amount": 400000, + "transfer_remark": "2020年4月报销", + "notify_url": "https://www.weixin.qq.com/wxpay/pay.php" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.json new file mode 100644 index 00000000..472a61b7 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/CreateEcommerceMerchantTransferBillResponse.json @@ -0,0 +1,9 @@ +{ + "sub_mchid": "1900001109", + "out_bill_no": "plfk2020042013", + "transfer_bill_no": "1330000071100999991182020050700019480001", + "create_time": "2015-05-20T13:29:35.120+08:00", + "state": "ACCEPTED", + "fail_reason": "PAYEE_ACCOUNT_ABNORMAL", + "package_info": "affffddafdfafddffda==" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.json new file mode 100644 index 00000000..83107521 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferAuthorizationBySubMerchantIdResponse.json @@ -0,0 +1,5 @@ +{ + "sub_mchid": "1900001109", + "authorization_state": "AUTHORIZE_PROCESSING", + "authorize_time": "2015-05-20T13:29:35.120+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.json new file mode 100644 index 00000000..01acc626 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByOutBillNumberResponse.json @@ -0,0 +1,16 @@ +{ + "mchid": "1900001109", + "sub_mchid": "1900001121", + "out_bill_no": "plfk2020042013", + "transfer_bill_no": "1330000071100999991182020050700019480001", + "appid": "wxf636efh567hg4356", + "transfer_scene_id": "10001", + "state": "ACCEPTED", + "transfer_amount": 400000, + "transfer_remark": "2020年4月报销", + "fail_reason": "PAYEE_ACCOUNT_ABNORMAL", + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "user_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45", + "create_time": "2015-05-20T13:29:35.120+08:00", + "update_time": "2015-05-20T13:29:35.120+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.json new file mode 100644 index 00000000..01acc626 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/Ecommerce/MerchantTransfer/GetEcommerceMerchantTransferBillByTransferBillNumberResponse.json @@ -0,0 +1,16 @@ +{ + "mchid": "1900001109", + "sub_mchid": "1900001121", + "out_bill_no": "plfk2020042013", + "transfer_bill_no": "1330000071100999991182020050700019480001", + "appid": "wxf636efh567hg4356", + "transfer_scene_id": "10001", + "state": "ACCEPTED", + "transfer_amount": 400000, + "transfer_remark": "2020年4月报销", + "fail_reason": "PAYEE_ACCOUNT_ABNORMAL", + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "user_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45", + "create_time": "2015-05-20T13:29:35.120+08:00", + "update_time": "2015-05-20T13:29:35.120+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.json new file mode 100644 index 00000000..223fa731 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchRequest.json @@ -0,0 +1,21 @@ +{ + "sub_mchid": "1900001109", + "sp_appid": "wxf636efh567hg4356", + "sub_appid": "wxf636efh567hg4356", + "out_batch_no": "sjzz20230223", + "batch_name": "2023年2月深圳分部报销单", + "batch_remark": "2023年2月深圳分部报销单", + "total_amount": 4000000, + "total_num": 200, + "transfer_scene_id": "1000", + "transfer_detail_list": [ + { + "out_detail_no": "x23zy545Bd5436", + "transfer_amount": 200000, + "transfer_remark": "2023年2月报销", + "reservation_id": "1330000071100999991182020050700019480001", + "openid": "o-MYE42l80oelYMDE34nYD456Xoy" + } + ], + "notify_url": "https://www.weixin.qq.com/wxpay/pay.php" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.json new file mode 100644 index 00000000..e6b52e9a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferBatchResponse.json @@ -0,0 +1,6 @@ +{ + "out_batch_no": "sjzz20230223", + "batch_id": "131000011085109987515042023022300246500006", + "create_time": "2023-02-23T13:29:35+08:00", + "batch_state": "ACCEPTED" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.json new file mode 100644 index 00000000..26abc19f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationRequest.json @@ -0,0 +1,23 @@ +{ + "sub_mchid": "1900001109", + "sp_appid": "wxf636efh567hg4356", + "sub_appid": "wxf636efh567hg4356", + "out_reservation_no": "plfk2020042013", + "transfer_scene_id": "1000", + "estimated_date": "2019-11-22", + "estimated_max_amount": 400000, + "exact_amount": 100000, + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "user_real_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45", + "reserve_remark": "由于存在收益波动,实际到账资金可能不等于当前金额", + "notify_url": "https://www.weixin.qq.com/wxpay/pay.php", + "scene_report_data": { + "insurance_policy": { + "product_registration_no": "40058541257", + "policy_no": "202301011651", + "name": "养老保险", + "withdrawal_no": "202310410941", + "claim_no": "202310410941" + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.json new file mode 100644 index 00000000..2095edc8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ApplyPlatformSolutionMerchantTransferReservationResponse.json @@ -0,0 +1,8 @@ +{ + "sub_mchid": "1900001109", + "out_reservation_no": "plfk2020042013", + "reservation_id": "1330000071100999991182020050700019480001", + "accept_time": "2015-05-20T13:29:35.120+08:00", + "state": "ACCEPTED", + "package_info": "affffddafdfafddffda==" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.json new file mode 100644 index 00000000..a91374e8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/ClosePlatformSolutionMerchantTransferReservationResponse.json @@ -0,0 +1,21 @@ +{ + "sp_mchid": "1900001109", + "sub_mchid": "1900001109", + "sp_appid": "wxf636efh567hg4356", + "sub_appid": "wxf636efh567hg4356", + "reservation_id": "1330000071100999991182020050700019480001", + "out_reservation_no": "plfk2020042013", + "transfer_scene_id": "1000", + "estimated_date": "2019-11-22", + "estimated_max_amount": 400000, + "exact_amount": 100000, + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "bank_type": "ICBC_DEBIT", + "state": "ACCEPTED", + "accept_time": "2015-05-20T13:29:35.120+08:00", + "reserve_time": "2015-05-20T13:29:35.120+08:00", + "close_info": { + "close_time": "2015-05-20T13:29:35.120+08:00", + "close_reason": "USER_OVERDUE_UNCONFIRMED" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.json new file mode 100644 index 00000000..aa6f7676 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByBatchIdResponse.json @@ -0,0 +1,30 @@ +{ + "transfer_batch": { + "out_batch_no": "sjzz20230223", + "batch_id": "131000011085109987515042023022300246500006", + "sp_appid": "wxf636efh567hg4356", + "sub_mchid": "1900000109", + "sub_appid": "wxf636efh567hg4356", + "batch_state": "ACCEPTED", + "batch_name": "2023年2月深圳分部转账单", + "batch_remark": "2023年2月深圳分部报销单", + "close_reason": "MERCHANT_REVOCATION", + "total_amount": 4000000, + "total_num": 200, + "create_time": "2023-02-23T13:29:35+08:00", + "success_amount": 3900000, + "success_num": 199, + "failed_amount": 100000, + "failed_num": 1, + "transfer_scene_id": "1000" + }, + "data": [ + { + "detail_id": "132000011085109987515042023022300246521006", + "out_detail_no": "x23zy545Bd5436", + "detail_state": "INIT" + } + ], + "offset": 0, + "limit": 20 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.json new file mode 100644 index 00000000..aa6f7676 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchByOutBatchNumberResponse.json @@ -0,0 +1,30 @@ +{ + "transfer_batch": { + "out_batch_no": "sjzz20230223", + "batch_id": "131000011085109987515042023022300246500006", + "sp_appid": "wxf636efh567hg4356", + "sub_mchid": "1900000109", + "sub_appid": "wxf636efh567hg4356", + "batch_state": "ACCEPTED", + "batch_name": "2023年2月深圳分部转账单", + "batch_remark": "2023年2月深圳分部报销单", + "close_reason": "MERCHANT_REVOCATION", + "total_amount": 4000000, + "total_num": 200, + "create_time": "2023-02-23T13:29:35+08:00", + "success_amount": 3900000, + "success_num": 199, + "failed_amount": 100000, + "failed_num": 1, + "transfer_scene_id": "1000" + }, + "data": [ + { + "detail_id": "132000011085109987515042023022300246521006", + "out_detail_no": "x23zy545Bd5436", + "detail_state": "INIT" + } + ], + "offset": 0, + "limit": 20 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.json new file mode 100644 index 00000000..3259deb1 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse.json @@ -0,0 +1,19 @@ +{ + "out_batch_no": "sjzz20230223", + "batch_id": "131000011085109987515042023022300246500006", + "out_detail_no": "x23zy545Bd5436", + "detail_id": "132000011085109987515042023022300246521006", + "sp_appid": "wxf636efh567hg4356", + "sub_mchid": "1900000109", + "sub_appid": "wxf636efh567hg4356", + "create_time": "2023-02-23T13:29:35+08:00", + "detail_state": "INIT", + "transfer_amount": 20000, + "transfer_remark": "2023年2月报销", + "fail_reason": "ACCOUNT_FROZEN", + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "bank_type": "ICBC_DEBIT", + "user_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45", + "transfer_finish_time": "2023-02-23T13:29:35+08:00", + "bank_refund_time": "2023-02-23T13:29:35+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.json new file mode 100644 index 00000000..3259deb1 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse.json @@ -0,0 +1,19 @@ +{ + "out_batch_no": "sjzz20230223", + "batch_id": "131000011085109987515042023022300246500006", + "out_detail_no": "x23zy545Bd5436", + "detail_id": "132000011085109987515042023022300246521006", + "sp_appid": "wxf636efh567hg4356", + "sub_mchid": "1900000109", + "sub_appid": "wxf636efh567hg4356", + "create_time": "2023-02-23T13:29:35+08:00", + "detail_state": "INIT", + "transfer_amount": 20000, + "transfer_remark": "2023年2月报销", + "fail_reason": "ACCOUNT_FROZEN", + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "bank_type": "ICBC_DEBIT", + "user_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45", + "transfer_finish_time": "2023-02-23T13:29:35+08:00", + "bank_refund_time": "2023-02-23T13:29:35+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.json new file mode 100644 index 00000000..a91374e8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByOutReservationNumberResponse.json @@ -0,0 +1,21 @@ +{ + "sp_mchid": "1900001109", + "sub_mchid": "1900001109", + "sp_appid": "wxf636efh567hg4356", + "sub_appid": "wxf636efh567hg4356", + "reservation_id": "1330000071100999991182020050700019480001", + "out_reservation_no": "plfk2020042013", + "transfer_scene_id": "1000", + "estimated_date": "2019-11-22", + "estimated_max_amount": 400000, + "exact_amount": 100000, + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "bank_type": "ICBC_DEBIT", + "state": "ACCEPTED", + "accept_time": "2015-05-20T13:29:35.120+08:00", + "reserve_time": "2015-05-20T13:29:35.120+08:00", + "close_info": { + "close_time": "2015-05-20T13:29:35.120+08:00", + "close_reason": "USER_OVERDUE_UNCONFIRMED" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.json new file mode 100644 index 00000000..a91374e8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/MerchantTransfer/GetPlatformSolutionMerchantTransferReservationByReservationIdResponse.json @@ -0,0 +1,21 @@ +{ + "sp_mchid": "1900001109", + "sub_mchid": "1900001109", + "sp_appid": "wxf636efh567hg4356", + "sub_appid": "wxf636efh567hg4356", + "reservation_id": "1330000071100999991182020050700019480001", + "out_reservation_no": "plfk2020042013", + "transfer_scene_id": "1000", + "estimated_date": "2019-11-22", + "estimated_max_amount": 400000, + "exact_amount": 100000, + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "bank_type": "ICBC_DEBIT", + "state": "ACCEPTED", + "accept_time": "2015-05-20T13:29:35.120+08:00", + "reserve_time": "2015-05-20T13:29:35.120+08:00", + "close_info": { + "close_time": "2015-05-20T13:29:35.120+08:00", + "close_reason": "USER_OVERDUE_UNCONFIRMED" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs index c4059589..1665a413 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs @@ -512,6 +512,59 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests } } + [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /ecommerce/mch-transfer/transfer-bills)")] + public async Task TestEncryptRequestSensitiveProperty_CreateEcommerceMerchantTransferBillRequest() + { + static Models.CreateEcommerceMerchantTransferBillRequest GenerateMockRequestModel() + { + return new Models.CreateEcommerceMerchantTransferBillRequest() + { + UserName = MOCK_PLAIN_STR + }; + } + + static void AssertMockRequestModel(Models.CreateEcommerceMerchantTransferBillRequest request, Func decryptor) + { + Assert.NotEqual(MOCK_PLAIN_STR, request.UserName!); + Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.UserName!)); + Assert.Equal(MOCK_CERT_SN, request.WechatpayCertificateSerialNumber!, ignoreCase: true); + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey)) + { + using (var client = CreateMockClientUseRSA(autoEncrypt: false)) + { + var request = GenerateMockRequestModel(); + client.EncryptRequestSensitiveProperty(request); + AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + + using (var client = CreateMockClientUseRSA(autoEncrypt: true)) + { + var request = GenerateMockRequestModel(); + await client.ExecuteCreateEcommerceMerchantTransferBillAsync(request); + AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey)) + { + using (var client = CreateMockClientUseSM2(autoEncrypt: false)) + { + var request = GenerateMockRequestModel(); + client.EncryptRequestSensitiveProperty(request); + AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + + using (var client = CreateMockClientUseSM2(autoEncrypt: true)) + { + var request = GenerateMockRequestModel(); + await client.ExecuteCreateEcommerceMerchantTransferBillAsync(request); + AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + } + } + [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /ecommerce/profitsharing/orders)")] public async Task TestEncryptRequestSensitiveProperty_CreateEcommerceProfitSharingOrderRequest() { @@ -1392,6 +1445,58 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests } } + [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /platsolution/mch-transfer/reservation/apply)")] + public async Task TestEncryptRequestSensitiveProperty_ApplyPlatformSolutionMerchantTransferReservationRequest() + { + static Models.ApplyPlatformSolutionMerchantTransferReservationRequest GenerateMockRequestModel() + { + return new Models.ApplyPlatformSolutionMerchantTransferReservationRequest() + { + UserName = MOCK_PLAIN_STR + }; + } + + static void AssertMockRequestModel(Models.ApplyPlatformSolutionMerchantTransferReservationRequest request, Func decryptor) + { + Assert.NotEqual(MOCK_PLAIN_STR, request.UserName!); + Assert.Equal(MOCK_CERT_SN, request.WechatpayCertificateSerialNumber!, ignoreCase: true); + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey)) + { + using (var client = CreateMockClientUseRSA(autoEncrypt: false)) + { + var request = GenerateMockRequestModel(); + client.EncryptRequestSensitiveProperty(request); + AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + + using (var client = CreateMockClientUseRSA(autoEncrypt: true)) + { + var request = GenerateMockRequestModel(); + await client.ExecuteApplyPlatformSolutionMerchantTransferReservationAsync(request); + AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey)) + { + using (var client = CreateMockClientUseSM2(autoEncrypt: false)) + { + var request = GenerateMockRequestModel(); + client.EncryptRequestSensitiveProperty(request); + AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + + using (var client = CreateMockClientUseSM2(autoEncrypt: true)) + { + var request = GenerateMockRequestModel(); + await client.ExecuteApplyPlatformSolutionMerchantTransferReservationAsync(request); + AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!); + } + } + } + [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /profitsharing/orders)")] public async Task TestEncryptRequestSensitiveProperty_CreateProfitSharingOrderRequest() { diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs index 00a8d18f..56042d60 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs @@ -9,7 +9,6 @@ using Xunit; namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests { using SKIT.FlurlHttpClient.Internal; - using SKIT.FlurlHttpClient.Primitives; public partial class TestCase_ResponseDecryptionTests { @@ -310,6 +309,128 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests } } + [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /ecommerce/mch-transfer/transfer-bills/out-bill-no/{out_bill_no})")] + public async Task TestDecryptResponseSensitiveProperty_GetEcommerceMerchantTransferBillByOutBillNumberResponse() + { + static Models.GetEcommerceMerchantTransferBillByOutBillNumberResponse GenerateMockResponseModel(Func encryptor) + { + return SetMockResponseRawStatusAsOk(new Models.GetEcommerceMerchantTransferBillByOutBillNumberResponse() + { + UserName = encryptor.Invoke(MOCK_PLAIN_STR) + }); + } + + static void AssertMockResponseModel(Models.GetEcommerceMerchantTransferBillByOutBillNumberResponse response) + { + Assert.Equal(MOCK_PLAIN_STR, response.UserName!); + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey)) + { + using (var client = CreateMockClientUseRSA(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseRSA( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetEcommerceMerchantTransferBillByOutBillNumberRequest(); + var response = await client.ExecuteGetEcommerceMerchantTransferBillByOutBillNumberAsync(request); + AssertMockResponseModel(response); + } + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey)) + { + using (var client = CreateMockClientUseSM2(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseSM2( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetEcommerceMerchantTransferBillByOutBillNumberRequest(); + var response = await client.ExecuteGetEcommerceMerchantTransferBillByOutBillNumberAsync(request); + AssertMockResponseModel(response); + } + } + } + + [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /ecommerce/mch-transfer/transfer-bills/transfer-bill-no/{transfer_bill_no})")] + public async Task TestDecryptResponseSensitiveProperty_GetEcommerceMerchantTransferBillByTransferBillNumberResponse() + { + static Models.GetEcommerceMerchantTransferBillByTransferBillNumberResponse GenerateMockResponseModel(Func encryptor) + { + return SetMockResponseRawStatusAsOk(new Models.GetEcommerceMerchantTransferBillByTransferBillNumberResponse() + { + UserName = encryptor.Invoke(MOCK_PLAIN_STR) + }); + } + + static void AssertMockResponseModel(Models.GetEcommerceMerchantTransferBillByTransferBillNumberResponse response) + { + Assert.Equal(MOCK_PLAIN_STR, response.UserName!); + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey)) + { + using (var client = CreateMockClientUseRSA(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseRSA( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetEcommerceMerchantTransferBillByTransferBillNumberRequest(); + var response = await client.ExecuteGetEcommerceMerchantTransferBillByTransferBillNumberAsync(request); + AssertMockResponseModel(response); + } + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey)) + { + using (var client = CreateMockClientUseSM2(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseSM2( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetEcommerceMerchantTransferBillByTransferBillNumberRequest(); + var response = await client.ExecuteGetEcommerceMerchantTransferBillByTransferBillNumberAsync(request); + AssertMockResponseModel(response); + } + } + } + [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /marketing/shopping-receipt/shoppingreceipts)")] public async Task TestDecryptResponseSensitiveProperty_UploadMarketingShoppingReceiptResponse() { @@ -829,6 +950,128 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests } } + [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /platsolution/mch-transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id})")] + public async Task TestDecryptResponseSensitiveProperty_GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse() + { + static Models.GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse GenerateMockResponseModel(Func encryptor) + { + return SetMockResponseRawStatusAsOk(new Models.GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse() + { + UserName = encryptor.Invoke(MOCK_PLAIN_STR) + }); + } + + static void AssertMockResponseModel(Models.GetPlatformSolutionMerchantTransferBatchDetailByDetailIdResponse response) + { + Assert.Equal(MOCK_PLAIN_STR, response.UserName!); + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey)) + { + using (var client = CreateMockClientUseRSA(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseRSA( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest(); + var response = await client.ExecuteGetPlatformSolutionMerchantTransferBatchDetailByDetailIdAsync(request); + AssertMockResponseModel(response); + } + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey)) + { + using (var client = CreateMockClientUseSM2(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseSM2( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetPlatformSolutionMerchantTransferBatchDetailByDetailIdRequest(); + var response = await client.ExecuteGetPlatformSolutionMerchantTransferBatchDetailByDetailIdAsync(request); + AssertMockResponseModel(response); + } + } + } + + [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /platsolution/mch-transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no})")] + public async Task TestDecryptResponseSensitiveProperty_GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse() + { + static Models.GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse GenerateMockResponseModel(Func encryptor) + { + return SetMockResponseRawStatusAsOk(new Models.GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse() + { + UserName = encryptor.Invoke(MOCK_PLAIN_STR) + }); + } + + static void AssertMockResponseModel(Models.GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberResponse response) + { + Assert.Equal(MOCK_PLAIN_STR, response.UserName!); + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey)) + { + using (var client = CreateMockClientUseRSA(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseRSA( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest(); + var response = await client.ExecuteGetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberAsync(request); + AssertMockResponseModel(response); + } + } + + if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey)) + { + using (var client = CreateMockClientUseSM2(autoDecrypt: false)) + { + var response = GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!); + client.DecryptResponseSensitiveProperty(response); + AssertMockResponseModel(response); + } + + using (var client = CreateMockClientUseSM2( + autoDecrypt: true, + mockResponseContent: new SystemTextJsonSerializer().Serialize( + GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!) + ) + )) + { + var request = new Models.GetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberRequest(); + var response = await client.ExecuteGetPlatformSolutionMerchantTransferBatchDetailByOutDetailNumberAsync(request); + AssertMockResponseModel(response); + } + } + } + [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /smartguide/guides)")] public async Task TestDecryptResponseSensitiveProperty_QuerySmartGuidesResponse() {