diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs index ac377597..288fb4b1 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs @@ -108,6 +108,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter4_5_8.shtml /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter5_1_19.shtml /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_9_3.shtml + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_3.shtml /// /// /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantFundBalanceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantFundBalanceExtensions.cs index 74eceecc..cd6e0436 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantFundBalanceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantFundBalanceExtensions.cs @@ -17,6 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 异步调用 [GET] /merchant/fund/balance/{account_type} 接口。 /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_7_3.shtml + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter5_1.shtml /// /// /// @@ -36,6 +37,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 异步调用 [GET] /merchant/fund/dayendbalance/{account_type} 接口。 /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_7_4.shtml + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter5_2.shtml /// /// /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantFundIncomeRecordsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantFundIncomeRecordsExtensions.cs new file mode 100644 index 00000000..165760b0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantFundIncomeRecordsExtensions.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + /// + /// 为 提供来账识别相关的 API 扩展方法。 + /// + public static class WechatTenpayClientExecuteMerchantFundIncomeRecordsExtensions + { + /// + /// 异步调用 [GET] /merchantfund/merchant/income-records 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter3_7.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteQueryMerchantFundIncomeRecordsAsync(this WechatTenpayClient client, Models.QueryMerchantFundIncomeRecordsRequest 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 + .CreateRequest(request, HttpMethod.Get, "merchantfund", "merchant", "income-records") + .SetQueryParam("account_type", request.AccountType) + .SetQueryParam("date", request.DateString) + .SetQueryParam("limit", request.Limit); + + if (request.Offset.HasValue) + flurlReq.SetQueryParam("offset", request.Offset); + + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTransferExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTransferExtensions.cs new file mode 100644 index 00000000..880c9c76 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTransferExtensions.cs @@ -0,0 +1,219 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + /// + /// 为 提供转账相关的 API 扩展方法。 + /// + public static class WechatTenpayClientExecuteTransferExtensions + { + #region Batches + /// + /// 异步调用 [POST] /transfer/batches 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter3_1.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteCreateTransferBatchAsync(this WechatTenpayClient client, Models.CreateTransferBatchRequest 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 + .CreateRequest(request, HttpMethod.Post, "transfer", "batches"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /transfer/batches/batch-id/{batch_id} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter3_2.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetTransferBatchByBatchIdAsync(this WechatTenpayClient client, Models.GetTransferBatchByBatchIdRequest 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 + .CreateRequest(request, HttpMethod.Get, "transfer", "batches", "batch-id", request.BatchId) + .SetQueryParam("need_query_detail", request.RequireQueryDetail); + + if (request.Offset.HasValue) + flurlReq.SetQueryParam("offset", request.Offset.Value); + + if (request.Limit.HasValue) + flurlReq.SetQueryParam("limit", request.Limit.Value); + + if (!string.IsNullOrEmpty(request.DetailStatus)) + flurlReq.SetQueryParam("detail_status", request.DetailStatus); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter3_3.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetTransferBatchDetailByDetailIdAsync(this WechatTenpayClient client, Models.GetTransferBatchDetailByDetailIdRequest 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 + .CreateRequest(request, HttpMethod.Get, "transfer", "batches", "batch-id", request.BatchId, "details", "detail-id", request.DetailId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /transfer/batches/out-batch-no/{out_batch_no} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter3_4.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetTransferBatchByOutBatchNumberAsync(this WechatTenpayClient client, Models.GetTransferBatchByOutBatchNumberRequest 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 + .CreateRequest(request, HttpMethod.Get, "transfer", "batches", "out-batch-no", request.OutBatchNumber) + .SetQueryParam("need_query_detail", request.RequireQueryDetail); + + if (request.Offset.HasValue) + flurlReq.SetQueryParam("offset", request.Offset.Value); + + if (request.Limit.HasValue) + flurlReq.SetQueryParam("limit", request.Limit.Value); + + if (!string.IsNullOrEmpty(request.DetailStatus)) + flurlReq.SetQueryParam("detail_status", request.DetailStatus); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter3_5.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetTransferBatchDetailByOutDetailNumberAsync(this WechatTenpayClient client, Models.GetTransferBatchDetailByOutDetailNumberRequest 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 + .CreateRequest(request, HttpMethod.Get, "transfer", "batches", "out-batch-no", request.OutBatchNumber, "details", "out-detail-no", request.OutDetailNumber); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region BillReceipt + /// + /// 异步调用 [POST] /transfer/bill-receipt 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_1.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteCreateTransferBillReceiptAsync(this WechatTenpayClient client, Models.CreateTransferBillReceiptRequest 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 + .CreateRequest(request, HttpMethod.Post, "transfer", "bill-receipt"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /transfer/bill-receipt/{out_batch_no} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_2.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetTransferBillReceiptByOutBatchNumberAsync(this WechatTenpayClient client, Models.GetTransferBillReceiptByOutBatchNumberRequest 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 + .CreateRequest(request, HttpMethod.Get, "transfer", "bill-receipt", request.OutBatchNumber); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region Detail + /// + /// 异步调用 [POST] /transfer-detail/electronic-receipts 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_4.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteCreateTransferDetailElectronicReceiptAsync(this WechatTenpayClient client, Models.CreateTransferDetailElectronicReceiptRequest 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 + .CreateRequest(request, HttpMethod.Post, "transfer-detail", "electronic-receipts"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /transfer-detail/electronic-receipts 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter4_5.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetTransferDetailElectronicReceiptByOutDetailNumberAsync(this WechatTenpayClient client, Models.GetTransferDetailElectronicReceiptByOutDetailNumberRequest 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 + .CreateRequest(request, HttpMethod.Get, "transfer-detail", "electronic-receipts") + .SetQueryParam("accept_type", request.AcceptType) + .SetQueryParam("out_detail_no", request.OutDetailNumber); + + if (!string.IsNullOrEmpty(request.OutBatchNumber)) + flurlReq.SetQueryParam("out_batch_no", request.OutBatchNumber); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs index 3850c772..825fa6c7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs @@ -11,13 +11,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 { /// /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_3.shtml - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_3.shtml /// /// /// /// - public static Models.GetEcommerceApplymentByOutRequestNumberResponse DecryptResponseEncryptedData(this WechatTenpayClient client, Models.GetEcommerceApplymentByOutRequestNumberResponse response) + public static Models.GetEcommerceApplymentByOutRequestNumberResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.GetEcommerceApplymentByOutRequestNumberResponse response) { if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); @@ -73,13 +71,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_3.shtml - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_3.shtml /// /// /// /// - public static Models.GetEcommerceBillFundflowBillResponse DecryptResponseEncryptedData(this WechatTenpayClient client, Models.GetEcommerceBillFundflowBillResponse response) + public static Models.GetEcommerceBillFundflowBillResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.GetEcommerceBillFundflowBillResponse response) { if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); @@ -121,13 +117,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_3.shtml - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_3.shtml /// /// /// /// - public static Models.GetMerchantServiceComplaintByComplaintIdResponse DecryptResponseEncryptedData(this WechatTenpayClient client, Models.GetMerchantServiceComplaintByComplaintIdResponse response) + public static Models.GetMerchantServiceComplaintByComplaintIdResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.GetMerchantServiceComplaintByComplaintIdResponse response) { if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); @@ -161,13 +155,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_3.shtml - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_3.shtml /// /// /// /// - public static Models.QueryCertificatesResponse DecryptResponseEncryptedData(this WechatTenpayClient client, Models.QueryCertificatesResponse response) + public static Models.QueryCertificatesResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.QueryCertificatesResponse response) { if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); @@ -215,13 +207,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_3.shtml - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_3.shtml /// /// /// /// - public static Models.QueryMerchantServiceComplaintsResponse DecryptResponseEncryptedData(this WechatTenpayClient client, Models.QueryMerchantServiceComplaintsResponse response) + public static Models.QueryMerchantServiceComplaintsResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.QueryMerchantServiceComplaintsResponse response) { if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); @@ -263,13 +253,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_3.shtml - /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_3.shtml /// /// /// /// - public static Models.QuerySmartGuidesResponse DecryptResponseEncryptedData(this WechatTenpayClient client, Models.QuerySmartGuidesResponse response) + public static Models.QuerySmartGuidesResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.QuerySmartGuidesResponse response) { if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); @@ -323,5 +311,75 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 return response; } + + /// + /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 + /// + /// + /// + /// + public static Models.GetTransferBatchDetailByOutDetailNumberResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.GetTransferBatchDetailByOutDetailNumberResponse response) + { + if (client == null) throw new ArgumentNullException(nameof(client)); + if (response == null) throw new ArgumentNullException(nameof(response)); + + if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); + + if (!response.IsSuccessful()) + throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of the response is not successful."); + + if (!string.IsNullOrEmpty(response.UserName)) + { + try + { + response.UserName = Utilities.RSAUtility.DecryptWithECB( + client.WechatMerchantCertPrivateKey, + response.UserName + ); + } + catch (Exception ex) + { + throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed.", ex); + } + } + + return response; + } + + /// + /// 解密响应中返回的敏感数据。该方法会改变传入的响应信息。 + /// + /// + /// + /// + public static Models.GetTransferBatchDetailByDetailIdResponse DecryptResponseEncryptedData(this WechatTenpayClient client, ref Models.GetTransferBatchDetailByDetailIdResponse response) + { + if (client == null) throw new ArgumentNullException(nameof(client)); + if (response == null) throw new ArgumentNullException(nameof(response)); + + if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); + + if (!response.IsSuccessful()) + throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of the response is not successful."); + + if (!string.IsNullOrEmpty(response.UserName)) + { + try + { + response.UserName = Utilities.RSAUtility.DecryptWithECB( + client.WechatMerchantCertPrivateKey, + response.UserName + ); + } + catch (Exception ex) + { + throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed.", ex); + } + } + + return response; + } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantFundIncomeRecords/QueryMerchantFundIncomeRecordsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantFundIncomeRecords/QueryMerchantFundIncomeRecordsRequest.cs new file mode 100644 index 00000000..b502f788 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantFundIncomeRecords/QueryMerchantFundIncomeRecordsRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /merchantfund/merchant/income-records 接口的请求。 + /// + public class QueryMerchantFundIncomeRecordsRequest : WechatTenpayRequest + { + /// + /// 获取或设置账户类型。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string AccountType { get; set; } = string.Empty; + + /// + /// 获取或设置日期(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string DateString { get; set; } = string.Empty; + + /// + /// 获取或设置分页开始位置。 + /// + [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; } = 10; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantFundIncomeRecords/QueryMerchantFundIncomeRecordsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantFundIncomeRecords/QueryMerchantFundIncomeRecordsResponse.cs new file mode 100644 index 00000000..5a2b7d77 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantFundIncomeRecords/QueryMerchantFundIncomeRecordsResponse.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /merchantfund/merchant/income-records 接口的响应。 + /// + public class QueryMerchantFundIncomeRecordsResponse : WechatTenpayResponse + { + public static class Types + { + public class IncomeRecord + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置账户类型。 + /// + [Newtonsoft.Json.JsonProperty("account_type")] + [System.Text.Json.Serialization.JsonPropertyName("account_type")] + public string AccountType { get; set; } = default!; + + /// + /// 获取或设置银行来账类型。 + /// + [Newtonsoft.Json.JsonProperty("income_record_type")] + [System.Text.Json.Serialization.JsonPropertyName("income_record_type")] + public string IncomeRecordType { get; set; } = default!; + + /// + /// 获取或设置银行来账微信单号。 + /// + [Newtonsoft.Json.JsonProperty("income_record_id")] + [System.Text.Json.Serialization.JsonPropertyName("income_record_id")] + public string IncomeRecordId { get; set; } = default!; + + /// + /// 获取或设置银行来账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public int Amount { get; set; } + + /// + /// 获取或设置企业微信的员工工号。 + /// + [Newtonsoft.Json.JsonProperty("success_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("success_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset SuccessTime { get; set; } + + /// + /// 获取或设置付款方银行名称。 + /// + [Newtonsoft.Json.JsonProperty("bank_name")] + [System.Text.Json.Serialization.JsonPropertyName("bank_name")] + public string BankName { get; set; } = default!; + + /// + /// 获取或设置付款方银行户名。 + /// + [Newtonsoft.Json.JsonProperty("bank_account_name")] + [System.Text.Json.Serialization.JsonPropertyName("bank_account_name")] + public string BankAccountName { get; set; } = default!; + + /// + /// 获取或设置付款方银行卡号。 + /// + [Newtonsoft.Json.JsonProperty("bank_account_number")] + [System.Text.Json.Serialization.JsonPropertyName("bank_account_number")] + public string BankAccountNumber { get; set; } = default!; + } + } + + /// + /// 获取或设置银行来账记录列表。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.IncomeRecord[]? IncomeRecordList { get; set; } + + /// + /// 获取或设置分页大小。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int Limit { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonProperty("offset")] + [System.Text.Json.Serialization.JsonPropertyName("offset")] + public int Offset { get; set; } + + /// + /// 获取或设置银行来账记录总数。 + /// + [Newtonsoft.Json.JsonProperty("total_count")] + [System.Text.Json.Serialization.JsonPropertyName("total_count")] + public int TotalCount { get; set; } + + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchRequest.cs new file mode 100644 index 00000000..52be9883 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchRequest.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /transfer/batches 接口的请求。 + /// + public class CreateTransferBatchRequest : 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("user_name")] + [System.Text.Json.Serialization.JsonPropertyName("user_name")] + public string UserName { get; set; } = string.Empty; + + /// + /// 获取或设置收款用户身份证号(需使用微信支付平台公钥加密)。 + /// + [Newtonsoft.Json.JsonProperty("user_id_card")] + [System.Text.Json.Serialization.JsonPropertyName("user_id_card")] + public string UserIdCardNumber { 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_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; + + /// + /// 获取或设置转账总金额(单位:分)。 + /// + [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(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchResponse.cs new file mode 100644 index 00000000..ed3cf0c8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchResponse.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /transfer/batches 接口的响应。 + /// + public class CreateTransferBatchResponse : 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.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByBatchIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByBatchIdRequest.cs new file mode 100644 index 00000000..762c6d6a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByBatchIdRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/batch-id/{batch_id} 接口的请求。 + /// + public class GetTransferBatchByBatchIdRequest : WechatTenpayRequest + { + /// + /// 获取或设置微信批次单号。 + /// + [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? DetailStatus { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByBatchIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByBatchIdResponse.cs new file mode 100644 index 00000000..17d273e2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByBatchIdResponse.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/batch-id/{batch_id} 接口的响应。 + /// + public class GetTransferBatchByBatchIdResponse : WechatTenpayResponse + { + public static class Types + { + public class TransferBatch : GetTransferBatchByOutBatchNumberResponse.Types.TransferBatch + { + } + + public class TransferDetail : GetTransferBatchByOutBatchNumberResponse.Types.TransferDetail + { + } + } + + /// + /// 获取或设置转账批次单信息。 + /// + [Newtonsoft.Json.JsonProperty("transfer_batch")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_batch")] + public Types.TransferBatch TransferBatch { get; set; } = default!; + + /// + /// 获取或设置转账明细单列表。 + /// + [Newtonsoft.Json.JsonProperty("transfer_detail_list")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_detail_list")] + public Types.TransferDetail[]? TransferDetailList { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByOutBatchNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByOutBatchNumberRequest.cs new file mode 100644 index 00000000..b2e8dace --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByOutBatchNumberRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/out-batch-no/{out_batch_no} 接口的请求。 + /// + public class GetTransferBatchByOutBatchNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置商户批次单号。 + /// + [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? DetailStatus { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByOutBatchNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByOutBatchNumberResponse.cs new file mode 100644 index 00000000..7c77e9a7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchByOutBatchNumberResponse.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/out-batch-no/{out_batch_no} 接口的响应。 + /// + public class GetTransferBatchByOutBatchNumberResponse : WechatTenpayResponse + { + public static class Types + { + public class TransferBatch + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置商户批次单号。 + /// + [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_status")] + [System.Text.Json.Serialization.JsonPropertyName("batch_status")] + public string BatchStatus { get; set; } = default!; + + /// + /// 获取或设置批次类型。 + /// + [Newtonsoft.Json.JsonProperty("batch_type")] + [System.Text.Json.Serialization.JsonPropertyName("batch_type")] + public string BatchType { 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!; + + /// + /// 获取或设置批次关闭原因。 + /// + [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.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置批次更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? UpdateTime { 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("fail_amount")] + [System.Text.Json.Serialization.JsonPropertyName("fail_amount")] + public int FailAmount { get; set; } + + /// + /// 获取或设置转账失败笔数。 + /// + [Newtonsoft.Json.JsonProperty("fail_num")] + [System.Text.Json.Serialization.JsonPropertyName("fail_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_status")] + [System.Text.Json.Serialization.JsonPropertyName("detail_status")] + public string DetailStatus { 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("transfer_detail_list")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_detail_list")] + public Types.TransferDetail[]? TransferDetailList { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonProperty("offset")] + [System.Text.Json.Serialization.JsonPropertyName("offset")] + public int? Offset { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByDetailIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByDetailIdRequest.cs new file mode 100644 index 00000000..47d5a035 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByDetailIdRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id} 接口的请求。 + /// + public class GetTransferBatchDetailByDetailIdRequest : WechatTenpayRequest + { + /// + /// 获取或设置微信批次单号。 + /// + [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/Transfer/Batches/GetTransferBatchDetailByDetailIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByDetailIdResponse.cs new file mode 100644 index 00000000..6b113033 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByDetailIdResponse.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id} 接口的响应。 + /// + public class GetTransferBatchDetailByDetailIdResponse : GetTransferBatchDetailByOutDetailNumberResponse + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByOutDetailNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByOutDetailNumberRequest.cs new file mode 100644 index 00000000..83117adb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByOutDetailNumberRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no} 接口的请求。 + /// + public class GetTransferBatchDetailByOutDetailNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置商户批次单号。 + /// + [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/Transfer/Batches/GetTransferBatchDetailByOutDetailNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByOutDetailNumberResponse.cs new file mode 100644 index 00000000..977bdda3 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/GetTransferBatchDetailByOutDetailNumberResponse.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no} 接口的响应。 + /// + public class GetTransferBatchDetailByOutDetailNumberResponse : WechatTenpayResponse + { + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置商户批次单号。 + /// + [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_status")] + [System.Text.Json.Serialization.JsonPropertyName("detail_status")] + public string DetailStatus { 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("user_name")] + [System.Text.Json.Serialization.JsonPropertyName("user_name")] + public string UserName { get; set; } = default!; + + /// + /// 获取或设置转账发起时间。 + /// + [Newtonsoft.Json.JsonProperty("initiate_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("initiate_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset InitiateTime { get; set; } + + /// + /// 获取或设置明细更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/CreateTransferBillReceiptRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/CreateTransferBillReceiptRequest.cs new file mode 100644 index 00000000..b7fd860f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/CreateTransferBillReceiptRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /transfer/bill-receipt 接口的请求。 + /// + public class CreateTransferBillReceiptRequest : WechatTenpayRequest + { + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutBatchNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/CreateTransferBillReceiptResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/CreateTransferBillReceiptResponse.cs new file mode 100644 index 00000000..0b9de23e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/CreateTransferBillReceiptResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /transfer/bill-receipt 接口的响应。 + /// + public class CreateTransferBillReceiptResponse : GetTransferBillReceiptByOutBatchNumberResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/GetTransferBillReceiptByOutBatchNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/GetTransferBillReceiptByOutBatchNumberRequest.cs new file mode 100644 index 00000000..444ad849 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/GetTransferBillReceiptByOutBatchNumberRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/bill-receipt/{out_batch_no} 接口的请求。 + /// + public class GetTransferBillReceiptByOutBatchNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutBatchNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/GetTransferBillReceiptByOutBatchNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/GetTransferBillReceiptByOutBatchNumberResponse.cs new file mode 100644 index 00000000..f11e883b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/BillReceipt/GetTransferBillReceiptByOutBatchNumberResponse.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer/bill-receipt/{out_batch_no} 接口的响应。 + /// + public class GetTransferBillReceiptByOutBatchNumberResponse : WechatTenpayResponse + { + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutBatchNumber { get; set; } = default!; + + /// + /// 获取或设置电子回单申请单号。 + /// + [Newtonsoft.Json.JsonProperty("signature_no")] + [System.Text.Json.Serialization.JsonPropertyName("signature_no")] + public string SignatureNumber { get; set; } = default!; + + /// + /// 获取或设置电子回单状态。 + /// + [Newtonsoft.Json.JsonProperty("signature_status")] + [System.Text.Json.Serialization.JsonPropertyName("signature_status")] + public string? SignatureStatus { get; set; } + + /// + /// 获取或设置电子回单文件的哈希方法。 + /// + [Newtonsoft.Json.JsonProperty("hash_type")] + [System.Text.Json.Serialization.JsonPropertyName("hash_type")] + public string? HashType { get; set; } + + /// + /// 获取或设置电子回单文件的哈希值。 + /// + [Newtonsoft.Json.JsonProperty("hash_value")] + [System.Text.Json.Serialization.JsonPropertyName("hash_value")] + public string? HashValue { get; set; } + + /// + /// 获取或设置电子回单文件的下载地址。 + /// + [Newtonsoft.Json.JsonProperty("download_url")] + [System.Text.Json.Serialization.JsonPropertyName("download_url")] + public string? DownloadUrl { get; set; } + + /// + /// 获取或设置创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? CreateTime { get; set; } + + /// + /// 获取或设置更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? UpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/CreateTransferDetailElectronicReceiptRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/CreateTransferDetailElectronicReceiptRequest.cs new file mode 100644 index 00000000..968c919c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/CreateTransferDetailElectronicReceiptRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /transfer-detail/electronic-receipts 接口的请求。 + /// + public class CreateTransferDetailElectronicReceiptRequest : WechatTenpayRequest + { + /// + /// 获取或设置受理类型。 + /// + [Newtonsoft.Json.JsonProperty("accept_type")] + [System.Text.Json.Serialization.JsonPropertyName("accept_type")] + public string AcceptType { get; set; } = string.Empty; + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string? OutBatchNumber { get; set; } + + /// + /// 获取或设置商户明细单号。 + /// + [Newtonsoft.Json.JsonProperty("out_detail_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_detail_no")] + public string OutDetailNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/CreateTransferDetailElectronicReceiptResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/CreateTransferDetailElectronicReceiptResponse.cs new file mode 100644 index 00000000..459d1e9c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/CreateTransferDetailElectronicReceiptResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /transfer-detail/electronic-receipts 接口的响应。 + /// + public class CreateTransferDetailElectronicReceiptResponse : GetTransferDetailElectronicReceiptByOutDetailNumberResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/GetTransferDetailElectronicReceiptByOutDetailNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/GetTransferDetailElectronicReceiptByOutDetailNumberRequest.cs new file mode 100644 index 00000000..26f954e4 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/GetTransferDetailElectronicReceiptByOutDetailNumberRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer-detail/electronic-receipts 接口的请求。 + /// + public class GetTransferDetailElectronicReceiptByOutDetailNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置受理类型。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string AcceptType { get; set; } = string.Empty; + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? OutBatchNumber { get; set; } + + /// + /// 获取或设置商户明细单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutDetailNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/GetTransferDetailElectronicReceiptByOutDetailNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/GetTransferDetailElectronicReceiptByOutDetailNumberResponse.cs new file mode 100644 index 00000000..bcaf988a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Detail/GetTransferDetailElectronicReceiptByOutDetailNumberResponse.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /transfer-detail/electronic-receipts 接口的响应。 + /// + public class GetTransferDetailElectronicReceiptByOutDetailNumberResponse : WechatTenpayResponse + { + /// + /// 获取或设置受理类型。 + /// + [Newtonsoft.Json.JsonProperty("accept_type")] + [System.Text.Json.Serialization.JsonPropertyName("accept_type")] + public string AcceptType { get; set; } = default!; + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutBatchNumber { 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("signature_no")] + [System.Text.Json.Serialization.JsonPropertyName("signature_no")] + public string SignatureNumber { get; set; } = default!; + + /// + /// 获取或设置电子回单状态。 + /// + [Newtonsoft.Json.JsonProperty("signature_status")] + [System.Text.Json.Serialization.JsonPropertyName("signature_status")] + public string? SignatureStatus { get; set; } + + /// + /// 获取或设置电子回单文件的哈希方法。 + /// + [Newtonsoft.Json.JsonProperty("hash_type")] + [System.Text.Json.Serialization.JsonPropertyName("hash_type")] + public string? HashType { get; set; } + + /// + /// 获取或设置电子回单文件的哈希值。 + /// + [Newtonsoft.Json.JsonProperty("hash_value")] + [System.Text.Json.Serialization.JsonPropertyName("hash_value")] + public string? HashValue { get; set; } + + /// + /// 获取或设置电子回单文件的下载地址。 + /// + [Newtonsoft.Json.JsonProperty("download_url")] + [System.Text.Json.Serialization.JsonPropertyName("download_url")] + public string? DownloadUrl { get; set; } + } +}