diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/AddDeviceEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/AddDeviceEvent.cs new file mode 100644 index 00000000..b7322368 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/AddDeviceEvent.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.add_device 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class AddDeviceEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置服务商 CorpId。 + /// + [System.Xml.Serialization.XmlElement("ServiceCorpId")] + public string ServiceCorpId { get; set; } = default!; + + /// + /// 获取或设置设备型号 ID。 + /// + [System.Xml.Serialization.XmlElement("ModelId")] + public string ModelId { get; set; } = default!; + + /// + /// 获取或设置设备备注名称。 + /// + [System.Xml.Serialization.XmlElement("RemarkName")] + public string? RemarkName { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/ConnectInfoEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/ConnectInfoEvent.cs new file mode 100644 index 00000000..36681f29 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/ConnectInfoEvent.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.connect_info 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class ConnectInfoEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置服务商 CorpId。 + /// + [System.Xml.Serialization.XmlElement("ServiceCorpId")] + public string ServiceCorpId { get; set; } = default!; + + /// + /// 获取或设置设备成功连接企业微信后台时的时间戳。 + /// + [System.Xml.Serialization.XmlElement("ConnectTime")] + public long ConnectTimestamp { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DeleteDeviceEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DeleteDeviceEvent.cs new file mode 100644 index 00000000..8040fbdf --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DeleteDeviceEvent.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.del_device 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class DeleteDeviceEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置服务商 CorpId。 + /// + [System.Xml.Serialization.XmlElement("ServiceCorpId")] + public string ServiceCorpId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DeviceFeatureChangeEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DeviceFeatureChangeEvent.cs new file mode 100644 index 00000000..27a68f9c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DeviceFeatureChangeEvent.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.device_feature_change 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class DeviceFeatureChangeEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置服务商 CorpId。 + /// + [System.Xml.Serialization.XmlElement("ServiceCorpId")] + public string ServiceCorpId { get; set; } = default!; + + /// + /// 获取或设置设备序列号。 + /// + [System.Xml.Serialization.XmlElement("DeviceSn")] + public string DeviceSerialNumber { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DisconnectInfoEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DisconnectInfoEvent.cs new file mode 100644 index 00000000..3a93777c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/DisconnectInfoEvent.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.disconnect_info 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class DisconnectInfoEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置服务商 CorpId。 + /// + [System.Xml.Serialization.XmlElement("ServiceCorpId")] + public string ServiceCorpId { get; set; } = default!; + + /// + /// 获取或设置设备与企业微信后台网络连接断开时的时间戳。 + /// + [System.Xml.Serialization.XmlElement("DisconnectTime")] + public long DiconnectTimestamp { get; set; } + + /// + /// 获取或设置设备连接断开原因。 + /// + [System.Xml.Serialization.XmlElement("Reason")] + public string DisconnectReason { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/ErrorReportEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/ErrorReportEvent.cs new file mode 100644 index 00000000..c8339c81 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/ErrorReportEvent.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.error_report 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class ErrorReportEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置设备上报的错误码。 + /// + [System.Xml.Serialization.XmlElement("ErrCode")] + public int ErrorCode { get; set; } + + /// + /// 获取或设置设备上报的错误信息。 + /// + [System.Xml.Serialization.XmlElement("ErrMsg")] + public string? ErrorMessage { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/FetchLogFinishEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/FetchLogFinishEvent.cs new file mode 100644 index 00000000..840f5532 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/FetchLogFinishEvent.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.fetch_log_finish 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class FetchLogFinishEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置服务商 CorpId。 + /// + [System.Xml.Serialization.XmlElement("ServiceCorpId")] + public string ServiceCorpId { get; set; } = default!; + + /// + /// 获取或设置日志文件的 MediaId。 + /// + [System.Xml.Serialization.XmlElement("MediaId")] + public string MediaId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/RemarkDeviceNameEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/RemarkDeviceNameEvent.cs new file mode 100644 index 00000000..49de6487 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Device/RemarkDeviceNameEvent.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.remark_device_name 事件的数据。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90751 + /// + public class RemarkDeviceNameEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable + { + /// + /// 获取或设置服务商 CorpId。 + /// + [System.Xml.Serialization.XmlElement("ServiceCorpId")] + public string ServiceCorpId { get; set; } = default!; + + /// + /// 获取或设置设备备注名称。 + /// + [System.Xml.Serialization.XmlElement("RemarkName")] + public string RemarkName { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs index 1da85bc6..a608dbe0 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs @@ -193,73 +193,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } - /// - /// 异步调用 [GET] /cgi-bin/service/getuserinfo3rd 接口。 - /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91121 - /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91155 - /// - /// - /// - /// - /// - public static async Task ExecuteCgibinServiceUserInfo3rdAsync(this WechatWorkClient client, Models.CgibinServiceUserInfo3rdRequest 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", "getuserinfo3rd") - .SetOptions(request) - .SetQueryParam("suite_access_token", request.AccessToken) - .SetQueryParam("code", request.Code); - - return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /cgi-bin/service/getuserdetail3rd 接口。 - /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91122 - /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91156 - /// - /// - /// - /// - /// - public static async Task ExecuteCgibinServiceUserDetail3rdAsync(this WechatWorkClient client, Models.CgibinServiceUserDetail3rdRequest 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", "getuserdetail3rd") - .SetOptions(request) - .SetQueryParam("suite_access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /cgi-bin/service/get_login_info 接口。 - /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91125 - /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91158 - /// - /// - /// - /// - /// - public static async Task ExecuteCgibinServiceGetLoginInfoAsync(this WechatWorkClient client, Models.CgibinServiceGetLoginInfoRequest 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", "get_login_info") - .SetOptions(request) - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #region Register /// /// 异步调用 [POST] /cgi-bin/service/get_register_code 接口。 @@ -370,6 +303,75 @@ namespace SKIT.FlurlHttpClient.Wechat.Work } #endregion + #region OAuth + /// + /// 异步调用 [GET] /cgi-bin/service/getuserinfo3rd 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91121 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91155 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceUserInfo3rdAsync(this WechatWorkClient client, Models.CgibinServiceUserInfo3rdRequest 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", "getuserinfo3rd") + .SetOptions(request) + .SetQueryParam("suite_access_token", request.AccessToken) + .SetQueryParam("code", request.Code); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/getuserdetail3rd 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91122 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91156 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceUserDetail3rdAsync(this WechatWorkClient client, Models.CgibinServiceUserDetail3rdRequest 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", "getuserdetail3rd") + .SetOptions(request) + .SetQueryParam("suite_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/get_login_info 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/91125 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91158 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceGetLoginInfoAsync(this WechatWorkClient client, Models.CgibinServiceGetLoginInfoRequest 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", "get_login_info") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + #region Contact /// /// 异步调用 [POST] /cgi-bin/service/contact/id_translate 接口。 @@ -437,5 +439,175 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); } #endregion + + #region Device + /// + /// 异步调用 [POST] /cgi-bin/service/add_device 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90626 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceAddDeviceAsync(this WechatWorkClient client, Models.CgibinServiceAddDeviceRequest 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", "add_device") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/get_device_auth_info 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90753 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceGetDeviceAuthInfoAsync(this WechatWorkClient client, Models.CgibinServiceGetDeviceAuthInfoRequest 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", "get_device_auth_info") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/reset_secret_no 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/90753 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceResetSecretNumberAsync(this WechatWorkClient client, Models.CgibinServiceResetSecretNumberRequest 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", "reset_secret_no") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/list_device 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91346 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceListDeviceAsync(this WechatWorkClient client, Models.CgibinServiceListDeviceRequest 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", "list_device") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/fetch_device_log 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/91475 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceFetchDeviceLogAsync(this WechatWorkClient client, Models.CgibinServiceFetchDeviceLogRequest 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", "fetch_device_log") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/hardware/get_device_feature 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/92739 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinHardwareGetDeviceFeatureAsync(this WechatWorkClient client, Models.CgibinHardwareGetDeviceFeatureRequest 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", "hardware", "get_device_feature") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/del_device 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/92770 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceDeleteDeviceAsync(this WechatWorkClient client, Models.CgibinServiceDeleteDeviceRequest 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", "del_device") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/service/set_printer_support_state 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90002/90151/92782 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinServiceSetPrinterSupportStateAsync(this WechatWorkClient client, Models.CgibinServiceSetPrinterSupportStateRequest 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", "set_printer_support_state") + .SetOptions(request) + .SetQueryParam("provider_access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.cs new file mode 100644 index 00000000..45860ea0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/hardware/get_device_feature 接口的请求。 + /// + public class CgibinHardwareGetDeviceFeatureRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.cs new file mode 100644 index 00000000..84891dd8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/hardware/get_device_feature 接口的响应。 + /// + public class CgibinHardwareGetDeviceFeatureResponse : WechatWorkResponse + { + /// + /// 获取或设置设备反馈的自定义标识串。 + /// + [Newtonsoft.Json.JsonProperty("device_feature")] + [System.Text.Json.Serialization.JsonPropertyName("device_feature")] + public string DeviceFeature { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceAddDeviceRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceAddDeviceRequest.cs new file mode 100644 index 00000000..50ff8a4e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceAddDeviceRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/add_device 接口的请求。 + /// + public class CgibinServiceAddDeviceRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置设备型号 ID。 + /// + [Newtonsoft.Json.JsonProperty("model_id")] + [System.Text.Json.Serialization.JsonPropertyName("model_id")] + public string ModelId { get; set; } = string.Empty; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = string.Empty; + + /// + /// 获取或设置备注名称。 + /// + [Newtonsoft.Json.JsonProperty("remark_name")] + [System.Text.Json.Serialization.JsonPropertyName("remark_name")] + public string? RemarkName { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceAddDeviceResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceAddDeviceResponse.cs new file mode 100644 index 00000000..209b3e6f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceAddDeviceResponse.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/add_device 接口的响应。 + /// + public class CgibinServiceAddDeviceResponse : WechatWorkResponse + { + public static class Types + { + public class Device + { + /// + /// 获取或设置设备型号 ID。 + /// + [Newtonsoft.Json.JsonProperty("model_id")] + [System.Text.Json.Serialization.JsonPropertyName("model_id")] + public string ModelId { get; set; } = default!; + + /// + /// 获取或设置设备 ID。 + /// + [Newtonsoft.Json.JsonProperty("device_id")] + [System.Text.Json.Serialization.JsonPropertyName("device_id")] + public long DeviceId { get; set; } + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = default!; + + /// + /// 获取或设置设备密钥。 + /// + [Newtonsoft.Json.JsonProperty("secret_no")] + [System.Text.Json.Serialization.JsonPropertyName("secret_no")] + public string? SecretNumber { get; set; } + + /// + /// 获取或设置设备二维码数据。 + /// + [Newtonsoft.Json.JsonProperty("qr_code")] + [System.Text.Json.Serialization.JsonPropertyName("qr_code")] + public string? QrcodeData { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置设备信息。 + /// + [Newtonsoft.Json.JsonProperty("device_info")] + [System.Text.Json.Serialization.JsonPropertyName("device_info")] + public Types.Device Device { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceDeleteDeviceRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceDeleteDeviceRequest.cs new file mode 100644 index 00000000..d3bf5cef --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceDeleteDeviceRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/del_device 接口的请求。 + /// + public class CgibinServiceDeleteDeviceRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceDeleteDeviceResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceDeleteDeviceResponse.cs new file mode 100644 index 00000000..160501eb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceDeleteDeviceResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/del_device 接口的响应。 + /// + public class CgibinServiceDeleteDeviceResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceFetchDeviceLogRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceFetchDeviceLogRequest.cs new file mode 100644 index 00000000..45774db6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceFetchDeviceLogRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/fetch_device_log 接口的请求。 + /// + public class CgibinServiceFetchDeviceLogRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = string.Empty; + + /// + /// 获取或设置提示参数。 + /// + [Newtonsoft.Json.JsonProperty("hint")] + [System.Text.Json.Serialization.JsonPropertyName("hint")] + public string? Hint { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceFetchDeviceLogResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceFetchDeviceLogResponse.cs new file mode 100644 index 00000000..ccce4e1a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceFetchDeviceLogResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/fetch_device_log 接口的响应。 + /// + public class CgibinServiceFetchDeviceLogResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceGetDeviceAuthInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceGetDeviceAuthInfoRequest.cs new file mode 100644 index 00000000..6f679bab --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceGetDeviceAuthInfoRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/get_device_auth_info 接口的请求。 + /// + public class CgibinServiceGetDeviceAuthInfoRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceGetDeviceAuthInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceGetDeviceAuthInfoResponse.cs new file mode 100644 index 00000000..fba02abe --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceGetDeviceAuthInfoResponse.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/get_device_auth_info 接口的响应。 + /// + public class CgibinServiceGetDeviceAuthInfoResponse : WechatWorkResponse + { + public static class Types + { + public class AuthorizerCorp : CgibinServiceGetAuthInfoResponse.Types.DealerCorp + { + } + + public class Device + { + /// + /// 获取或设置设备型号 ID。 + /// + [Newtonsoft.Json.JsonProperty("model_id")] + [System.Text.Json.Serialization.JsonPropertyName("model_id")] + public string ModelId { get; set; } = default!; + + /// + /// 获取或设置备注名称。 + /// + [Newtonsoft.Json.JsonProperty("remark_name")] + [System.Text.Json.Serialization.JsonPropertyName("remark_name")] + public string? RemarkName { get; set; } + } + } + + /// + /// 获取或设置授权方企业信息。 + /// + [Newtonsoft.Json.JsonProperty("auth_corp_info")] + [System.Text.Json.Serialization.JsonPropertyName("auth_corp_info")] + public Types.AuthorizerCorp AuthorizerCorp { get; set; } = default!; + + /// + /// 获取或设置设备信息。 + /// + [Newtonsoft.Json.JsonProperty("device_info")] + [System.Text.Json.Serialization.JsonPropertyName("device_info")] + public Types.Device Device { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceListDeviceRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceListDeviceRequest.cs new file mode 100644 index 00000000..98fa8bbe --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceListDeviceRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/list_device 接口的请求。 + /// + public class CgibinServiceListDeviceRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置分页起始位置。 + /// + [Newtonsoft.Json.JsonProperty("offset")] + [System.Text.Json.Serialization.JsonPropertyName("offset")] + public int? Offset { 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/CgibinService/Device/CgibinServiceListDeviceResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceListDeviceResponse.cs new file mode 100644 index 00000000..914b0123 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceListDeviceResponse.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/list_device 接口的响应。 + /// + public class CgibinServiceListDeviceResponse : WechatWorkResponse + { + public static class Types + { + public class Device + { + /// + /// 获取或设置设备型号 ID。 + /// + [Newtonsoft.Json.JsonProperty("model_id")] + [System.Text.Json.Serialization.JsonPropertyName("model_id")] + public string ModelId { get; set; } = default!; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = default!; + } + } + + /// + /// 获取或设置设备列表。 + /// + [Newtonsoft.Json.JsonProperty("device_list")] + [System.Text.Json.Serialization.JsonPropertyName("device_list")] + public Types.Device[] DeviceList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceResetSecretNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceResetSecretNumberRequest.cs new file mode 100644 index 00000000..058165eb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceResetSecretNumberRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/reset_secret_no 接口的请求。 + /// + public class CgibinServiceResetSecretNumberRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceResetSecretNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceResetSecretNumberResponse.cs new file mode 100644 index 00000000..3630bc5c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceResetSecretNumberResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/reset_secret_no 接口的响应。 + /// + public class CgibinServiceResetSecretNumberResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceSetPrinterSupportStateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceSetPrinterSupportStateRequest.cs new file mode 100644 index 00000000..fe67d325 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceSetPrinterSupportStateRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/set_printer_support_state 接口的请求。 + /// + public class CgibinServiceSetPrinterSupportStateRequest : WechatWorkRequest + { + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? AccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置设备序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = string.Empty; + + /// + /// 获取或设置是否不支持打印机。 + /// + [Newtonsoft.Json.JsonProperty("not_supported_printer")] + [System.Text.Json.Serialization.JsonPropertyName("not_supported_printer")] + public bool IsUnsupportedPrinter { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceSetPrinterSupportStateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceSetPrinterSupportStateResponse.cs new file mode 100644 index 00000000..2c2068ad --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinServiceSetPrinterSupportStateResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/service/set_printer_support_state 接口的响应。 + /// + public class CgibinServiceSetPrinterSupportStateResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetLoginInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceGetLoginInfoRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetLoginInfoRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceGetLoginInfoRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetLoginInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceGetLoginInfoResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceGetLoginInfoResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceGetLoginInfoResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserDetail3rdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserDetail3rdRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserDetail3rdRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserDetail3rdRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserDetail3rdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserDetail3rdResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserDetail3rdResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserDetail3rdResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserInfo3rdRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserInfo3rdRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserInfo3rdResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/CgibinServiceUserInfo3rdResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/OAuth/CgibinServiceUserInfo3rdResponse.cs