diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs index cef4cdc2..c7a0e12c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBillExtensions.cs @@ -93,6 +93,34 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); } + /// + /// 异步调用 [GET] /bill/sub-merchant-fundflowbill 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter4_1_12.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetBillSubMerchantFundflowBillAsync(this WechatTenpayClient client, Models.GetBillSubMerchantFundflowBillRequest 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, "bill", "sub-merchant-fundflowbill") + .SetQueryParam("sub_mchid", request.SubMerchantId) + .SetQueryParam("bill_date", request.BillDateString) + .SetQueryParam("algorithm", request.Algorithm); + + if (!string.IsNullOrEmpty(request.AccountType)) + flurlReq.SetQueryParam("account_type", request.AccountType); + + if (!string.IsNullOrEmpty(request.TarType)) + flurlReq.SetQueryParam("tar_type", request.TarType); + + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); + } + /// /// 异步调用 [GET] /{download_url} 接口。 /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_8.shtml diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Bill/GetBillSubMerchantFundflowBillRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Bill/GetBillSubMerchantFundflowBillRequest.cs new file mode 100644 index 00000000..cb820c6e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Bill/GetBillSubMerchantFundflowBillRequest.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /bill/sub-merchant-fundflowbill 接口的请求。 + /// + public class GetBillSubMerchantFundflowBillRequest : GetBillFundflowBillRequest + { + /// + /// 获取或设置子商户号。 + /// + [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 Algorithm { get; set; } = Constants.EncryptionAlgorithms.AEAD_AES_256_GCM; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Bill/GetBillSubMerchantFundflowBillResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Bill/GetBillSubMerchantFundflowBillResponse.cs new file mode 100644 index 00000000..e863a96c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Bill/GetBillSubMerchantFundflowBillResponse.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /bill/sub-merchant-fundflowbill 接口的响应。 + /// + public class GetBillSubMerchantFundflowBillResponse : WechatTenpayResponse + { + public static class Types + { + public class DownloadBill + { + /// + /// 获取或设置账单文件序号。 + /// + [Newtonsoft.Json.JsonProperty("bill_sequence")] + [System.Text.Json.Serialization.JsonPropertyName("bill_sequence")] + public int BillSequence { get; set; } + + /// + /// 获取或设置哈希类型。 + /// + [Newtonsoft.Json.JsonProperty("hash_type")] + [System.Text.Json.Serialization.JsonPropertyName("hash_type")] + public string HashType { get; set; } = default!; + + /// + /// 获取或设置哈希值。 + /// + [Newtonsoft.Json.JsonProperty("hash_value")] + [System.Text.Json.Serialization.JsonPropertyName("hash_value")] + public string HashValue { get; set; } = default!; + + /// + /// 获取或设置账单下载地址。 + /// + [Newtonsoft.Json.JsonProperty("download_url")] + [System.Text.Json.Serialization.JsonPropertyName("download_url")] + public string DownloadUrl { get; set; } = default!; + + /// + /// 获取或设置账单加密密钥(需使用商户私钥解密)。 + /// + [Newtonsoft.Json.JsonProperty("encrypt_key")] + [System.Text.Json.Serialization.JsonPropertyName("encrypt_key")] + public string EncryptKey { get; set; } = default!; + + /// + /// 获取或设置账单加密使用的随机字符串。 + /// + [Newtonsoft.Json.JsonProperty("nonce")] + [System.Text.Json.Serialization.JsonPropertyName("nonce")] + public string Nonce { get; set; } = default!; + } + } + + /// + /// 获取或设置账单文件总数。 + /// + [Newtonsoft.Json.JsonProperty("download_bill_count")] + [System.Text.Json.Serialization.JsonPropertyName("download_bill_count")] + public int DownloadBillCount { get; set; } + + /// + /// 获取或设置账单文件列表。 + /// + [Newtonsoft.Json.JsonProperty("download_bill_list")] + [System.Text.Json.Serialization.JsonPropertyName("download_bill_list")] + public Types.DownloadBill[] DownloadBillList { get; set; } = default!; + } +}