diff --git a/docs/WechatApi/Basic_ModelDefinition.md b/docs/WechatApi/Basic_ModelDefinition.md index d39195ee..399f0505 100644 --- a/docs/WechatApi/Basic_ModelDefinition.md +++ b/docs/WechatApi/Basic_ModelDefinition.md @@ -85,9 +85,10 @@ | √ | 物流助手 | 行业能力 | | | √ | 微信服务市场 | | | | √ | 生物认证 | | | -| × | 广告 | | 异构协议,需独立模块 | -| √ | 购物订单 | 商业能力 | | | √ | 交易保障 | 商业能力 | | +| √ | 购物订单 | 商业能力 | | +| √ | 微信客服 | 商业能力 | | +| × | 广告 | | 异构协议,需独立模块 | | √ | 交易组件 | 商业能力 | | | √ | 小程序联盟 | 商业能力 | | | √ | 小程序支付管理服务 | 商业能力 | | diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs index 435640e6..0e80cd5a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -305,5 +305,67 @@ namespace SKIT.FlurlHttpClient.Wechat.Api return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion + + #region Work + /// + /// 异步调用 [POST] /customservice/work/get 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/kf-work/getKfWorkBound.html + /// + /// + /// + /// + /// + public static async Task ExecuteCustomServiceWorkGetAsync(this WechatApiClient client, Models.CustomServiceWorkGetRequest 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, "customservice", "work", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /customservice/work/unbind 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/kf-work/unbindKfWork.html + /// + /// + /// + /// + /// + public static async Task ExecuteCustomServiceWorkUnbindAsync(this WechatApiClient client, Models.CustomServiceWorkUnbindRequest 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, "customservice", "work", "unbind") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /customservice/work/bind 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/kf-work/bindKfWork.html + /// + /// + /// + /// + /// + public static async Task ExecuteCustomServiceWorkBindAsync(this WechatApiClient client, Models.CustomServiceWorkBindRequest 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, "customservice", "work", "bind") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkBindRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkBindRequest.cs new file mode 100644 index 00000000..78606ea2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkBindRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /customservice/work/bind 接口的请求。 + /// + public class CustomServiceWorkBindRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置企业 ID。 + /// + [Newtonsoft.Json.JsonProperty("corpid")] + [System.Text.Json.Serialization.JsonPropertyName("corpid")] + public string CorpId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkBindResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkBindResponse.cs new file mode 100644 index 00000000..e0b62a09 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkBindResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /customservice/work/bind 接口的响应。 + /// + public class CustomServiceWorkBindResponse : WechatApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkGetRequest.cs new file mode 100644 index 00000000..fd749d46 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkGetRequest.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /customservice/work/get 接口的请求。 + /// + public class CustomServiceWorkGetRequest : WechatApiRequest, IInferable + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkGetResponse.cs new file mode 100644 index 00000000..1cd8c140 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkGetResponse.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /customservice/work/get 接口的响应。 + /// + public class CustomServiceWorkGetResponse : WechatApiResponse + { + /// + /// 获取或设置主体名称。 + /// + [Newtonsoft.Json.JsonProperty("entityName")] + [System.Text.Json.Serialization.JsonPropertyName("entityName")] + public string? EntityName { get; set; } + + /// + /// 获取或设置企业 ID。 + /// + [Newtonsoft.Json.JsonProperty("corpid")] + [System.Text.Json.Serialization.JsonPropertyName("corpid")] + public string? CorpId { get; set; } + + /// + /// 获取或设置绑定时间戳。 + /// + [Newtonsoft.Json.JsonProperty("bindTime")] + [System.Text.Json.Serialization.JsonPropertyName("bindTime")] + public long? BindTimestamp { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkUnbindRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkUnbindRequest.cs new file mode 100644 index 00000000..9b8294f5 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkUnbindRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /customservice/work/unbind 接口的请求。 + /// + public class CustomServiceWorkUnbindRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置企业 ID。 + /// + [Newtonsoft.Json.JsonProperty("corpid")] + [System.Text.Json.Serialization.JsonPropertyName("corpid")] + public string CorpId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkUnbindResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkUnbindResponse.cs new file mode 100644 index 00000000..4ff6eef0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/Work/CustomServiceWorkUnbindResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /customservice/work/unbind 接口的响应。 + /// + public class CustomServiceWorkUnbindResponse : WechatApiResponse + { + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkBindRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkBindRequest.json new file mode 100644 index 00000000..ca5625e5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkBindRequest.json @@ -0,0 +1,3 @@ +{ + "corpid": "wwee11111xxxxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkGetResponse.json new file mode 100644 index 00000000..5cafe66f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkGetResponse.json @@ -0,0 +1,6 @@ +{ + "errcode": 0, + "entityName": "XXXXX有限公司", + "corpid": "wwee11111xxxxxxx", + "bindTime": 1694611289 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkUnbindRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkUnbindRequest.json new file mode 100644 index 00000000..ca5625e5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/CustomService/Work/CustomServiceWorkUnbindRequest.json @@ -0,0 +1,3 @@ +{ + "corpid": "wwee11111xxxxxxx" +}