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" +}