diff --git a/README.md b/README.md
index a4d8b09b..0eedc596 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,7 @@
### 4. 所有 API 都经过了测试吗?
-由于微信的产品业务线众多,很多业务也需要前置条件才能继续,截至目前本项目已封装超过 2800 余个 API,虽然同时也编写了若干单元测试用例,但与数量庞大的 API 相比仍远远不够。
+由于微信的产品业务线众多,很多业务也需要前置条件才能继续,截至目前本项目已封装超过 2900 余个 API,虽然同时也编写了若干单元测试用例,但与数量庞大的 API 相比仍远远不够。
本项目严格按照微信官方提供的开发文档进行封装,并利用自动化工具保证封装结果的正确。但微信的文档本身质量比较低,所以存在错误在所难免。
diff --git a/docs/WechatWork/Basic_ModelDefinition.md b/docs/WechatWork/Basic_ModelDefinition.md
index 4edfa9f7..2d7d5829 100644
--- a/docs/WechatWork/Basic_ModelDefinition.md
+++ b/docs/WechatWork/Basic_ModelDefinition.md
@@ -29,24 +29,26 @@
| | 微信 API | 开发模式 | 备注 |
| :-: | :---------------------------: | :-------------------------------: | :------------------------------: |
| √ | 开发接入 | 企业 & 第三方 & 服务商 & 智慧硬件 | |
+| √ | 基础:应用授权 | 第三方 & 服务商 | |
+| √ | 基础:接口调用许可 | 第三方 & 服务商 | |
| √ | 基础:账号 ID | 企业 & 第三方 & 服务商 | |
| √ | 基础:通讯录管理 | 企业 & 第三方 & 服务商 | |
| √ | 基础:身份验证 | 企业 & 第三方 & 服务商 | |
| √ | 基础:企业互联 | 企业 & 第三方 & 服务商 | |
| √ | 基础:上下游 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:安全管理 | 企业 | |
| √ | 基础:消息推送 | 企业 & 第三方 & 服务商 | |
| √ | 基础:应用管理 | 企业 & 第三方 & 服务商 | |
| √ | 基础:素材管理 | 企业 & 第三方 & 服务商 | |
| √ | 基础:电子发票 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:应用授权 | 第三方 & 服务商 | |
-| √ | 基础:接口调用许可 | 第三方 & 服务商 | |
| √ | 基础:收银台 | 第三方 & 服务商 | |
| √ | 基础:推广二维码 | 第三方 & 服务商 | |
| √ | 连接微信:客户联系 | 企业 & 第三方 & 服务商 | |
| √ | 连接微信:微信客服 | 企业 & 第三方 & 服务商 | |
| × | 连接微信:企业支付 | 企业 & 第三方 & 服务商 | 异构协议,请使用 `TenpayV2` 模块 |
| √ | 连接微信:小程序接入对外收款 | 企业 | |
-| √ | 连接微信:会话内容存档 | 企业 | |
+| √ | 连接微信:会话内容存档 | 企业 & 第三方 | |
+| √ | 连接微信:数据与智能专区 | 第三方 & 服务商 | |
| √ | 连接微信:家校沟通 | 企业 & 第三方 & 服务商 | |
| √ | 连接微信:家校应用 | 企业 & 第三方 & 服务商 | |
| √ | 连接微信:政民沟通 | 企业 & 第三方 & 服务商 | |
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/SpecProgram/ProgramNotifyEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/SpecProgram/ProgramNotifyEvent.cs
new file mode 100644
index 00000000..94d0e7fb
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/SpecProgram/ProgramNotifyEvent.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Events
+{
+ ///
+ /// 表示 EVENT.program_notify 事件的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class ProgramNotifyEvent : WechatWorkEvent
+ {
+ ///
+ /// 获取或设置通知 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("NotifyId")]
+ [System.Text.Json.Serialization.JsonPropertyName("NotifyId")]
+ [System.Xml.Serialization.XmlElement("NotifyId")]
+ public string NotifyId { get; set; } = default!;
+
+ ///
+ /// 获取或设置通知场景值。
+ ///
+ [Newtonsoft.Json.JsonProperty("NotifyScene")]
+ [System.Text.Json.Serialization.JsonPropertyName("NotifyScene")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ [System.Xml.Serialization.XmlElement("NotifyScene")]
+ public int NotifyScene { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinAdvancedApiExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinAdvancedApiExtensions.cs
new file mode 100644
index 00000000..957e3dc2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinAdvancedApiExtensions.cs
@@ -0,0 +1,150 @@
+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 WechatWorkClientExecuteCgibinAdvancedApiExtensions
+ {
+ ///
+ /// 异步调用 [POST] /cgi-bin/advanced_api/create_order 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinAdvancedApiCreateOrderAsync(this WechatWorkClient client, Models.CgibinAdvancedApiCreateOrderRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_api", "create_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/advanced_api/cancel_order 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinAdvancedApiCancelOrderAsync(this WechatWorkClient client, Models.CgibinAdvancedApiCancelOrderRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_api", "cancel_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/advanced_api/submit_pay 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinAdvancedApiSubmitPayAsync(this WechatWorkClient client, Models.CgibinAdvancedApiSubmitPayRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_api", "submit_pay")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/advanced_api/list_order 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinAdvancedApiListOrderAsync(this WechatWorkClient client, Models.CgibinAdvancedApiListOrderRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_api", "list_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/advanced_api/get_order 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinAdvancedApiGetOrderAsync(this WechatWorkClient client, Models.CgibinAdvancedApiGetOrderRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_api", "get_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/advanced_api/get_corp_buy_info 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinAdvancedApiGetCorpBuyInfoAsync(this WechatWorkClient client, Models.CgibinAdvancedApiGetCorpBuyInfoRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_api", "get_corp_buy_info")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs
index e58c86d8..70b6fd17 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs
@@ -320,6 +320,77 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
}
#endregion
+ #region DebugMode
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/open_debug_mode 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataOpenDebugModeAsync(this WechatWorkClient client, Models.CgibinChatDataOpenDebugModeRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "open_debug_mode")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/close_debug_mode 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataCloseDebugModeAsync(this WechatWorkClient client, Models.CgibinChatDataCloseDebugModeRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "close_debug_mode")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/check_debug_mode 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataCheckDebugModeAsync(this WechatWorkClient client, Models.CgibinChatDataCheckDebugModeRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "check_debug_mode")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+ #endregion
+
#region Export
///
/// 异步调用 [POST] /cgi-bin/chatdata/export/create_job 接口。
@@ -556,6 +627,77 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
}
#endregion
+ #region Program
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/sync_call_program 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataSyncCallProgramAsync(this WechatWorkClient client, Models.CgibinChatDataSyncCallProgramRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "sync_call_program")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/async_program_task 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataAsyncProgramTaskAsync(this WechatWorkClient client, Models.CgibinChatDataAsyncProgramTaskRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "async_program_task")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/async_program_result 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataAsyncProgramResultAsync(this WechatWorkClient client, Models.CgibinChatDataAsyncProgramResultRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "async_program_result")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+ #endregion
+
#region Search
///
/// 异步调用 [POST] /cgi-bin/chatdata/search_chat 接口。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderRequest.cs
new file mode 100644
index 00000000..9bb96d8f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/cancel_order 接口的请求。
+ ///
+ public class CgibinAdvancedApiCancelOrderRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string OrderId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderResponse.cs
new file mode 100644
index 00000000..2d1a2031
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/cancel_order 接口的响应。
+ ///
+ public class CgibinAdvancedApiCancelOrderResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderRequest.cs
new file mode 100644
index 00000000..d0d494ba
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderRequest.cs
@@ -0,0 +1,119 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/create_order 接口的请求。
+ ///
+ public class CgibinAdvancedApiCreateOrderRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class ChatArchiveApi
+ {
+ public static class Types
+ {
+ public class EditionInfo
+ {
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("begin_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("begin_time")]
+ public long BeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置目标版本。
+ ///
+ [Newtonsoft.Json.JsonProperty("edition")]
+ [System.Text.Json.Serialization.JsonPropertyName("edition")]
+ public int TargetEdition { get; set; }
+
+ ///
+ /// 获取或设置目标版本生效信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("target_edition_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("target_edition_info")]
+ public Types.EditionInfo? TargetEditionInfo { get; set; }
+
+ ///
+ /// 获取或设置旧版本。
+ ///
+ [Newtonsoft.Json.JsonProperty("old_edition")]
+ [System.Text.Json.Serialization.JsonPropertyName("old_edition")]
+ public int? OldEdition { get; set; }
+
+ ///
+ /// 获取或设置旧版本生效信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("old_edition_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("old_edition_info")]
+ public Types.EditionInfo? OldEditionInfo { get; set; }
+
+ ///
+ /// 获取或设置购买数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_count")]
+ public int? PurchaseCount { get; set; }
+
+ ///
+ /// 获取或设置生效时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("take_effect_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("take_effect_time")]
+ public long? TakeEffectTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置购买的高级接口类型。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("advanced_api_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("advanced_api_type")]
+ public int AdvancedApiType { get; set; } = 1;
+
+ ///
+ /// 获取或设置客户企业 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("custom_corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("custom_corpid")]
+ public string CustomCorpId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置下单人成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("buyer_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("buyer_userid")]
+ public string BuyerUserId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_type")]
+ public int? OrderType { get; set; }
+
+ ///
+ /// 获取或设置会话内容数据接口订单相关信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("chat_archive_api")]
+ [System.Text.Json.Serialization.JsonPropertyName("chat_archive_api")]
+ public Types.ChatArchiveApi? ChatArchiveApi { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderResponse.cs
new file mode 100644
index 00000000..2c53b78a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/create_order 接口的响应。
+ ///
+ public class CgibinAdvancedApiCreateOrderResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string OrderId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoRequest.cs
new file mode 100644
index 00000000..75503b06
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoRequest.cs
@@ -0,0 +1,30 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/get_corp_buy_info 接口的请求。
+ ///
+ public class CgibinAdvancedApiGetCorpBuyInfoRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置购买的高级接口类型。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("advanced_api_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("advanced_api_type")]
+ public int AdvancedApiType { get; set; } = 1;
+
+ ///
+ /// 获取或设置客户企业 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("custom_corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("custom_corpid")]
+ public string CustomCorpId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoResponse.cs
new file mode 100644
index 00000000..28c125e0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoResponse.cs
@@ -0,0 +1,62 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/get_corp_buy_info 接口的响应。
+ ///
+ public class CgibinAdvancedApiGetCorpBuyInfoResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class ChatArchivApiBuyInfo
+ {
+ public static class Types
+ {
+ public class EditionInfo
+ {
+ ///
+ /// 获取或设置版本。
+ ///
+ [Newtonsoft.Json.JsonProperty("edition")]
+ [System.Text.Json.Serialization.JsonPropertyName("edition")]
+ public int Edition { get; set; }
+
+ ///
+ /// 获取或设置购买数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_count")]
+ public int PurchaseCount { get; set; }
+
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("begin_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("begin_time")]
+ public long BeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置已购版本列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("edition_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("edition_list")]
+ public Types.EditionInfo[] EditionList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置会话内容数据接口的购买信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("chat_archive_api_buy_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("chat_archive_api_buy_info")]
+ public Types.ChatArchivApiBuyInfo ChatArchivApiBuyInfo { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetOrderRequest.cs
new file mode 100644
index 00000000..a288a8e2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetOrderRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/get_order 接口的请求。
+ ///
+ public class CgibinAdvancedApiGetOrderRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string OrderId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetOrderResponse.cs
new file mode 100644
index 00000000..8713bbc0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiGetOrderResponse.cs
@@ -0,0 +1,132 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/get_order 接口的响应。
+ ///
+ public class CgibinAdvancedApiGetOrderResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Order
+ {
+ public static class Types
+ {
+ public class ChatArchiveApi
+ {
+ ///
+ /// 获取或设置版本。
+ ///
+ [Newtonsoft.Json.JsonProperty("edition")]
+ [System.Text.Json.Serialization.JsonPropertyName("edition")]
+ public int Edition { get; set; }
+
+ ///
+ /// 获取或设置购买数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_count")]
+ public int PurchaseCount { get; set; }
+
+ ///
+ /// 获取或设置购买天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_duration_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_duration_days")]
+ public int PurchaseDurationDays { get; set; }
+
+ ///
+ /// 获取或设置生效时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("take_effect_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("take_effect_time")]
+ public long TakeEffectTimestamp { get; set; }
+
+ ///
+ /// 获取或设置到期时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置原价(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("original_price")]
+ public int? OriginalPrice { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string OrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置购买的高级接口类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("advanced_api_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("advanced_api_type")]
+ public int AdvancedApiType { get; set; }
+
+ ///
+ /// 获取或设置客户企业 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("custom_corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("custom_corpid")]
+ public string CustomCorpId { get; set; } = default!;
+
+ ///
+ /// 获取或设置下单人成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("buyer_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("buyer_userid")]
+ public string BuyerUserId { get; set; } = default!;
+
+ ///
+ /// 获取或设置订单类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_type")]
+ public int OrderType { get; set; }
+
+ ///
+ /// 获取或设置订单状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_status")]
+ public int OrderStatus { get; set; }
+
+ ///
+ /// 获取或设置下单时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ public long CreateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置应付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("paid_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("paid_price")]
+ public int PaidPrice { get; set; }
+
+ ///
+ /// 获取或设置会话内容数据接口订单相关信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("chat_archive_api")]
+ [System.Text.Json.Serialization.JsonPropertyName("chat_archive_api")]
+ public Types.ChatArchiveApi? ChatArchiveApi { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order")]
+ [System.Text.Json.Serialization.JsonPropertyName("order")]
+ public Types.Order Order { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiListOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiListOrderRequest.cs
new file mode 100644
index 00000000..7472c86c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiListOrderRequest.cs
@@ -0,0 +1,57 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/list_order 接口的请求。
+ ///
+ public class CgibinAdvancedApiListOrderRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置客户企业 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("custom_corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("custom_corpid")]
+ public string? CustomCorpId { get; set; }
+
+ ///
+ /// 获取或设置下单时间开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("start_time")]
+ public long? StartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置下单时间结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long? EndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置购买的高级接口类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("advanced_api_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("advanced_api_type")]
+ public int? AdvancedApiType { get; set; }
+
+ ///
+ /// 获取或设置分页游标。
+ ///
+ [Newtonsoft.Json.JsonProperty("cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("cursor")]
+ public string? Cursor { 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/CgibinAdvancedApi/CgibinAdvancedApiListOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiListOrderResponse.cs
new file mode 100644
index 00000000..0c81004c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiListOrderResponse.cs
@@ -0,0 +1,65 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/list_order 接口的响应。
+ ///
+ public class CgibinAdvancedApiListOrderResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Order
+ {
+ ///
+ /// 获取或设置订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string OrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置订单类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_type")]
+ public int OrderType { get; set; }
+
+ ///
+ /// 获取或设置订单状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_status")]
+ public int OrderStatus { get; set; }
+
+ ///
+ /// 获取或设置下单时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ public long CreateTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_list")]
+ public Types.Order[] OrderList { get; set; } = default!;
+
+ ///
+ /// 获取或设置分页游标。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
+ public string? NextCursor { get; set; }
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
+ public bool HasMore { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayRequest.cs
new file mode 100644
index 00000000..dd12bcf9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/submit_pay 接口的请求。
+ ///
+ public class CgibinAdvancedApiSubmitPayRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string OrderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置支付人成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer_userid")]
+ public string PayerUserId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayResponse.cs
new file mode 100644
index 00000000..21581aed
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/advanced_api/submit_pay 接口的响应。
+ ///
+ public class CgibinAdvancedApiSubmitPayResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeRequest.cs
new file mode 100644
index 00000000..b983277c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/check_debug_mode 接口的请求。
+ ///
+ public class CgibinChatDataCheckDebugModeRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置应用关联的程序 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("program_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("program_id")]
+ public string ProgramId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeResponse.cs
new file mode 100644
index 00000000..427a5c0b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/check_debug_mode 接口的响应。
+ ///
+ public class CgibinChatDataCheckDebugModeResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置程序当前的调试模式状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("debug_mode_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("debug_mode_status")]
+ public int DebugModeStatus { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeRequest.cs
new file mode 100644
index 00000000..0410ce3a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/close_debug_mode 接口的请求。
+ ///
+ public class CgibinChatDataCloseDebugModeRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置应用关联的程序 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("program_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("program_id")]
+ public string ProgramId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeResponse.cs
new file mode 100644
index 00000000..e739eda5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/close_debug_mode 接口的响应。
+ ///
+ public class CgibinChatDataCloseDebugModeResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeRequest.cs
new file mode 100644
index 00000000..b014751d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/open_debug_mode 接口的请求。
+ ///
+ public class CgibinChatDataOpenDebugModeRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置应用关联的程序 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("program_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("program_id")]
+ public string ProgramId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置程序的调试凭证。
+ ///
+ [Newtonsoft.Json.JsonProperty("debug_token")]
+ [System.Text.Json.Serialization.JsonPropertyName("debug_token")]
+ public string DebugToken { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeResponse.cs
new file mode 100644
index 00000000..6b4c7645
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/open_debug_mode 接口的响应。
+ ///
+ public class CgibinChatDataOpenDebugModeResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramResultRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramResultRequest.cs
new file mode 100644
index 00000000..2dece1c3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramResultRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/async_program_result 接口的请求。
+ ///
+ public class CgibinChatDataAsyncProgramResultRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("jobid")]
+ [System.Text.Json.Serialization.JsonPropertyName("jobid")]
+ public string JobId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramResultResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramResultResponse.cs
new file mode 100644
index 00000000..7c97ece8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramResultResponse.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/async_program_result 接口的响应。
+ ///
+ public class CgibinChatDataAsyncProgramResultResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置专区程序的错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("response_errcode")]
+ [System.Text.Json.Serialization.JsonPropertyName("response_errcode")]
+ public int ResponseErrorCode { get; set; }
+
+ ///
+ /// 获取或设置专区程序的输出 JSON。
+ ///
+ [Newtonsoft.Json.JsonProperty("response_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("response_data")]
+ public string? ResponseDataJson { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskRequest.cs
new file mode 100644
index 00000000..676a5fce
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/async_program_task 接口的请求。
+ ///
+ public class CgibinChatDataAsyncProgramTaskRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置应用关联的程序 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("program_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("program_id")]
+ public string ProgramId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置程序关联的能力 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("ability_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("ability_id")]
+ public string AbilityId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置请求的输入 JSON。
+ ///
+ [Newtonsoft.Json.JsonProperty("request_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("request_data")]
+ public string? RequestDataJson { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskResponse.cs
new file mode 100644
index 00000000..4e04e3ca
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/async_program_task 接口的响应。
+ ///
+ public class CgibinChatDataAsyncProgramTaskResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("jobid")]
+ [System.Text.Json.Serialization.JsonPropertyName("jobid")]
+ public string JobId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataSyncCallProgramRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataSyncCallProgramRequest.cs
new file mode 100644
index 00000000..f115a80e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataSyncCallProgramRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/sync_call_program 接口的请求。
+ ///
+ public class CgibinChatDataSyncCallProgramRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置应用关联的程序 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("program_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("program_id")]
+ public string ProgramId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置程序关联的能力 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("ability_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("ability_id")]
+ public string AbilityId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置通知 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_id")]
+ public string NotifyId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置请求的输入 JSON。
+ ///
+ [Newtonsoft.Json.JsonProperty("request_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("request_data")]
+ public string? RequestDataJson { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataSyncCallProgramResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataSyncCallProgramResponse.cs
new file mode 100644
index 00000000..585a6592
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Program/CgibinChatDataSyncCallProgramResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/sync_call_program 接口的响应。
+ ///
+ public class CgibinChatDataSyncCallProgramResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置专区程序的输出 JSON。
+ ///
+ [Newtonsoft.Json.JsonProperty("response_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("response_data")]
+ public string? ResponseDataJson { get; set; }
+ }
+}
diff --git a/src/src.sln b/src/src.sln
new file mode 100644
index 00000000..6958ba5e
--- /dev/null
+++ b/src/src.sln
@@ -0,0 +1,60 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.2.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.Ads", "SKIT.FlurlHttpClient.Wechat.Ads\SKIT.FlurlHttpClient.Wechat.Ads.csproj", "{1199FEE5-D27A-23FA-2390-355051497DA8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.Api", "SKIT.FlurlHttpClient.Wechat.Api\SKIT.FlurlHttpClient.Wechat.Api.csproj", "{60E87902-3A99-5E21-375C-04DA40786B72}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.OpenAI", "SKIT.FlurlHttpClient.Wechat.OpenAI\SKIT.FlurlHttpClient.Wechat.OpenAI.csproj", "{4FD99934-3133-2E8A-276A-E08E935B2CDD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.TenpayBusiness", "SKIT.FlurlHttpClient.Wechat.TenpayBusiness\SKIT.FlurlHttpClient.Wechat.TenpayBusiness.csproj", "{74B1E0E0-5325-F373-A45F-133D20B3FEB4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.TenpayV2", "SKIT.FlurlHttpClient.Wechat.TenpayV2\SKIT.FlurlHttpClient.Wechat.TenpayV2.csproj", "{6F95E6BA-B2FD-7AC8-B8EE-6E57DF2A7A49}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.TenpayV3", "SKIT.FlurlHttpClient.Wechat.TenpayV3\SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj", "{A763CCAC-78B3-DD3D-AF3B-E1F7104C8523}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.Work", "SKIT.FlurlHttpClient.Wechat.Work\SKIT.FlurlHttpClient.Wechat.Work.csproj", "{04AE2971-1723-1774-7290-E3C1C16C005C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1199FEE5-D27A-23FA-2390-355051497DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1199FEE5-D27A-23FA-2390-355051497DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1199FEE5-D27A-23FA-2390-355051497DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1199FEE5-D27A-23FA-2390-355051497DA8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {60E87902-3A99-5E21-375C-04DA40786B72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {60E87902-3A99-5E21-375C-04DA40786B72}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {60E87902-3A99-5E21-375C-04DA40786B72}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {60E87902-3A99-5E21-375C-04DA40786B72}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4FD99934-3133-2E8A-276A-E08E935B2CDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4FD99934-3133-2E8A-276A-E08E935B2CDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4FD99934-3133-2E8A-276A-E08E935B2CDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4FD99934-3133-2E8A-276A-E08E935B2CDD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {74B1E0E0-5325-F373-A45F-133D20B3FEB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {74B1E0E0-5325-F373-A45F-133D20B3FEB4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {74B1E0E0-5325-F373-A45F-133D20B3FEB4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {74B1E0E0-5325-F373-A45F-133D20B3FEB4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6F95E6BA-B2FD-7AC8-B8EE-6E57DF2A7A49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6F95E6BA-B2FD-7AC8-B8EE-6E57DF2A7A49}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6F95E6BA-B2FD-7AC8-B8EE-6E57DF2A7A49}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6F95E6BA-B2FD-7AC8-B8EE-6E57DF2A7A49}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A763CCAC-78B3-DD3D-AF3B-E1F7104C8523}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A763CCAC-78B3-DD3D-AF3B-E1F7104C8523}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A763CCAC-78B3-DD3D-AF3B-E1F7104C8523}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A763CCAC-78B3-DD3D-AF3B-E1F7104C8523}.Release|Any CPU.Build.0 = Release|Any CPU
+ {04AE2971-1723-1774-7290-E3C1C16C005C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04AE2971-1723-1774-7290-E3C1C16C005C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04AE2971-1723-1774-7290-E3C1C16C005C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04AE2971-1723-1774-7290-E3C1C16C005C}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {BD91E3AB-01FA-4412-839E-69CC33529FB6}
+ EndGlobalSection
+EndGlobal
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/SpecProgram/ProgramNotifyEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/SpecProgram/ProgramNotifyEvent.xml
new file mode 100644
index 00000000..d8ca1cf9
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/SpecProgram/ProgramNotifyEvent.xml
@@ -0,0 +1,9 @@
+
+
+
+ 1348831860
+
+
+
+ 1
+
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderRequest.json
new file mode 100644
index 00000000..56d2320d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCancelOrderRequest.json
@@ -0,0 +1,3 @@
+{
+ "order_id": "xxxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderRequest.json
new file mode 100644
index 00000000..5a5e69e7
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderRequest.json
@@ -0,0 +1,20 @@
+{
+ "advanced_api_type": 1,
+ "custom_corpid": "wwxxx",
+ "buyer_userid": "xxxx",
+ "order_type": 1,
+ "chat_archive_api": {
+ "edition": 3,
+ "old_edition": 2,
+ "purchase_count": 100,
+ "take_effect_time": 1704038400,
+ "old_edition_info": {
+ "begin_time": 1704038000,
+ "end_time": 1704038000
+ },
+ "target_edition_info": {
+ "begin_time": 1704038000,
+ "end_time": 1704038000
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderResponse.json
new file mode 100644
index 00000000..26e6d2f8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiCreateOrderResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "order_id": "xxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoRequest.json
new file mode 100644
index 00000000..8196dc80
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoRequest.json
@@ -0,0 +1,4 @@
+{
+ "advanced_api_type": 1,
+ "custom_corpid": "xxxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoResponse.json
new file mode 100644
index 00000000..5d850079
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetCorpBuyInfoResponse.json
@@ -0,0 +1,20 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "chat_archive_api_buy_info": {
+ "edition_list": [
+ {
+ "edition": 2,
+ "purchase_count": 100,
+ "begin_time": 1726588800,
+ "end_time": 1729180800
+ },
+ {
+ "edition": 3,
+ "purchase_count": 100,
+ "begin_time": 1726588800,
+ "end_time": 1729180800
+ }
+ ]
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetOrderRequest.json
new file mode 100644
index 00000000..56d2320d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetOrderRequest.json
@@ -0,0 +1,3 @@
+{
+ "order_id": "xxxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetOrderResponse.json
new file mode 100644
index 00000000..8916713d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiGetOrderResponse.json
@@ -0,0 +1,22 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "order": {
+ "advanced_api_type": 1,
+ "order_id": "xxxxx",
+ "order_type": 1,
+ "order_status": 1,
+ "custom_corpid": "wpxxxx",
+ "create_time": 150000000,
+ "buyer_userid": "xxx",
+ "paid_price": 10000,
+ "chat_archive_api": {
+ "edition": 2,
+ "purchase_count": 100,
+ "purchase_duration_days": 90,
+ "take_effect_time": 150000000,
+ "end_time": 150000000,
+ "original_price": 10010
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiListOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiListOrderRequest.json
new file mode 100644
index 00000000..bdacd37a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiListOrderRequest.json
@@ -0,0 +1,8 @@
+{
+ "custom_corpid": "xxxxx",
+ "start_time": 1500000000,
+ "end_time": 1600000000,
+ "advanced_api_type": 1,
+ "cursor": "xxx",
+ "limit": 10
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiListOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiListOrderResponse.json
new file mode 100644
index 00000000..0137b838
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiListOrderResponse.json
@@ -0,0 +1,14 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "next_cursor": "xxx",
+ "has_more": 1,
+ "order_list": [
+ {
+ "order_id": "xxx",
+ "order_type": 1,
+ "order_status": 1,
+ "create_time": 1704038400
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayRequest.json
new file mode 100644
index 00000000..3ffd5aac
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinAdvancedApi/CgibinAdvancedApiSubmitPayRequest.json
@@ -0,0 +1,4 @@
+{
+ "payer_userid": "USERID",
+ "order_id": "ORDERID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeRequest.json
new file mode 100644
index 00000000..11b4ea73
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeRequest.json
@@ -0,0 +1,3 @@
+{
+ "program_id": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeResponse.json
new file mode 100644
index 00000000..14d70321
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCheckDebugModeResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "debug_mode_status": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeRequest.json
new file mode 100644
index 00000000..11b4ea73
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataCloseDebugModeRequest.json
@@ -0,0 +1,3 @@
+{
+ "program_id": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeRequest.json
new file mode 100644
index 00000000..005fcce3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/DebugMode/CgibinChatDataOpenDebugModeRequest.json
@@ -0,0 +1,4 @@
+{
+ "program_id": "xxx",
+ "debug_token": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramResultRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramResultRequest.json
new file mode 100644
index 00000000..ea8ec7e8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramResultRequest.json
@@ -0,0 +1,3 @@
+{
+ "jobid": "JOBID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramResultResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramResultResponse.json
new file mode 100644
index 00000000..4d475082
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramResultResponse.json
@@ -0,0 +1,6 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "response_errcode": 0,
+ "response_data": "{\"output\":\"xxx\"}"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskRequest.json
new file mode 100644
index 00000000..c6035482
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskRequest.json
@@ -0,0 +1,5 @@
+{
+ "program_id": "xxx",
+ "ability_id": "xxx",
+ "request_data": "{\"input\":\"xxx\"}"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskResponse.json
new file mode 100644
index 00000000..3ae7240d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataAsyncProgramTaskResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "jobid": "JOBID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataSyncCallProgramRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataSyncCallProgramRequest.json
new file mode 100644
index 00000000..b0d5ad7a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataSyncCallProgramRequest.json
@@ -0,0 +1,6 @@
+{
+ "program_id": "xxx",
+ "ability_id": "xxx",
+ "notify_id": "xxx",
+ "request_data": "{\"input\":\"xxx\"}"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataSyncCallProgramResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataSyncCallProgramResponse.json
new file mode 100644
index 00000000..9d5f7966
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Program/CgibinChatDataSyncCallProgramResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "response_data": "{\"output\":\"xxx\"}"
+}