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"
+}