diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniProgramExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniProgramExtensions.cs index 8a8b9b6e..38d5b36b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniProgramExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniProgramExtensions.cs @@ -30,5 +30,27 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + /// + /// 异步调用 [GET] /cgi-bin/miniprogram/jscode2session 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90136/91507 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinMiniProgramJsCode2SessionAsync(this WechatWorkClient client, Models.CgibinMiniProgramJsCode2SessionRequest 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", "miniprogram", "jscode2session") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("js_code", request.JsCode) + .SetQueryParam("grant_type", request.GrantType); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs index 27ad30a0..fdeb2738 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs @@ -582,5 +582,30 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion + + #region MiniProgram + /// + /// 异步调用 [GET] /cgi-bin/service/miniprogram/jscode2session 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90152/92468 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90152/92468 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceMiniProgramJsCode2SessionAsync(this WechatWorkClient client, Models.CgibinServiceMiniProgramJsCode2SessionRequest 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", "service", "miniprogram", "jscode2session") + .SetQueryParam("suite_access_token", request.AccessToken) + .SetQueryParam("js_code", request.JsCode) + .SetQueryParam("grant_type", request.GrantType); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniProgram/CgibinMiniProgramJsCode2SessionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniProgram/CgibinMiniProgramJsCode2SessionRequest.cs new file mode 100644 index 00000000..b9a4482c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniProgram/CgibinMiniProgramJsCode2SessionRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/miniprogram/jscode2session 接口的请求。 + /// + public class CgibinMiniProgramJsCode2SessionRequest : WechatWorkRequest + { + /// + /// (使用默认值即可,无需修改) + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string GrantType { get; set; } = "authorization_code"; + + /// + /// 获取或设置登录时获取的 Code。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string JsCode { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniProgram/CgibinMiniProgramJsCode2SessionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniProgram/CgibinMiniProgramJsCode2SessionResponse.cs new file mode 100644 index 00000000..5f5b3f2a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniProgram/CgibinMiniProgramJsCode2SessionResponse.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/miniprogram/jscode2session 接口的响应。 + /// + public class CgibinMiniProgramJsCode2SessionResponse : WechatWorkResponse + { + /// + /// 获取或设置用户所属企业 Corpid。 + /// + [Newtonsoft.Json.JsonProperty("corpid")] + [System.Text.Json.Serialization.JsonPropertyName("corpid")] + public string CorpId { get; set; } = default!; + + /// + /// 获取或设置用户所在企业内的成员账号。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string UserId { get; set; } = default!; + + /// + /// 获取或设置用户所在企业内的会话密钥。 + /// + [Newtonsoft.Json.JsonProperty("session_key")] + [System.Text.Json.Serialization.JsonPropertyName("session_key")] + public string SessionKey { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/MiniProgram/CgibinServiceMiniProgramJsCode2SessionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/MiniProgram/CgibinServiceMiniProgramJsCode2SessionRequest.cs new file mode 100644 index 00000000..e4172b9e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/MiniProgram/CgibinServiceMiniProgramJsCode2SessionRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/service/miniprogram/jscode2session 接口的请求。 + /// + public class CgibinServiceMiniProgramJsCode2SessionRequest : WechatWorkRequest + { + /// + /// (使用默认值即可,无需修改) + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string GrantType { get; set; } = "authorization_code"; + + /// + /// 获取或设置登录时获取的 Code。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string JsCode { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/MiniProgram/CgibinServiceMiniProgramJsCode2SessionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/MiniProgram/CgibinServiceMiniProgramJsCode2SessionResponse.cs new file mode 100644 index 00000000..7fc73c46 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/MiniProgram/CgibinServiceMiniProgramJsCode2SessionResponse.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/service/miniprogram/jscode2session 接口的响应。 + /// + public class CgibinServiceMiniProgramJsCode2SessionResponse : WechatWorkResponse + { + /// + /// 获取或设置用户所属企业 Corpid。 + /// + [Newtonsoft.Json.JsonProperty("corpid")] + [System.Text.Json.Serialization.JsonPropertyName("corpid")] + public string CorpId { get; set; } = default!; + + /// + /// 获取或设置用户所在企业内的成员账号。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string UserId { get; set; } = default!; + + /// + /// 获取或设置用户所在企业内的会话密钥。 + /// + [Newtonsoft.Json.JsonProperty("session_key")] + [System.Text.Json.Serialization.JsonPropertyName("session_key")] + public string SessionKey { get; set; } = default!; + + /// + /// 获取或设置第三方成员唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("open_userid")] + [System.Text.Json.Serialization.JsonPropertyName("open_userid")] + public string OpenUserId { get; set; } = default!; + } +}