diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientExecuteBillCommentExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientExecuteBillCommentExtensions.cs new file mode 100644 index 00000000..3d58bf3b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientExecuteBillCommentExtensions.cs @@ -0,0 +1,30 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 +{ + public static class WechatTenpayClientExecuteBillCommentExtensions + { + /// + /// 异步调用 [POST] /billcommentsp/batchquerycomment 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_17 + /// + /// + /// + /// + /// + public static async Task ExecuteBatchQueryBillCommentAsync(this WechatTenpayClient client, Models.BatchQueryBillCommentRequest 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, "billcommentsp", "batchquerycomment"); + + return await client.SendRequestWithXmlAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/BillComment/BatchQueryBillCommentRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/BillComment/BatchQueryBillCommentRequest.cs new file mode 100644 index 00000000..f9cd5d3e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/BillComment/BatchQueryBillCommentRequest.cs @@ -0,0 +1,66 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models +{ + /// + /// 表示 [POST] /billcommentsp/batchquerycomment 接口的请求。 + /// + public class BatchQueryBillCommentRequest : WechatTenpaySignableRequest + { + /// + /// + /// + [Newtonsoft.Json.JsonProperty("mch_id")] + [System.Text.Json.Serialization.JsonPropertyName("mch_id")] + public override string? MerchantId { get; set; } + + /// + /// + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public override string? AppId { get; set; } + + /// + /// + /// 默认值: + /// + [Newtonsoft.Json.JsonProperty("sign_type")] + [System.Text.Json.Serialization.JsonPropertyName("sign_type")] +#pragma warning disable CS8765 + public override string SignType { get; set; } = Constants.SignTypes.HMAC_SHA256; +#pragma warning restore CS8765 + + /// + /// 获取或设置开始时间。 + /// + [Newtonsoft.Json.JsonProperty("begin_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("begin_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))] + public DateTimeOffset BeginTime { get; set; } + + /// + /// 获取或设置结束时间。 + /// + [Newtonsoft.Json.JsonProperty("end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))] + public DateTimeOffset EndTime { 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.TenpayV2/Models/BillComment/BatchQueryBillCommentResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/BillComment/BatchQueryBillCommentResponse.cs new file mode 100644 index 00000000..58f8ab97 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/BillComment/BatchQueryBillCommentResponse.cs @@ -0,0 +1,27 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models +{ + /// + /// 表示 [POST] /billcommentsp/batchquerycomment 接口的响应。 + /// + public class BatchQueryBillCommentResponse : WechatTenpayResponse + { + /// + /// + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? MerchantId { get; set; } + + /// + /// + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AppId { get; set; } + + public override bool IsSuccessful() + { + return base.IsSuccessful() && RawBytes?.Length > 0; + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV2.UnitTests/ModelSamples/BillComment/BatchQueryBillCommentRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV2.UnitTests/ModelSamples/BillComment/BatchQueryBillCommentRequest.json new file mode 100644 index 00000000..f0b984fe --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV2.UnitTests/ModelSamples/BillComment/BatchQueryBillCommentRequest.json @@ -0,0 +1,11 @@ +{ + "appid": "wxe062425f740c30d8", + "mch_id": "1900000109", + "nonce_str": "5K8264ILTKCH16CQ2502SI8ZNMTM67VS", + "offset": 0, + "limit": 100, + "begin_time": "20170724000000", + "end_time": "20170725000000", + "sign_type": "HMAC-SHA256", + "sign": "3AE1368BD96B4644FA5823E024CFE938F1B852EFA87919EDDEE324AE24C8C04F" +}