feat(work): 新增获取设备打卡数据相关接口

This commit is contained in:
Fu Diwei 2021-09-30 18:16:14 +08:00
parent 7d2f818392
commit 687bdc6f50
10 changed files with 167 additions and 22 deletions

View File

@ -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
{
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/hardware/get_device_feature 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90002/90151/92739 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinHardwareGetDeviceFeatureResponse> 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<Models.CgibinHardwareGetDeviceFeatureResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/hardware/get_hardware_checkin_data 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94126 </para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90001/90143/95176 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinHardwareGetHardwareCheckinDataResponse> 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<Models.CgibinHardwareGetHardwareCheckinDataResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -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<Models.CgibinServiceFetchDeviceLogResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/hardware/get_device_feature 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90002/90151/92739 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinHardwareGetDeviceFeatureResponse> 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<Models.CgibinHardwareGetDeviceFeatureResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/service/del_device 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90002/90151/92770 </para>

View File

@ -0,0 +1,38 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/hardware/get_hardware_checkin_data 接口的请求。</para>
/// </summary>
public class CgibinHardwareGetHardwareCheckinDataRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置过滤类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("filter_type")]
[System.Text.Json.Serialization.JsonPropertyName("filter_type")]
public int? FilterType { get; set; }
/// <summary>
/// 获取或设置开始时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("starttime")]
[System.Text.Json.Serialization.JsonPropertyName("starttime")]
public long StartTimestamp { get; set; }
/// <summary>
/// 获取或设置结束时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("endtime")]
[System.Text.Json.Serialization.JsonPropertyName("endtime")]
public long EndTimestamp { get; set; }
/// <summary>
/// 获取或设置成员账号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("useridlist")]
[System.Text.Json.Serialization.JsonPropertyName("useridlist")]
public IList<string> UserIdList { get; set; } = new List<string>();
}
}

View File

@ -0,0 +1,49 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/hardware/get_hardware_checkin_data 接口的响应。</para>
/// </summary>
public class CgibinHardwareGetHardwareCheckinDataResponse : WechatWorkResponse
{
public static class Types
{
public class CheckinData
{
/// <summary>
/// 获取或设置成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("userid")]
[System.Text.Json.Serialization.JsonPropertyName("userid")]
public string UserId { get; set; } = default!;
/// <summary>
/// 获取或设置打卡时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("checkin_time")]
[System.Text.Json.Serialization.JsonPropertyName("checkin_time")]
public long CheckinTimestamp { get; set; }
/// <summary>
/// 获取或设置打卡设备的序列号。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_sn")]
[System.Text.Json.Serialization.JsonPropertyName("device_sn")]
public string DeviceSerialNumber { get; set; } = default!;
/// <summary>
/// 获取或设置打卡设备的名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_name")]
[System.Text.Json.Serialization.JsonPropertyName("device_name")]
public string DeviceName { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置打卡数据列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("checkindata")]
[System.Text.Json.Serialization.JsonPropertyName("checkindata")]
public Types.CheckinData[] CheckinDataList { get; set; } = default!;
}
}

View File

@ -0,0 +1,9 @@
{
"filter_type": 1,
"starttime": 1492617600,
"endtime": 1492790400,
"useridlist": [
"james",
"paul"
]
}

View File

@ -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门店"
}
]
}