From 2e88a8365dcbf2ec7cbd73aa4ba4e13074cd200a Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Fri, 16 Jun 2023 18:45:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(wxapi):=20=E6=96=B0=E5=A2=9E=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=8F=B7=E5=B0=8F=E5=BA=97=E7=89=A9=E6=B5=81=E5=85=AC?= =?UTF-8?q?=E5=8F=B8=E8=99=9A=E6=8B=9F=E5=8F=B7=E7=A0=81=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...echatApiClientExecuteChannelsExtensions.cs | 62 +++++++++++++++++++ ...hannelsECLogisticsPhoneNumberGetRequest.cs | 22 +++++++ ...annelsECLogisticsPhoneNumberGetResponse.cs | 15 +++++ ...elsECLogisticsPhoneNumberPoolGetRequest.cs | 23 +++++++ ...lsECLogisticsPhoneNumberPoolGetResponse.cs | 36 +++++++++++ ...nnelsECLogisticsVirtualNumberGetRequest.cs | 15 +++++ ...nelsECLogisticsVirtualNumberGetResponse.cs | 29 +++++++++ ...nnelsECLogisticsPhoneNumberGetRequest.json | 4 ++ ...nelsECLogisticsPhoneNumberGetResponse.json | 5 ++ ...sECLogisticsPhoneNumberPoolGetRequest.json | 4 ++ ...ECLogisticsPhoneNumberPoolGetResponse.json | 8 +++ ...elsECLogisticsVirtualNumberGetRequest.json | 3 + ...lsECLogisticsVirtualNumberGetResponse.json | 7 +++ 13 files changed, 233 insertions(+) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs index 0038aaa5..0cb9a9be 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs @@ -1567,6 +1567,68 @@ namespace SKIT.FlurlHttpClient.Wechat.Api #endregion #endregion + #region ECLogistics + /// + /// 异步调用 [POST] /channels/ec/logistics/phonenumberpool/get 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/logistics/delivery_virtual_number.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECLogisticsPhoneNumberPoolGetAsync(this WechatApiClient client, Models.ChannelsECLogisticsPhoneNumberPoolGetRequest 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, "channels", "ec", "logistics", "phonenumberpool", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/logistics/phonenumber/get 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/logistics/delivery_virtual_number_get.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECLogisticsPhoneNumberGetAsync(this WechatApiClient client, Models.ChannelsECLogisticsPhoneNumberGetRequest 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, "channels", "ec", "logistics", "phonenumber", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/logistics/virtualnumber/get 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/logistics/delivery_virtual_number_get_virtual.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECLogisticsVirtualNumberGetAsync(this WechatApiClient client, Models.ChannelsECLogisticsVirtualNumberGetRequest 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, "channels", "ec", "logistics", "virtualnumber", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + #region ECSharer /// /// 异步调用 [POST] /channels/ec/sharer/bind 接口。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.cs new file mode 100644 index 00000000..b3e05054 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/logistics/phonenumber/get 接口的请求。 + /// + public class ChannelsECLogisticsPhoneNumberGetRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置运单号。 + /// + [Newtonsoft.Json.JsonProperty("waybill_id")] + [System.Text.Json.Serialization.JsonPropertyName("waybill_id")] + public string WaybillId { get; set; } = string.Empty; + + /// + /// 获取或设置虚拟号码。 + /// + [Newtonsoft.Json.JsonProperty("private_phone")] + [System.Text.Json.Serialization.JsonPropertyName("private_phone")] + public string? VirtualPhoneNumber { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.cs new file mode 100644 index 00000000..dcfbfd8b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/logistics/phonenumber/get 接口的响应。 + /// + public class ChannelsECLogisticsPhoneNumberGetResponse : WechatApiResponse + { + /// + /// 获取或设置真实号码。 + /// + [Newtonsoft.Json.JsonProperty("phone")] + [System.Text.Json.Serialization.JsonPropertyName("phone")] + public string PhoneNumber { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.cs new file mode 100644 index 00000000..084a1d34 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.cs @@ -0,0 +1,23 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/logistics/phonenumberpool/get 接口的请求。 + /// + public class ChannelsECLogisticsPhoneNumberPoolGetRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置分页每页数量。 + /// 默认值:10 + /// + [Newtonsoft.Json.JsonProperty("page_size")] + [System.Text.Json.Serialization.JsonPropertyName("page_size")] + public int Limit { get; set; } = 10; + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_key")] + [System.Text.Json.Serialization.JsonPropertyName("next_key")] + public string? Cursor { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.cs new file mode 100644 index 00000000..7d16946f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/logistics/phonenumberpool/get 接口的响应。 + /// + public class ChannelsECLogisticsPhoneNumberPoolGetResponse : WechatApiResponse + { + /// + /// 获取或设置虚拟号码列表。 + /// + [Newtonsoft.Json.JsonProperty("phonenumbers")] + [System.Text.Json.Serialization.JsonPropertyName("phonenumbers")] + public string[] VirtualPhoneNumberList { get; set; } = default!; + + /// + /// 获取或设置总数量。 + /// + [Newtonsoft.Json.JsonProperty("total_num")] + [System.Text.Json.Serialization.JsonPropertyName("total_num")] + public int TotalCount { get; set; } + + /// + /// 获取或设置是否还有更多。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + public bool HasMore { get; set; } + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_key")] + [System.Text.Json.Serialization.JsonPropertyName("next_key")] + public string? NextCursor { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.cs new file mode 100644 index 00000000..11b7bd67 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/logistics/virtualnumber/get 接口的请求。 + /// + public class ChannelsECLogisticsVirtualNumberGetRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置运单号。 + /// + [Newtonsoft.Json.JsonProperty("waybill_id")] + [System.Text.Json.Serialization.JsonPropertyName("waybill_id")] + public string WaybillId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.cs new file mode 100644 index 00000000..28c450d0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/logistics/virtualnumber/get 接口的响应。 + /// + public class ChannelsECLogisticsVirtualNumberGetResponse : WechatApiResponse + { + /// + /// 获取或设置打码的真实号码。 + /// + [Newtonsoft.Json.JsonProperty("masked_real_phone")] + [System.Text.Json.Serialization.JsonPropertyName("masked_real_phone")] + public string MaskedPhoneNumber { get; set; } = default!; + + /// + /// 获取或设置虚拟号码。 + /// + [Newtonsoft.Json.JsonProperty("main_phone")] + [System.Text.Json.Serialization.JsonPropertyName("main_phone")] + public string VirtualPhoneNumber { get; set; } = default!; + + /// + /// 获取或设置完整虚拟号码。 + /// + [Newtonsoft.Json.JsonProperty("virtual_phone")] + [System.Text.Json.Serialization.JsonPropertyName("virtual_phone")] + public string FullVirtualPhoneNumber { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.json new file mode 100644 index 00000000..0bffc9dd --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetRequest.json @@ -0,0 +1,4 @@ +{ + "waybill_id": "xxxxxx", + "private_phone": "xxxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.json new file mode 100644 index 00000000..2b143698 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberGetResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "phone": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.json new file mode 100644 index 00000000..a8bb1144 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetRequest.json @@ -0,0 +1,4 @@ +{ + "page_size": 10, + "next_key": "xxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.json new file mode 100644 index 00000000..324263ed --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsPhoneNumberPoolGetResponse.json @@ -0,0 +1,8 @@ +{ + "errcode": 0, + "errmsg": "ok", + "has_more": true, + "next_key": "xxxxx", + "total_num": 3000, + "phonenumbers": [ "xxxx", "xxxx" ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.json new file mode 100644 index 00000000..6dfc7d75 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetRequest.json @@ -0,0 +1,3 @@ +{ + "waybill_id": "xxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.json new file mode 100644 index 00000000..3aed139b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECLogistics/ChannelsECLogisticsVirtualNumberGetResponse.json @@ -0,0 +1,7 @@ +{ + "errcode": 0, + "errmsg": "ok", + "masked_real_phone": "123****8901", + "virtual_phone": "12345678901-1234", + "main_phone": "12345678901" +}