diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs index 446d80e2..47253ced 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs @@ -289,6 +289,47 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + /// + /// 异步调用 [POST] /cgi-bin/kf/customer/batchget 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/95159 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/95149 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinKfCustomerBatchGetAsync(this WechatWorkClient client, Models.CgibinKfCustomerBatchGetRequest 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, "cgi-bin", "kf", "customer", "batchget") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /cgi-bin/kf/get_corp_qualification 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/95153 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinKfGetCorpQualificationAsync(this WechatWorkClient client, Models.CgibinKfGetCorpQualificationRequest 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, "cgi-bin", "kf", "get_corp_qualification") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } #endregion /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/CgibinKfGetCorpQualificationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/CgibinKfGetCorpQualificationRequest.cs new file mode 100644 index 00000000..bf3a324d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/CgibinKfGetCorpQualificationRequest.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/kf/get_corp_qualification 接口的请求。 + /// + public class CgibinKfGetCorpQualificationRequest : WechatWorkRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/CgibinKfGetCorpQualificationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/CgibinKfGetCorpQualificationResponse.cs new file mode 100644 index 00000000..9a1a3cc4 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/CgibinKfGetCorpQualificationResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/kf/get_corp_qualification 接口的响应。 + /// + public class CgibinKfGetCorpQualificationResponse : WechatWorkResponse + { + /// + /// 获取或设置是否已绑定视频号。 + /// + [Newtonsoft.Json.JsonProperty("wechat_channels_binding")] + [System.Text.Json.Serialization.JsonPropertyName("wechat_channels_binding")] + public bool IsWechatChannelsBound { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerBatchGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerBatchGetRequest.cs new file mode 100644 index 00000000..1ca48e27 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerBatchGetRequest.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/customer/batchget 接口的请求。 + /// + public class CgibinKfCustomerBatchGetRequest : WechatWorkRequest + { + /// + /// 获取或设置外部联系人账号列表。 + /// + [Newtonsoft.Json.JsonProperty("external_userid_list")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid_list")] + public IList ExternalUserIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerBatchGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerBatchGetResponse.cs new file mode 100644 index 00000000..f4efb51c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerBatchGetResponse.cs @@ -0,0 +1,63 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/customer/batchget 接口的响应。 + /// + public class CgibinKfCustomerBatchGetResponse : WechatWorkResponse + { + public static class Types + { + public class Customer + { + /// + /// 获取或设置外部联系人账号。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string ExternalUserId { get; set; } = default!; + + /// + /// 获取或设置昵称。 + /// + [Newtonsoft.Json.JsonProperty("nickname")] + [System.Text.Json.Serialization.JsonPropertyName("nickname")] + public string Nickname { get; set; } = default!; + + /// + /// 获取或设置头像 URL。 + /// + [Newtonsoft.Json.JsonProperty("avatar")] + [System.Text.Json.Serialization.JsonPropertyName("avatar")] + public string AvatarUrl { get; set; } = default!; + + /// + /// 获取或设置性别。 + /// + [Newtonsoft.Json.JsonProperty("gender")] + [System.Text.Json.Serialization.JsonPropertyName("gender")] + public int Gender { get; set; } + + /// + /// 获取或设置用户 UnionId。 + /// + [Newtonsoft.Json.JsonProperty("unionid")] + [System.Text.Json.Serialization.JsonPropertyName("unionid")] + public string? UnionId { get; set; } + } + } + + /// + /// 获取或设置客户列表。 + /// + [Newtonsoft.Json.JsonProperty("customer_list")] + [System.Text.Json.Serialization.JsonPropertyName("customer_list")] + public Types.Customer[] CustomerLsit { get; set; } = default!; + + /// + /// 获取或设置无效的外部联系人账号列表。 + /// + [Newtonsoft.Json.JsonProperty("invalid_external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("invalid_external_userid")] + public string[] InvalidExternalUserIdList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceResponse.cs diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/CgibinKfGetCorpQualificationRequest.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigRequest.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/CgibinKfGetCorpQualificationRequest.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/CgibinKfGetCorpQualificationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/CgibinKfGetCorpQualificationResponse.json new file mode 100644 index 00000000..302f0b4d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/CgibinKfGetCorpQualificationResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "wechat_channels_binding": true +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerBatchGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerBatchGetRequest.json new file mode 100644 index 00000000..7c815d5f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerBatchGetRequest.json @@ -0,0 +1,6 @@ +{ + "external_userid_list": [ + "wmxxxxxxxxxxxxxxxxxxxxxx", + "zhangsan" + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerBatchGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerBatchGetResponse.json new file mode 100644 index 00000000..718aa6b4 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerBatchGetResponse.json @@ -0,0 +1,16 @@ +{ + "errcode": 0, + "errmsg": "ok", + "customer_list": [ + { + "external_userid": "wmxxxxxxxxxxxxxxxxxxxxxx", + "nickname": "张三", + "avatar": "http://xxxxx", + "gender": 1, + "unionid": "oxasdaosaosdasdasdasd" + } + ], + "invalid_external_userid": [ + "zhangsan" + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceRequest.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceRequest.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceRequest.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerCancelUpgradeServiceResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerCancelUpgradeServiceResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerGetUpgradeServiceConfigResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerGetUpgradeServiceConfigResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceRequest.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceRequest.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceRequest.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/CgibinKfCustomerUpgradeServiceResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Customer/UpgradeService/CgibinKfCustomerUpgradeServiceResponse.json