From a397821baa338fa2750cd9c4ca32febc95d0fb44 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 7 Jun 2021 00:23:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(work):=20=E5=B0=81=E8=A3=85=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...kClientExecuteCgibinCorpGroupExtensions.cs | 4 +- ...WechatWorkClientExecuteCgibinExtensions.cs | 47 +++- ...lientExecuteCgibinExternalPayExtensions.cs | 124 ++++++++++ ...orkClientExecuteCgibinServiceExtensions.cs | 137 ++++++++++- .../WechatWorkClientParameterExtensions.cs | 77 +++++++ .../Cgibin/CgibinGetJsapiTicketRequest.cs | 12 + .../Cgibin/CgibinGetJsapiTicketResponse.cs | 25 ++ .../Models/Cgibin/CgibinGetTokenResponse.cs | 2 +- .../Models/Cgibin/CgibinTicketGetRequest.cs | 19 ++ .../Models/Cgibin/CgibinTicketGetResponse.cs | 12 + .../CgibinAppChat/CgibinAppChatGetResponse.cs | 2 +- .../CgibinCorpGetOpenApprovalDataResponse.cs | 1 + .../CgibinCorpGroupCropGetTokenResponse.cs | 2 +- ...binCorpGroupCropListAppShareInfoRequest.cs | 2 +- .../CgibinExternalContactGetResponse.cs | 2 +- ...ibinExternalContactAddContactWayRequest.cs | 4 +- ...binExternalContactGetContactWayResponse.cs | 4 +- ...nExternalContactUpdateContactWayRequest.cs | 4 +- .../CgibinExternalContactAddCorpTagRequest.cs | 4 +- ...CgibinExternalContactAddCorpTagResponse.cs | 2 +- ...binExternalContactGetCorpTagListRequest.cs | 2 +- ...inExternalContactGetCorpTagListResponse.cs | 4 +- ...ibinExternalContactGroupChatGetResponse.cs | 2 +- .../CgibinExternalPayGetBillListRequest.cs | 46 ++++ .../CgibinExternalPayGetBillListResponse.cs | 218 ++++++++++++++++++ .../CgibinExternalPayAddMerchantRequest.cs | 25 ++ .../CgibinExternalPayAddMerchantResponse.cs | 12 + .../CgibinExternalPayDeleteMerchantRequest.cs | 18 ++ ...CgibinExternalPayDeleteMerchantResponse.cs | 12 + .../CgibinExternalPayGetMerchantRequest.cs | 18 ++ .../CgibinExternalPayGetMerchantResponse.cs | 66 ++++++ ...inExternalPaySetMerchantUseScopeRequest.cs | 52 +++++ ...nExternalPaySetMerchantUseScopeResponse.cs | 12 + .../CgibinOAGetApprovalDetailResponse.cs | 14 +- .../CgibinServiceBatchGetResultRequest.cs | 18 ++ .../CgibinServiceBatchGetResultResponse.cs | 58 +++++ .../CgibinServiceGetCorpTokenResponse.cs | 2 +- .../CgibinServiceGetPermanentCodeResponse.cs | 2 +- .../CgibinServiceGetPreAuthCodeResponse.cs | 2 +- .../CgibinServiceGetProviderTokenResponse.cs | 2 +- .../CgibinServiceGetSuiteTokenResponse.cs | 2 +- .../CgibinServiceUserInfo3rdResponse.cs | 2 +- .../CgibinServiceContactIdTranslateRequest.cs | 39 ++++ ...CgibinServiceContactIdTranslateResponse.cs | 18 ++ .../CgibinServiceContactSortRequest.cs | 32 +++ .../CgibinServiceContactSortResponse.cs | 18 ++ .../Media/CgibinServiceMediaUploadRequest.cs | 12 + .../Media/CgibinServiceMediaUploadResponse.cs | 12 + .../CgibinServiceGetRegisterCodeResponse.cs | 2 +- .../CgibinServiceGetRegisterInfoResponse.cs | 2 +- 50 files changed, 1172 insertions(+), 38 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalPayExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCorpGroupExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCorpGroupExtensions.cs index 53327e21..0e22fb4b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCorpGroupExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCorpGroupExtensions.cs @@ -25,8 +25,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Work if (client is null) throw new ArgumentNullException(nameof(client)); if (request is null) throw new ArgumentNullException(nameof(request)); - if (!request.AgentId.HasValue) - request.AgentId = client.AgentId; + if (!request.ParentAgentId.HasValue) + request.ParentAgentId = client.AgentId; IFlurlRequest flurlReq = client .CreateRequest(HttpMethod.Post, "cgi-bin", "corpgroup", "corp", "list_app_share_info") diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExtensions.cs index 16fc6245..c46f5924 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExtensions.cs @@ -25,7 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work if (request is null) throw new ArgumentNullException(nameof(request)); IFlurlRequest flurlReq = client - .CreateRequest(HttpMethod.Get, "cgi-bin", "token") + .CreateRequest(HttpMethod.Get, "cgi-bin", "gettoken") .SetOptions(request) .SetQueryParam("corpid", client.CorpId) .SetQueryParam("corpsecret", client.AgentSecret); @@ -75,5 +75,50 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); } + + /// + /// 异步调用 [GET] /cgi-bin/get_jsapi_ticket 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90136/90506 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90144/90539 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinGetJsapiTicketAsync(this WechatWorkClient client, Models.CgibinGetJsapiTicketRequest 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(HttpMethod.Get, "cgi-bin", "get_jsapi_ticket") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /cgi-bin/ticket/get 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90136/90506 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90144/90539 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinTicketGetAsync(this WechatWorkClient client, Models.CgibinTicketGetRequest 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(HttpMethod.Get, "cgi-bin", "ticket", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("type", request.Type); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalPayExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalPayExtensions.cs new file mode 100644 index 00000000..b6646fcd --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalPayExtensions.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work +{ + public static class WechatWorkClientExecuteCgibinExternalPayExtensions + { + #region Merchant + /// + /// 异步调用 [POST] /cgi-bin/externalpay/addmerchant 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/93666 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinExternalPayAddMerchantAsync(this WechatWorkClient client, Models.CgibinExternalPayAddMerchantRequest 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(HttpMethod.Post, "cgi-bin", "externalpay", "addmerchant") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/externalpay/getmerchant 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/93666 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinExternalPayGetMerchantAsync(this WechatWorkClient client, Models.CgibinExternalPayGetMerchantRequest 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(HttpMethod.Post, "cgi-bin", "externalpay", "getmerchant") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/externalpay/delmerchant 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/93666 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinExternalPayDeleteMerchantAsync(this WechatWorkClient client, Models.CgibinExternalPayDeleteMerchantRequest 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(HttpMethod.Post, "cgi-bin", "externalpay", "delmerchant") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/externalpay/set_mch_use_scope 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/93666 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinExternalPaySetMerchantUseScopeAsync(this WechatWorkClient client, Models.CgibinExternalPaySetMerchantUseScopeRequest 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(HttpMethod.Post, "cgi-bin", "externalpay", "set_mch_use_scope") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region Bill + /// + /// 异步调用 [POST] /cgi-bin/externalpay/get_bill_list 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/93667 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/93727 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinExternalPayGetBillListAsync(this WechatWorkClient client, Models.CgibinExternalPayGetBillListRequest 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(HttpMethod.Post, "cgi-bin", "externalpay", "get_bill_list") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs index 51c99f85..24f9602d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Net.Http; +using System.Net.Http.Headers; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -263,7 +264,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work if (request is null) throw new ArgumentNullException(nameof(request)); IFlurlRequest flurlReq = client - .CreateRequest(HttpMethod.Get, "cgi-bin", "service", "get_register_code") + .CreateRequest(HttpMethod.Post, "cgi-bin", "service", "get_register_code") .SetOptions(request) .SetQueryParam("provider_access_token", request.AccessToken); @@ -284,12 +285,144 @@ namespace SKIT.FlurlHttpClient.Wechat.Work if (request is null) throw new ArgumentNullException(nameof(request)); IFlurlRequest flurlReq = client - .CreateRequest(HttpMethod.Get, "cgi-bin", "service", "get_register_info") + .CreateRequest(HttpMethod.Post, "cgi-bin", "service", "get_register_info") .SetOptions(request) .SetQueryParam("provider_access_token", request.AccessToken); return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion + + #region Media + /// + /// 异步调用 [POST] /cgi-bin/service/media/upload 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91883 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceMediaUploadAsync(this WechatWorkClient client, Models.CgibinServiceMediaUploadRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + if (string.IsNullOrEmpty(request.FileName)) + { + string ext = ""; + if ("image".Equals(request.Type)) + ext = ".png"; + else if ("voice".Equals(request.Type)) + ext = ".mp3"; + else if ("video".Equals(request.Type)) + ext = ".mp4"; + + request.FileName = Guid.NewGuid().ToString("N").ToLower() + ext; + } + + if (string.IsNullOrEmpty(request.FileContentType)) + { + if (request.FileName!.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)) + request.FileContentType = "image/jpeg"; + else if (request.FileName!.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase)) + request.FileContentType = "image/jpeg"; + else if (request.FileName!.EndsWith(".png", StringComparison.OrdinalIgnoreCase)) + request.FileContentType = "image/png"; + else if (request.FileName!.EndsWith(".gif", StringComparison.OrdinalIgnoreCase)) + request.FileContentType = "image/gif"; + else if (request.FileName!.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase)) + request.FileContentType = "audio/mpeg"; + else if (request.FileName!.EndsWith(".amr", StringComparison.OrdinalIgnoreCase)) + request.FileContentType = "audio/amr"; + else if (request.FileName!.EndsWith(".mp4", StringComparison.OrdinalIgnoreCase)) + request.FileContentType = "video/mp4"; + else + request.FileContentType = "application/octet-stream"; + } + + string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); + using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var httpContent = new MultipartFormDataContent(boundary); + httpContent.Add(fileContent, "\"media\"", "\"" + request.FileName + "\""); + httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); + fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); + fileContent.Headers.ContentLength = request.FileBytes?.Length; + IFlurlRequest flurlReq = client + .CreateRequest(HttpMethod.Post, "cgi-bin", "service", "media", "upload") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken) + .SetQueryParam("type", request.Type); + + return await client.SendRequestAsync(flurlReq, content: httpContent, cancellationToken: cancellationToken); + } + #endregion + + #region Contact + /// + /// 异步调用 [POST] /cgi-bin/service/contact/id_translate 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91846 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceContactIdTranslateAsync(this WechatWorkClient client, Models.CgibinServiceContactIdTranslateRequest 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(HttpMethod.Post, "cgi-bin", "service", "contact", "id_translate") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/contact/sort 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/92093 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceContactSortAsync(this WechatWorkClient client, Models.CgibinServiceContactSortRequest 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(HttpMethod.Post, "cgi-bin", "service", "contact", "sort") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region Batch + /// + /// 异步调用 [GET] /cgi-bin/service/batch/getresult 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91882 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceBatchGetResultAsync(this WechatWorkClient client, Models.CgibinServiceBatchGetResultRequest 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(HttpMethod.Get, "cgi-bin", "service", "batch", "getresult") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken) + .SetQueryParam("jobid", request.JobId); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs new file mode 100644 index 00000000..37177afa --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work +{ + /// + /// 为 提供客户端调起 JS-SDK 签名的扩展方法。 + /// + public static class WechatWorkClientParameterExtensions + { + /// + /// 生成客户端 JS-SDK `wx.config` 所需的参数。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90136/90506 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90144/90539 + /// + /// + /// + /// + /// + public static IDictionary GenerateParametersForJssdkConfigRequest(this WechatWorkClient client, string jsapiTicket, string url) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (jsapiTicket is null) throw new ArgumentNullException(nameof(jsapiTicket)); + if (url is null) throw new ArgumentNullException(nameof(url)); + + string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); + string nonce = Guid.NewGuid().ToString("N"); + string sign = Security.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); + + return new ReadOnlyDictionary(new Dictionary() + { + { "appId", client.CorpId }, + { "timestamp", timestamp }, + { "nonceStr", nonce }, + { "signature", sign } + }); + } + + /// + /// 生成客户端 JS-SDK `wx.agentConfig` 所需的参数。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90136/90506 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90144/90539 + /// + /// + /// + /// + /// + public static IDictionary GenerateParametersForJssdkAgentConfigRequest(this WechatWorkClient client, string jsapiTicket, string url) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (jsapiTicket is null) throw new ArgumentNullException(nameof(jsapiTicket)); + if (url is null) throw new ArgumentNullException(nameof(url)); + + string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); + string nonce = Guid.NewGuid().ToString("N"); + string sign = Security.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); + + return new ReadOnlyDictionary(new Dictionary() + { + { "corpid", client.CorpId }, + { "agentid", client.AgentId?.ToString() ?? string.Empty }, + { "timestamp", timestamp }, + { "nonceStr", nonce }, + { "signature", sign } + }); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketRequest.cs new file mode 100644 index 00000000..09e8c6ab --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketRequest.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/get_jsapi_ticket 接口的请求。 + /// + public class CgibinGetJsapiTicketRequest : WechatWorkRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketResponse.cs new file mode 100644 index 00000000..269e69b6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetJsapiTicketResponse.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/get_jsapi_ticket 接口的响应。 + /// + public class CgibinGetJsapiTicketResponse : WechatWorkResponse + { + /// + /// 获取或设置票据。 + /// + [Newtonsoft.Json.JsonProperty("ticket")] + [System.Text.Json.Serialization.JsonPropertyName("ticket")] + public string Ticket { get; set; } = default!; + + /// + /// 获取或设置票据有效期(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("expires_in")] + [System.Text.Json.Serialization.JsonPropertyName("expires_in")] + public int ExpiresIn { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetTokenResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetTokenResponse.cs index 93d990bd..570f91e7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetTokenResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinGetTokenResponse.cs @@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string AccessToken { get; set; } = default!; /// - /// 获取或设置凭证有效时间(单位:秒)。 + /// 获取或设置凭证有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetRequest.cs new file mode 100644 index 00000000..b7d4157d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetRequest.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/ticket/get 接口的请求。 + /// + public class CgibinTicketGetRequest : CgibinGetJsapiTicketRequest + { + /// + /// 获取或设置票据类型。 + /// 默认值:agent_config + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string Type { get; set; } = "agent_config"; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetResponse.cs new file mode 100644 index 00000000..6fafc97b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/Cgibin/CgibinTicketGetResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/ticket/get 接口的响应。 + /// + public class CgibinTicketGetResponse : CgibinGetJsapiTicketResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAppChat/CgibinAppChatGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAppChat/CgibinAppChatGetResponse.cs index 2721290a..4332e070 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAppChat/CgibinAppChatGetResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAppChat/CgibinAppChatGetResponse.cs @@ -38,7 +38,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("userlist")] [System.Text.Json.Serialization.JsonPropertyName("userlist")] - public IList MemberUserIdList { get; set; } = default!; + public string[] MemberUserIdList { get; set; } = default!; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorp/CgibinCorpGetOpenApprovalDataResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorp/CgibinCorpGetOpenApprovalDataResponse.cs index f5b1adb5..e9596932 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorp/CgibinCorpGetOpenApprovalDataResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorp/CgibinCorpGetOpenApprovalDataResponse.cs @@ -173,6 +173,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("ThirdNo")] [System.Text.Json.Serialization.JsonPropertyName("ThirdNo")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedStringConverter))] public string ThirdPartyApprovalNumber { get; set; } = default!; /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropGetTokenResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropGetTokenResponse.cs index 59046168..0e97575a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropGetTokenResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropGetTokenResponse.cs @@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string AccessToken { get; set; } = default!; /// - /// 获取或设置下级企业 AccessToken 有效时间(单位:秒)。 + /// 获取或设置下级企业 AccessToken 有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropListAppShareInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropListAppShareInfoRequest.cs index 35a8e626..d44ff62c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropListAppShareInfoRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCorpGroup/CgibinCorpGroupCropListAppShareInfoRequest.cs @@ -13,6 +13,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("agentid")] [System.Text.Json.Serialization.JsonPropertyName("agentid")] - public int? AgentId { get; set; } + public int? ParentAgentId { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CgibinExternalContactGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CgibinExternalContactGetResponse.cs index 41cd7df6..8f6bb637 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CgibinExternalContactGetResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CgibinExternalContactGetResponse.cs @@ -169,7 +169,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("group_name")] [System.Text.Json.Serialization.JsonPropertyName("group_name")] - public string? GroupName { get; set; } + public string? TagGroupName { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactAddContactWayRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactAddContactWayRequest.cs index c6a461f1..72a5d73c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactAddContactWayRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactAddContactWayRequest.cs @@ -191,14 +191,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public bool? IsTemp { get; set; } /// - /// 获取或设置临时会话二维码有效时间(单位:秒)。 + /// 获取或设置临时会话二维码有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] public int? TempQrcodeExpiresIn { get; set; } /// - /// 获取或设置临时会话有效时间有效时间(单位:秒)。 + /// 获取或设置临时会话有效时间有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("chat_expires_in")] [System.Text.Json.Serialization.JsonPropertyName("chat_expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactGetContactWayResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactGetContactWayResponse.cs index 139371d3..6f5ab543 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactGetContactWayResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactGetContactWayResponse.cs @@ -209,14 +209,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public bool IsTemp { get; set; } = default!; /// - /// 获取或设置临时会话二维码有效时间(单位:秒)。 + /// 获取或设置临时会话二维码有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] public int? TempQrcodeExpiresIn { get; set; } /// - /// 获取或设置临时会话有效时间有效时间(单位:秒)。 + /// 获取或设置临时会话有效时间有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("chat_expires_in")] [System.Text.Json.Serialization.JsonPropertyName("chat_expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactUpdateContactWayRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactUpdateContactWayRequest.cs index 18f7d404..2183e725 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactUpdateContactWayRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/ContactWay/CgibinExternalContactUpdateContactWayRequest.cs @@ -72,14 +72,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public bool? IsTemp { get; set; } /// - /// 获取或设置临时会话二维码有效时间(单位:秒)。 + /// 获取或设置临时会话二维码有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] public int? TempQrcodeExpiresIn { get; set; } /// - /// 获取或设置临时会话有效时间有效时间(单位:秒)。 + /// 获取或设置临时会话有效时间有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("chat_expires_in")] [System.Text.Json.Serialization.JsonPropertyName("chat_expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagRequest.cs index 6f0a2d4a..8e4a170b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagRequest.cs @@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("name")] [System.Text.Json.Serialization.JsonPropertyName("name")] - public string Name { get; set; } = default!; + public string Name { get; set; } = string.Empty; /// /// 获取或设置次序值。 @@ -33,7 +33,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("group_id")] [System.Text.Json.Serialization.JsonPropertyName("group_id")] - public string? GroupId { get; set; } + public string? TagGroupId { get; set; } /// /// 获取或设置企业标签分组名称。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagResponse.cs index b12b59b1..8c217d0d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactAddCorpTagResponse.cs @@ -20,6 +20,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("tag_group")] [System.Text.Json.Serialization.JsonPropertyName("tag_group")] - public Types.TagGroup Group { get; set; } = default!; + public Types.TagGroup TagGroup { get; set; } = default!; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListRequest.cs index a550c16b..dddc4abe 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListRequest.cs @@ -20,6 +20,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("group_id")] [System.Text.Json.Serialization.JsonPropertyName("group_id")] - public IList? GroupIdList { get; set; } + public IList? TagGroupIdList { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListResponse.cs index c5a46d4d..ff2cdc92 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/CorpTag/CgibinExternalContactGetCorpTagListResponse.cs @@ -58,7 +58,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("group_id")] [System.Text.Json.Serialization.JsonPropertyName("group_id")] - public string GroupId { get; set; } = default!; + public string TagGroupId { get; set; } = default!; /// /// 获取或设置企业标签分组名称。 @@ -102,6 +102,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("tag_group")] [System.Text.Json.Serialization.JsonPropertyName("tag_group")] - public Types.TagGroup[] GroupList { get; set; } = default!; + public Types.TagGroup[] TagGroupList { get; set; } = default!; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupChat/CgibinExternalContactGroupChatGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupChat/CgibinExternalContactGroupChatGetResponse.cs index c27aca58..cd8c1e49 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupChat/CgibinExternalContactGroupChatGetResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupChat/CgibinExternalContactGroupChatGetResponse.cs @@ -58,7 +58,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public Types.Invitor? Invitor { get; set; } /// - /// 获取或设置入群场景。 + /// 获取或设置入群场景值。 /// [Newtonsoft.Json.JsonProperty("join_scene")] [System.Text.Json.Serialization.JsonPropertyName("join_scene")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListRequest.cs new file mode 100644 index 00000000..4dafa4cf --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/get_bill_list 接口的请求。 + /// + public class CgibinExternalPayGetBillListRequest : WechatWorkRequest + { + /// + /// 获取或设置指定收款记录开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("begin_time")] + [System.Text.Json.Serialization.JsonPropertyName("begin_time")] + public long BeginTimestamp { get; set; } + + /// + /// 获取或设置指定收款记录结束时间戳。 + /// + [Newtonsoft.Json.JsonProperty("end_time")] + [System.Text.Json.Serialization.JsonPropertyName("end_time")] + public long EndTimestamp { get; set; } + + /// + /// 获取或设置指定收款成员账号。 + /// + [Newtonsoft.Json.JsonProperty("payee_userid")] + [System.Text.Json.Serialization.JsonPropertyName("payee_userid")] + public string? PayeeUserId { get; set; } + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListResponse.cs new file mode 100644 index 00000000..a6c4801b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Bill/CgibinExternalPayGetBillListResponse.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/get_bill_list 接口的响应。 + /// + public class CgibinExternalPayGetBillListResponse : WechatWorkResponse + { + public static class Types + { + public class Bill + { + public static class Types + { + public class Commodity + { + /// + /// 获取或设置商品描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string Description { get; set; } = default!; + + /// + /// 获取或设置商品数量。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public int? Count { get; set; } + } + + public class Refund + { + /// + /// 获取或设置商户退款单号。 + /// + [Newtonsoft.Json.JsonProperty("out_refund_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_refund_no")] + public string OutRefundNumber { get; set; } = default!; + + /// + /// 获取或设置退款发起人成员账号。 + /// + [Newtonsoft.Json.JsonProperty("refund_userid")] + [System.Text.Json.Serialization.JsonPropertyName("refund_userid")] + public string RefundUserId { get; set; } = default!; + + /// + /// 获取或设置退款备注。 + /// + [Newtonsoft.Json.JsonProperty("refund_comment")] + [System.Text.Json.Serialization.JsonPropertyName("refund_comment")] + public string RefundComment { get; set; } = default!; + + /// + /// 获取或设置退款发起时间戳。 + /// + [Newtonsoft.Json.JsonProperty("refund_reqtime")] + [System.Text.Json.Serialization.JsonPropertyName("refund_reqtime")] + public long RefundRequestTimestamp { get; set; } + + /// + /// 获取或设置退款状态。 + /// + [Newtonsoft.Json.JsonProperty("refund_status")] + [System.Text.Json.Serialization.JsonPropertyName("refund_status")] + public int RefundStatus { get; set; } + + /// + /// 获取或设置退款金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("refund_fee")] + [System.Text.Json.Serialization.JsonPropertyName("refund_fee")] + public int RefundFee { get; set; } + } + + public class Contact + { + /// + /// 获取或设置姓名。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// 获取或设置电话号码。 + /// + [Newtonsoft.Json.JsonProperty("phone")] + [System.Text.Json.Serialization.JsonPropertyName("phone")] + public string? PhoneNumber { get; set; } + + /// + /// 获取或设置地址。 + /// + [Newtonsoft.Json.JsonProperty("address")] + [System.Text.Json.Serialization.JsonPropertyName("address")] + public string? Address { get; set; } + } + } + + /// + /// 获取或设置微信支付商户号。 + /// + [Newtonsoft.Json.JsonProperty("mch_id")] + [System.Text.Json.Serialization.JsonPropertyName("mch_id")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置商户单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string OutTradeNumber { get; set; } = default!; + + /// + /// 获取或设置交易单号。 + /// + [Newtonsoft.Json.JsonProperty("transaction_id")] + [System.Text.Json.Serialization.JsonPropertyName("transaction_id")] + public string TransactionId { get; set; } = default!; + + /// + /// 获取或设置交易状态。 + /// + [Newtonsoft.Json.JsonProperty("trade_state")] + [System.Text.Json.Serialization.JsonPropertyName("trade_state")] + public int TradeState { get; set; } + + /// + /// 获取或设置付款人外部联系人账号。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string PayerExternalUserId { get; set; } = default!; + + /// + /// 获取或设置收款人成员账号。 + /// + [Newtonsoft.Json.JsonProperty("payee_userid")] + [System.Text.Json.Serialization.JsonPropertyName("payee_userid")] + public string PayeeUserId { get; set; } = default!; + + /// + /// 获取或设置总金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_fee")] + [System.Text.Json.Serialization.JsonPropertyName("total_fee")] + public int TotalFee { get; set; } + + /// + /// 获取或设置已退款金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_refund_fee")] + [System.Text.Json.Serialization.JsonPropertyName("total_refund_fee")] + public int RefundFee { get; set; } + + /// + /// 获取或设置收款方式。 + /// + [Newtonsoft.Json.JsonProperty("payment_type")] + [System.Text.Json.Serialization.JsonPropertyName("payment_type")] + public int PaymentType { get; set; } + + /// + /// 获取或设置交易时间戳。 + /// + [Newtonsoft.Json.JsonProperty("pay_time")] + [System.Text.Json.Serialization.JsonPropertyName("pay_time")] + public long PayTimestamp { get; set; } + + /// + /// 获取或设置备注。 + /// + [Newtonsoft.Json.JsonProperty("remark")] + [System.Text.Json.Serialization.JsonPropertyName("remark")] + public string Remark { get; set; } = default!; + + /// + /// 获取或设置联系人信息。 + /// + [Newtonsoft.Json.JsonProperty("payer_info")] + [System.Text.Json.Serialization.JsonPropertyName("payer_info")] + public Types.Contact? Contact { get; set; } + + /// + /// 获取或设置商品列表。 + /// + [Newtonsoft.Json.JsonProperty("commodity_list")] + [System.Text.Json.Serialization.JsonPropertyName("commodity_list")] + public Types.Commodity[]? CommodityList { get; set; } + + /// + /// 获取或设置退款列表。 + /// + [Newtonsoft.Json.JsonProperty("refund_list")] + [System.Text.Json.Serialization.JsonPropertyName("refund_list")] + public Types.Refund[]? RefundList { get; set; } + } + } + + /// + /// 获取或设置交易单列表。 + /// + [Newtonsoft.Json.JsonProperty("bill_list")] + [System.Text.Json.Serialization.JsonPropertyName("bill_list")] + public Types.Bill[] BillList { get; set; } = default!; + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantRequest.cs new file mode 100644 index 00000000..af66f0f1 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/addmerchant 接口的请求。 + /// + public class CgibinExternalPayAddMerchantRequest : WechatWorkRequest + { + /// + /// 获取或设置微信支付商户号。 + /// + [Newtonsoft.Json.JsonProperty("mch_id")] + [System.Text.Json.Serialization.JsonPropertyName("mch_id")] + public string MerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置微信支付商户号全称。 + /// + [Newtonsoft.Json.JsonProperty("merchant_name")] + [System.Text.Json.Serialization.JsonPropertyName("merchant_name")] + public string MerchantName { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantResponse.cs new file mode 100644 index 00000000..35570ab9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayAddMerchantResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/addmerchant 接口的响应。 + /// + public class CgibinExternalPayAddMerchantResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantRequest.cs new file mode 100644 index 00000000..d9bdb2ed --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/delmerchant 接口的请求。 + /// + public class CgibinExternalPayDeleteMerchantRequest : WechatWorkRequest + { + /// + /// 获取或设置微信支付商户号。 + /// + [Newtonsoft.Json.JsonProperty("mch_id")] + [System.Text.Json.Serialization.JsonPropertyName("mch_id")] + public string MerchantId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantResponse.cs new file mode 100644 index 00000000..715639f9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayDeleteMerchantResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/delmerchant 接口的响应。 + /// + public class CgibinExternalPayDeleteMerchantResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantRequest.cs new file mode 100644 index 00000000..4294d845 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/getmerchant 接口的请求。 + /// + public class CgibinExternalPayGetMerchantRequest : WechatWorkRequest + { + /// + /// 获取或设置微信支付商户号。 + /// + [Newtonsoft.Json.JsonProperty("mch_id")] + [System.Text.Json.Serialization.JsonPropertyName("mch_id")] + public string MerchantId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantResponse.cs new file mode 100644 index 00000000..fc98d986 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPayGetMerchantResponse.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/getmerchant 接口的响应。 + /// + public class CgibinExternalPayGetMerchantResponse : WechatWorkResponse + { + public static class Types + { + public class UseScope + { + /// + /// 获取或设置成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("user")] + [System.Text.Json.Serialization.JsonPropertyName("user")] + public string[]? UserIdList { get; set; } + + /// + /// 获取或设置部门 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("partyid")] + [System.Text.Json.Serialization.JsonPropertyName("partyid")] + public int[]? DepartmentIdList { get; set; } + + /// + /// 获取或设置标签 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("tagid")] + [System.Text.Json.Serialization.JsonPropertyName("tagid")] + public int[]? TagIdList { get; set; } + } + } + + /// + /// 获取或设置绑定状态。 + /// + [Newtonsoft.Json.JsonProperty("bind_status")] + [System.Text.Json.Serialization.JsonPropertyName("bind_status")] + public int BindStatus { get; set; } + + /// + /// 获取或设置微信支付商户号。 + /// + [Newtonsoft.Json.JsonProperty("mch_id")] + [System.Text.Json.Serialization.JsonPropertyName("mch_id")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置微信支付商户号全称。 + /// + [Newtonsoft.Json.JsonProperty("merchant_name")] + [System.Text.Json.Serialization.JsonPropertyName("merchant_name")] + public string MerchantName { get; set; } = default!; + + /// + /// 获取或设置使用范围信息。 + /// + [Newtonsoft.Json.JsonProperty("allow_use_scope")] + [System.Text.Json.Serialization.JsonPropertyName("allow_use_scope")] + public Types.UseScope? UseScope { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeRequest.cs new file mode 100644 index 00000000..a6e96533 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeRequest.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/set_mch_use_scope 接口的请求。 + /// + public class CgibinExternalPaySetMerchantUseScopeRequest : WechatWorkRequest + { + public static class Types + { + public class UseScope + { + /// + /// 获取或设置成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("user")] + [System.Text.Json.Serialization.JsonPropertyName("user")] + public IList? UserIdList { get; set; } + + /// + /// 获取或设置部门 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("partyid")] + [System.Text.Json.Serialization.JsonPropertyName("partyid")] + public IList? DepartmentIdList { get; set; } + + /// + /// 获取或设置标签 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("tagid")] + [System.Text.Json.Serialization.JsonPropertyName("tagid")] + public IList? TagIdList { get; set; } + } + } + + /// + /// 获取或设置微信支付商户号。 + /// + [Newtonsoft.Json.JsonProperty("mch_id")] + [System.Text.Json.Serialization.JsonPropertyName("mch_id")] + public string MerchantId { get; set; } = string.Empty; + + /// + /// 获取或设置使用范围信息。 + /// + [Newtonsoft.Json.JsonProperty("allow_use_scope")] + [System.Text.Json.Serialization.JsonPropertyName("allow_use_scope")] + public Types.UseScope UseScope { get; set; } = new Types.UseScope(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeResponse.cs new file mode 100644 index 00000000..a241ac78 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalPay/Merchant/CgibinExternalPaySetMerchantUseScopeResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/externalpay/set_mch_use_scope 接口的响应。 + /// + public class CgibinExternalPaySetMerchantUseScopeResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinOA/Approval/CgibinOAGetApprovalDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinOA/Approval/CgibinOAGetApprovalDetailResponse.cs index 40f2ec63..4ebbe88b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinOA/Approval/CgibinOAGetApprovalDetailResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinOA/Approval/CgibinOAGetApprovalDetailResponse.cs @@ -174,28 +174,28 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("members")] [System.Text.Json.Serialization.JsonPropertyName("members")] - public IList? ContactMembers { get; set; } + public ContactControlValueForUser[]? ContactMembers { get; set; } /// /// 获取或设置 Contact 控件部门值。 /// [Newtonsoft.Json.JsonProperty("departments")] [System.Text.Json.Serialization.JsonPropertyName("departments")] - public IList? ContactDepartments { get; set; } + public ContactControlValueForDepartment[]? ContactDepartments { get; set; } /// /// 获取或设置 File 控件值。 /// [Newtonsoft.Json.JsonProperty("files")] [System.Text.Json.Serialization.JsonPropertyName("files")] - public IList? Files { get; set; } + public FileControlValue[]? Files { get; set; } /// /// 获取或设置 Table 控件值。 /// [Newtonsoft.Json.JsonProperty("children")] [System.Text.Json.Serialization.JsonPropertyName("children")] - public IList? TableChildren { get; set; } + public TableControlValue[]? TableChildren { get; set; } /// /// 获取或设置 Attendance 控件值。 @@ -223,7 +223,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("related_approval")] [System.Text.Json.Serialization.JsonPropertyName("related_approval")] - public IList? RelatedApprovals { get; set; } + public RelatedApprovalControlValue[]? RelatedApprovals { get; set; } /// /// 获取或设置 Formula 控件值。 @@ -753,14 +753,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models /// [Newtonsoft.Json.JsonProperty("sp_record")] [System.Text.Json.Serialization.JsonPropertyName("sp_record")] - public IList RecordList { get; set; } = default!; + public Types.Record[] RecordList { get; set; } = default!; /// /// 获取或设置评论列表。 /// [Newtonsoft.Json.JsonProperty("comments")] [System.Text.Json.Serialization.JsonPropertyName("comments")] - public IList CommentList { get; set; } = default!; + public Types.Comment[] CommentList { get; set; } = default!; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultRequest.cs new file mode 100644 index 00000000..2426e047 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/service/batch/getresult 接口的请求。 + /// + public class CgibinServiceBatchGetResultRequest : WechatWorkRequest + { + /// + /// 获取或设置异步任务 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string JobId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultResponse.cs new file mode 100644 index 00000000..e54bf7bd --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Batch/CgibinServiceBatchGetResultResponse.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/service/batch/getresult 接口的响应。 + /// + public class CgibinServiceBatchGetResultResponse : WechatWorkResponse + { + public static class Types + { + public class Result + { + public static class Types + { + public class ContactIdTranslateResult + { + /// + /// 获取或设置 URL。 + /// + [Newtonsoft.Json.JsonProperty("url")] + [System.Text.Json.Serialization.JsonPropertyName("url")] + public string Url { get; set; } = default!; + } + } + + /// + /// 获取或设置通讯录 ID 转译任务结果。 + /// + [Newtonsoft.Json.JsonProperty("contact_id_translate")] + [System.Text.Json.Serialization.JsonPropertyName("contact_id_translate")] + public Types.ContactIdTranslateResult? ContactIdTranslateResult { get; set; } + } + } + + /// + /// 获取或设置任务类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string Type { get; set; } = default!; + + /// + /// 获取或设置任务状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + + /// + /// 获取或设置处理结果。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public Types.Result Result { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetCorpTokenResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetCorpTokenResponse.cs index 7624b613..8a1fe1b2 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetCorpTokenResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetCorpTokenResponse.cs @@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string AccessToken { get; set; } = default!; /// - /// 获取或设置授权方凭证有效时间(单位:秒)。 + /// 获取或设置授权方凭证有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPermanentCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPermanentCodeResponse.cs index 46faa8e2..2b4bf7af 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPermanentCodeResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPermanentCodeResponse.cs @@ -99,7 +99,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string AccessToken { get; set; } = default!; /// - /// 获取或设置授权方凭证有效时间(单位:秒)。 + /// 获取或设置授权方凭证有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPreAuthCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPreAuthCodeResponse.cs index 8727b9b4..1bc42545 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPreAuthCodeResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetPreAuthCodeResponse.cs @@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string PreAuthCode { get; set; } = default!; /// - /// 获取或设置预授权码有效时间(单位:秒)。 + /// 获取或设置预授权码有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetProviderTokenResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetProviderTokenResponse.cs index 666c1496..3cf9c0c8 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetProviderTokenResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetProviderTokenResponse.cs @@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string ProviderAccessToken { get; set; } = default!; /// - /// 获取或设置服务商凭证有效时间(单位:秒)。 + /// 获取或设置服务商凭证有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetSuiteTokenResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetSuiteTokenResponse.cs index f5510013..70c62ae0 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetSuiteTokenResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetSuiteTokenResponse.cs @@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string SuiteAccessToken { get; set; } = default!; /// - /// 获取或设置第三方应用凭证有效时间(单位:秒)。 + /// 获取或设置第三方应用凭证有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdResponse.cs index 18fc636a..e7b8f142 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdResponse.cs @@ -51,7 +51,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string? UserTicket { get; set; } /// - /// 获取或设置成员票据有效时间(单位:秒)。 + /// 获取或设置成员票据有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateRequest.cs new file mode 100644 index 00000000..73e8a272 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/contact/id_translate 接口的请求。 + /// + public class CgibinServiceContactIdTranslateRequest : WechatWorkRequest + { + /// + /// 获取或设置授权方 CorpId。 + /// + [Newtonsoft.Json.JsonProperty("auth_corpid")] + [System.Text.Json.Serialization.JsonPropertyName("auth_corpid")] + public string AuthorizerCorpId { get; set; } = string.Empty; + + /// + /// 获取或设置需要转译的文件 MediaId 列表。 + /// + [Newtonsoft.Json.JsonProperty("media_id_list")] + [System.Text.Json.Serialization.JsonPropertyName("media_id_list")] + public IList MediaIdList { get; set; } = new List(); + + /// + /// 获取或设置转译后打包的文件名(不带后缀名)。 + /// + [Newtonsoft.Json.JsonProperty("output_file_name")] + [System.Text.Json.Serialization.JsonPropertyName("output_file_name")] + public string? OutputFileName { get; set; } + + /// + /// 获取或设置转译后打包的文件格式。 + /// + [Newtonsoft.Json.JsonProperty("output_file_format")] + [System.Text.Json.Serialization.JsonPropertyName("output_file_format")] + public string? OutputFileFormat { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateResponse.cs new file mode 100644 index 00000000..77918159 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactIdTranslateResponse.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/contact/id_translate 接口的响应。 + /// + public class CgibinServiceContactIdTranslateResponse : WechatWorkResponse + { + /// + /// 获取或设置异步任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortRequest.cs new file mode 100644 index 00000000..387da431 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/contact/sort 接口的请求。 + /// + public class CgibinServiceContactSortRequest : WechatWorkRequest + { + /// + /// 获取或设置授权方 CorpId。 + /// + [Newtonsoft.Json.JsonProperty("auth_corpid")] + [System.Text.Json.Serialization.JsonPropertyName("auth_corpid")] + public string AuthorizerCorpId { get; set; } = string.Empty; + + /// + /// 获取或设置排序方式。 + /// + [Newtonsoft.Json.JsonProperty("sort_type")] + [System.Text.Json.Serialization.JsonPropertyName("sort_type")] + public int SortType { get; set; } + + /// + /// 获取或设置要排序的成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("useridlist")] + [System.Text.Json.Serialization.JsonPropertyName("useridlist")] + public IList UserIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortResponse.cs new file mode 100644 index 00000000..a49efabd --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Contact/CgibinServiceContactSortResponse.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/contact/sort 接口的响应。 + /// + public class CgibinServiceContactSortResponse : WechatWorkResponse + { + /// + /// 获取或设置排序后的成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("useridlist")] + [System.Text.Json.Serialization.JsonPropertyName("useridlist")] + public string[] UserIdList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadRequest.cs new file mode 100644 index 00000000..f353a677 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadRequest.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/media/upload 接口的请求。 + /// + public class CgibinServiceMediaUploadRequest : CgibinMediaUploadRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadResponse.cs new file mode 100644 index 00000000..6ac1d716 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Media/CgibinServiceMediaUploadResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/media/upload 接口的响应。 + /// + public class CgibinServiceMediaUploadResponse : CgibinMediaUploadResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterCodeResponse.cs index f37a2c8e..c6581e9a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterCodeResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterCodeResponse.cs @@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string RegisterCode { get; set; } = default!; /// - /// 获取或设置注册码有效时间(单位:秒)。 + /// 获取或设置注册码有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterInfoResponse.cs index fae44113..cad70a0b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterInfoResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Register/CgibinServiceGetRegisterInfoResponse.cs @@ -20,7 +20,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models public string AccessToken { get; set; } = default!; /// - /// 获取或设置通讯录迁移凭证有效时间(单位:秒)。 + /// 获取或设置通讯录迁移凭证有效期(单位:秒)。 /// [Newtonsoft.Json.JsonProperty("expires_in")] [System.Text.Json.Serialization.JsonPropertyName("expires_in")]