From 69d426e56443dbbe4c3b78d0b449ce4539f19b79 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Sat, 2 Dec 2023 17:17:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(work):=20=E6=96=B0=E5=A2=9E=E4=BA=8C?= =?UTF-8?q?=E6=AC=A1=E9=AA=8C=E8=AF=81=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atWorkClientExecuteCgibinAuthExtensions.cs | 22 ++++ ...atWorkClientExecuteCgibinUserExtensions.cs | 104 +++++++++++------- .../TAF/CgibinAuthGetTAFInfoRequest.cs | 15 +++ .../TAF/CgibinAuthGetTAFInfoResponse.cs | 22 ++++ .../Auth/CgibinUserTAFSuccessRequest.cs | 22 ++++ .../Auth/CgibinUserTAFSuccessResponse.cs | 9 ++ .../TAF/CgibinAuthGetTAFInfoRequest.json | 3 + .../TAF/CgibinAuthGetTAFInfoResponse.json | 6 + .../Auth/CgibinUserTAFSuccessRequest.json | 4 + 9 files changed, 165 insertions(+), 42 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinUser/Auth/CgibinUserTAFSuccessRequest.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinAuthExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinAuthExtensions.cs index 7407041f..08d0db49 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinAuthExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinAuthExtensions.cs @@ -50,5 +50,27 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + #region TAF + /// + /// 异步调用 [POST] /cgi-bin/auth/get_tfa_info 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/99499 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinAuthGetTAFInfoAsync(this WechatWorkClient client, Models.CgibinAuthGetTAFInfoRequest 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", "auth", "get_tfa_info") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinUserExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinUserExtensions.cs index 51daeacd..23bf9bb2 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinUserExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinUserExtensions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -281,6 +281,47 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + /// + /// 异步调用 [GET] /cgi-bin/user/list_selected_ticket_user 接口。 + /// REF: https://work.weixin.qq.com/api/doc/90001/90143/94894 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinUserListSelectedTicketUserAsync(this WechatWorkClient client, Models.CgibinUserListSelectedTicketUserRequest 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", "user", "list_selected_ticket_user") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("selected_ticket", request.SelectedTicket); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/user/list_id 接口。 + /// REF: https://developer.work.weixin.qq.com/document/40856 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinUserListIdAsync(this WechatWorkClient client, Models.CgibinUserListIdRequest 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", "user", "list_id") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #region Auth /// /// 异步调用 [GET] /cgi-bin/user/authsucc 接口。 @@ -305,6 +346,26 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + /// + /// 异步调用 [POST] /cgi-bin/user/tfa_succ 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/99500 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinUserTAFSuccessAsync(this WechatWorkClient client, Models.CgibinUserTAFSuccessRequest 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", "user", "tfa_succ") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + /// /// 异步调用 [GET] /cgi-bin/user/list_member_auth 接口。 /// REF: https://developer.work.weixin.qq.com/document/path/94513 @@ -352,46 +413,5 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion - - /// - /// 异步调用 [GET] /cgi-bin/user/list_selected_ticket_user 接口。 - /// REF: https://work.weixin.qq.com/api/doc/90001/90143/94894 - /// - /// - /// - /// - /// - public static async Task ExecuteCgibinUserListSelectedTicketUserAsync(this WechatWorkClient client, Models.CgibinUserListSelectedTicketUserRequest 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", "user", "list_selected_ticket_user") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("selected_ticket", request.SelectedTicket); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /cgi-bin/user/list_id 接口。 - /// REF: https://developer.work.weixin.qq.com/document/40856 - /// - /// - /// - /// - /// - public static async Task ExecuteCgibinUserListIdAsync(this WechatWorkClient client, Models.CgibinUserListIdRequest 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", "user", "list_id") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.cs new file mode 100644 index 00000000..36cf1999 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/auth/get_tfa_info 接口的请求。 + /// + public class CgibinAuthGetTAFInfoRequest : WechatWorkRequest + { + /// + /// 获取或设置用户二次验证 Code。 + /// + [Newtonsoft.Json.JsonProperty("code")] + [System.Text.Json.Serialization.JsonPropertyName("code")] + public string Code { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.cs new file mode 100644 index 00000000..00c61eae --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/auth/get_tfa_info 接口的响应。 + /// + public class CgibinAuthGetTAFInfoResponse : WechatWorkResponse + { + /// + /// 获取或设置成员 UserId。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string UserId { get; set; } = default!; + + /// + /// 获取或设置二次验证授权码。 + /// + [Newtonsoft.Json.JsonProperty("tfa_code")] + [System.Text.Json.Serialization.JsonPropertyName("tfa_code")] + public string TFACode { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessRequest.cs new file mode 100644 index 00000000..0846a047 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/user/tfa_succ 接口的请求。 + /// + public class CgibinUserTAFSuccessRequest : WechatWorkRequest + { + /// + /// 获取或设置成员账号。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置二次验证授权码。 + /// + [Newtonsoft.Json.JsonProperty("tfa_code")] + [System.Text.Json.Serialization.JsonPropertyName("tfa_code")] + public string TFACode { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessResponse.cs new file mode 100644 index 00000000..5ac2cab5 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinUser/Auth/CgibinUserTAFSuccessResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/user/tfa_succ 接口的响应。 + /// + public class CgibinUserTAFSuccessResponse : WechatWorkResponse + { + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.json new file mode 100644 index 00000000..39def3d3 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoRequest.json @@ -0,0 +1,3 @@ +{ + "code": "CODE" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.json new file mode 100644 index 00000000..95f66ed4 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAuth/TAF/CgibinAuthGetTAFInfoResponse.json @@ -0,0 +1,6 @@ +{ + "errcode": 0, + "errmsg": "ok", + "userid": "USERID", + "tfa_code": "TFA_CODE" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinUser/Auth/CgibinUserTAFSuccessRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinUser/Auth/CgibinUserTAFSuccessRequest.json new file mode 100644 index 00000000..ade15218 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinUser/Auth/CgibinUserTAFSuccessRequest.json @@ -0,0 +1,4 @@ +{ + "userid": "USERID", + "tfa_code": "TFA_CODE" +}