diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinHarewareExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinHarewareExtensions.cs new file mode 100644 index 00000000..f3593259 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinHarewareExtensions.cs @@ -0,0 +1,53 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work +{ + public static class WechatWorkClientExecuteCgibinHarewareExtensions + { + /// + /// 异步调用 [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(request, HttpMethod.Post, "cgi-bin", "hardware", "get_device_feature") + .SetQueryParam("provider_access_token", request.ProviderAccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/hardware/get_hardware_checkin_data 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94126 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/95176 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinHardwareGetHardwareCheckinDataAsync(this WechatWorkClient client, Models.CgibinHardwareGetHardwareCheckinDataRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "cgi-bin", "hardware", "get_hardware_checkin_data") + .SetQueryParam("access_token", request.AccessToken); + + 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 da47a48d..6011ff03 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs @@ -1,8 +1,6 @@ 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; using System.Web; @@ -522,26 +520,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work 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(request, HttpMethod.Post, "cgi-bin", "hardware", "get_device_feature") - .SetQueryParam("provider_access_token", request.ProviderAccessToken); - - 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 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetDeviceFeatureRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetDeviceFeatureRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetDeviceFeatureResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetDeviceFeatureResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetHardwareCheckinDataRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetHardwareCheckinDataRequest.cs new file mode 100644 index 00000000..4da76228 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetHardwareCheckinDataRequest.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/hardware/get_hardware_checkin_data 接口的请求。 + /// + public class CgibinHardwareGetHardwareCheckinDataRequest : WechatWorkRequest + { + /// + /// 获取或设置过滤类型。 + /// + [Newtonsoft.Json.JsonProperty("filter_type")] + [System.Text.Json.Serialization.JsonPropertyName("filter_type")] + public int? FilterType { get; set; } + + /// + /// 获取或设置开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("starttime")] + [System.Text.Json.Serialization.JsonPropertyName("starttime")] + public long StartTimestamp { get; set; } + + /// + /// 获取或设置结束时间戳。 + /// + [Newtonsoft.Json.JsonProperty("endtime")] + [System.Text.Json.Serialization.JsonPropertyName("endtime")] + public long EndTimestamp { 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/CgibinHardware/CgibinHardwareGetHardwareCheckinDataResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetHardwareCheckinDataResponse.cs new file mode 100644 index 00000000..682c127e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHardware/CgibinHardwareGetHardwareCheckinDataResponse.cs @@ -0,0 +1,49 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/hardware/get_hardware_checkin_data 接口的响应。 + /// + public class CgibinHardwareGetHardwareCheckinDataResponse : WechatWorkResponse + { + public static class Types + { + public class CheckinData + { + /// + /// 获取或设置成员账号。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string UserId { get; set; } = default!; + + /// + /// 获取或设置打卡时间戳。 + /// + [Newtonsoft.Json.JsonProperty("checkin_time")] + [System.Text.Json.Serialization.JsonPropertyName("checkin_time")] + public long CheckinTimestamp { get; set; } + + /// + /// 获取或设置打卡设备的序列号。 + /// + [Newtonsoft.Json.JsonProperty("device_sn")] + [System.Text.Json.Serialization.JsonPropertyName("device_sn")] + public string DeviceSerialNumber { get; set; } = default!; + + /// + /// 获取或设置打卡设备的名称。 + /// + [Newtonsoft.Json.JsonProperty("device_name")] + [System.Text.Json.Serialization.JsonPropertyName("device_name")] + public string DeviceName { get; set; } = default!; + } + } + + /// + /// 获取或设置打卡数据列表。 + /// + [Newtonsoft.Json.JsonProperty("checkindata")] + [System.Text.Json.Serialization.JsonPropertyName("checkindata")] + public Types.CheckinData[] CheckinDataList { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetDeviceFeatureRequest.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetDeviceFeatureRequest.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetDeviceFeatureResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetDeviceFeatureResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetHardwareCheckinDataRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetHardwareCheckinDataRequest.json new file mode 100644 index 00000000..87187eb3 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetHardwareCheckinDataRequest.json @@ -0,0 +1,9 @@ +{ + "filter_type": 1, + "starttime": 1492617600, + "endtime": 1492790400, + "useridlist": [ + "james", + "paul" + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetHardwareCheckinDataResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetHardwareCheckinDataResponse.json new file mode 100644 index 00000000..4ce54b93 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHardware/CgibinHardwareGetHardwareCheckinDataResponse.json @@ -0,0 +1,18 @@ +{ + "errcode": 0, + "errmsg": "ok", + "checkindata": [ + { + "userid": "james", + "checkin_time": 1492617610, + "device_sn": "xxxxx", + "device_name": "xxxx门店" + }, + { + "userid": "paul", + "checkin_time": 1492617620, + "device_sn": "yyyy", + "device_name": "yyyy门店" + } + ] +} \ No newline at end of file