diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseAutoActivateEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseAutoActivateEvent.cs
index a3989dc5..1a7875ec 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseAutoActivateEvent.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseAutoActivateEvent.cs
@@ -57,8 +57,8 @@
///
/// 获取或设置授权方的 CorpId。
///
- [System.Xml.Serialization.XmlElement("AuthCorpId", IsNullable = true)]
- public string? AuthorizerCorpId { get; set; }
+ [System.Xml.Serialization.XmlElement("AuthCorpId")]
+ public string AuthorizerCorpId { get; set; } = default!;
///
/// 获取或设置许可自动激活场景值。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicensePaySuccessEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicensePaySuccessEvent.cs
index 6b677e6f..ee363d2c 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicensePaySuccessEvent.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicensePaySuccessEvent.cs
@@ -15,8 +15,8 @@
///
/// 获取或设置授权方的 CorpId。
///
- [System.Xml.Serialization.XmlElement("AuthCorpId", IsNullable = true)]
- public string? AuthorizerCorpId { get; set; }
+ [System.Xml.Serialization.XmlElement("AuthCorpId")]
+ public string AuthorizerCorpId { get; set; } = default!;
///
/// 获取或设置订单号。
@@ -27,7 +27,7 @@
///
/// 获取或设置服务商内下单用户 UserId。
///
- [System.Xml.Serialization.XmlElement("BuyerUserId", IsNullable = true)]
- public string? BuyerUserId { get; set; }
+ [System.Xml.Serialization.XmlElement("BuyerUserId")]
+ public string BuyerUserId { get; set; } = default!;
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseRefundEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseRefundEvent.cs
index 86126253..d51b46be 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseRefundEvent.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/License/LicenseRefundEvent.cs
@@ -15,8 +15,8 @@
///
/// 获取或设置授权方的 CorpId。
///
- [System.Xml.Serialization.XmlElement("AuthCorpId", IsNullable = true)]
- public string? AuthorizerCorpId { get; set; }
+ [System.Xml.Serialization.XmlElement("AuthCorpId")]
+ public string AuthorizerCorpId { get; set; } = default!;
///
/// 获取或设置订单号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs
index e899dbb6..93cbbc0d 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs
@@ -9,6 +9,128 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
{
public static class WechatWorkClientExecuteCgibinLicenseExtensions
{
+ #region Order
+ ///
+ /// 异步调用 [POST] /cgi-bin/license/create_new_order 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/95644
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinLicenseCreateNewOrderAsync(this WechatWorkClient client, Models.CgibinLicenseCreateNewOrderRequest 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", "license", "create_new_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/license/create_renew_order_job 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/95646
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinLicenseCreateRenewOrderJobAsync(this WechatWorkClient client, Models.CgibinLicenseCreateRenewOrderJobRequest 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", "license", "create_renew_order_job")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/license/list_order 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/95647
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinLicenseListOrderAsync(this WechatWorkClient client, Models.CgibinLicenseListOrderRequest 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", "license", "list_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/license/get_order 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/95648
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinLicenseGetOrderAsync(this WechatWorkClient client, Models.CgibinLicenseGetOrderRequest 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", "license", "get_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/license/list_order_account 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/95649
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinLicenseListOrderAccountAsync(this WechatWorkClient client, Models.CgibinLicenseListOrderAccountRequest 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", "license", "list_order_account")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/license/cancel_order 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/96106
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinLicenseCancelOrderAsync(this WechatWorkClient client, Models.CgibinLicenseCancelOrderRequest 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", "license", "cancel_order")
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
+ }
+ #endregion
+
#region App
///
/// 异步调用 [POST] /cgi-bin/license/get_app_license_info 接口。
@@ -28,7 +150,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
IFlurlRequest flurlReq = client
.CreateRequest(request, HttpMethod.Post, "cgi-bin", "license", "get_app_license_info")
- .SetQueryParam("access_token", request.ProviderAccessToken);
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
}
@@ -50,7 +172,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
IFlurlRequest flurlReq = client
.CreateRequest(request, HttpMethod.Post, "cgi-bin", "license", "set_auto_active_status")
- .SetQueryParam("access_token", request.ProviderAccessToken);
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
}
@@ -70,7 +192,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
IFlurlRequest flurlReq = client
.CreateRequest(request, HttpMethod.Post, "cgi-bin", "license", "get_auto_active_status")
- .SetQueryParam("access_token", request.ProviderAccessToken);
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
}
@@ -91,7 +213,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
IFlurlRequest flurlReq = client
.CreateRequest(request, HttpMethod.Post, "cgi-bin", "license", "support_policy_query")
- .SetQueryParam("access_token", request.ProviderAccessToken);
+ .SetQueryParam("provider_access_token", request.ProviderAccessToken);
return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCancelOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCancelOrderRequest.cs
new file mode 100644
index 00000000..a115ce38
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCancelOrderRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/cancel_order 接口的请求。
+ ///
+ public class CgibinLicenseCancelOrderRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业 CorpId。
+ ///
+ [Newtonsoft.Json.JsonProperty("corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("corpid")]
+ public string CorpId { 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/CgibinLicense/Order/CgibinLicenseCancelOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCancelOrderResponse.cs
new file mode 100644
index 00000000..4c7ae673
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCancelOrderResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/cancel_order 接口的响应。
+ ///
+ public class CgibinLicenseCancelOrderResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateNewOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateNewOrderRequest.cs
new file mode 100644
index 00000000..a9b160bf
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateNewOrderRequest.cs
@@ -0,0 +1,80 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/create_new_order 接口的请求。
+ ///
+ public class CgibinLicenseCreateNewOrderRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class AccountCount
+ {
+ ///
+ /// 获取或设置基础帐号个数。
+ ///
+ [Newtonsoft.Json.JsonProperty("base_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("base_count")]
+ public int? BaseCount { get; set; }
+
+ ///
+ /// 获取或设置互通帐号个数。
+ ///
+ [Newtonsoft.Json.JsonProperty("external_contact_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("external_contact_count")]
+ public int? ExternalContactCount { get; set; }
+ }
+
+ public class AccountDuration
+ {
+ ///
+ /// 获取或设置购买的月数。
+ ///
+ [Newtonsoft.Json.JsonProperty("months")]
+ [System.Text.Json.Serialization.JsonPropertyName("months")]
+ public int? Months { get; set; }
+
+ ///
+ /// 获取或设置购买的天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("days")]
+ [System.Text.Json.Serialization.JsonPropertyName("days")]
+ public int? Days { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业 CorpId。
+ ///
+ [Newtonsoft.Json.JsonProperty("corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("corpid")]
+ public string CorpId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置下单人成员 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("buyer_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("buyer_userid")]
+ public string BuyerUserId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置账号个数信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_count")]
+ public Types.AccountCount AccountCount { get; set; } = new Types.AccountCount();
+
+ ///
+ /// 获取或设置账号时长信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_duration")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_duration")]
+ public Types.AccountDuration AccountDuration { get; set; } = new Types.AccountDuration();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateNewOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateNewOrderResponse.cs
new file mode 100644
index 00000000..e5530ecf
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateNewOrderResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/create_new_order 接口的响应。
+ ///
+ public class CgibinLicenseCreateNewOrderResponse : 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/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobRequest.cs
new file mode 100644
index 00000000..87799df7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobRequest.cs
@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/create_renew_order_job 接口的请求。
+ ///
+ public class CgibinLicenseCreateRenewOrderJobRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Account
+ {
+ ///
+ /// 获取或设置续期企业的成员 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置续期帐号类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业 CorpId。
+ ///
+ [Newtonsoft.Json.JsonProperty("corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("corpid")]
+ public string CorpId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("jobid")]
+ [System.Text.Json.Serialization.JsonPropertyName("jobid")]
+ public string? JobId { get; set; }
+
+ ///
+ /// 获取或设置续期的帐号列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_list")]
+ public IList AccountList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobResponse.cs
new file mode 100644
index 00000000..360581e7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobResponse.cs
@@ -0,0 +1,56 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/create_renew_order_job 接口的响应。
+ ///
+ public class CgibinLicenseCreateRenewOrderJobResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Account
+ {
+ ///
+ /// 获取或设置错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("errcode")]
+ [System.Text.Json.Serialization.JsonPropertyName("errcode")]
+ public int ErrorCode { get; set; }
+
+ ///
+ /// 获取或设置错误描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("errmsg")]
+ [System.Text.Json.Serialization.JsonPropertyName("errmsg")]
+ public string? ErrorMessage { get; set; }
+
+ ///
+ /// 获取或设置续期企业的成员 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = default!;
+
+ ///
+ /// 获取或设置续期帐号类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("jobid")]
+ [System.Text.Json.Serialization.JsonPropertyName("jobid")]
+ public string JobId { get; set; } = default!;
+
+ ///
+ /// 获取或设置无效的帐号列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_account_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_account_list")]
+ public Types.Account[] InvalidAccountList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseGetOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseGetOrderRequest.cs
new file mode 100644
index 00000000..76f665f8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseGetOrderRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/get_order 接口的请求。
+ ///
+ public class CgibinLicenseGetOrderRequest : 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/CgibinLicense/Order/CgibinLicenseGetOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseGetOrderResponse.cs
new file mode 100644
index 00000000..b63affb0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseGetOrderResponse.cs
@@ -0,0 +1,113 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/get_order 接口的响应。
+ ///
+ public class CgibinLicenseGetOrderResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Order : CgibinLicenseListOrderResponse.Types.Order
+ {
+ public static class Types
+ {
+ public class AccountCount
+ {
+ ///
+ /// 获取或设置基础帐号个数。
+ ///
+ [Newtonsoft.Json.JsonProperty("base_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("base_count")]
+ public int BaseCount { get; set; }
+
+ ///
+ /// 获取或设置互通帐号个数。
+ ///
+ [Newtonsoft.Json.JsonProperty("external_contact_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("external_contact_count")]
+ public int ExternalContactCount { get; set; }
+ }
+
+ public class AccountDuration
+ {
+ ///
+ /// 获取或设置购买的月数。
+ ///
+ [Newtonsoft.Json.JsonProperty("months")]
+ [System.Text.Json.Serialization.JsonPropertyName("months")]
+ public int? Months { get; set; }
+
+ ///
+ /// 获取或设置购买的天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("days")]
+ [System.Text.Json.Serialization.JsonPropertyName("days")]
+ public int? Days { get; set; }
+
+ ///
+ /// 获取或设置新过期时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("new_expire_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("new_expire_time")]
+ public long? NewExpireTimestamp { get; set; }
+ }
+ }
+ ///
+ /// 获取或设置订单状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_status")]
+ public int OrderStatus { get; set; }
+
+ ///
+ /// 获取或设置客户企业 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("corpid")]
+ public string CorpId { get; set; } = default!;
+
+ ///
+ /// 获取或设置订单金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("price")]
+ [System.Text.Json.Serialization.JsonPropertyName("price")]
+ public int Price { get; set; }
+
+ ///
+ /// 获取或设置账号个数信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_count")]
+ public Types.AccountCount AccountCount { get; set; } = default!;
+
+ ///
+ /// 获取或设置账号时长信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_duration")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_duration")]
+ public Types.AccountDuration AccountDuration { get; set; } = default!;
+
+ ///
+ /// 获取或设置创建时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ public long CreateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置支付时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_time")]
+ public long? PayTimestamp { 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/CgibinLicense/Order/CgibinLicenseListOrderAccountRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderAccountRequest.cs
new file mode 100644
index 00000000..1ee3582e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderAccountRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/list_order_account 接口的请求。
+ ///
+ public class CgibinLicenseListOrderAccountRequest : 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("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/CgibinLicense/Order/CgibinLicenseListOrderAccountResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderAccountResponse.cs
new file mode 100644
index 00000000..5ce13511
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderAccountResponse.cs
@@ -0,0 +1,58 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/list_order_account 接口的响应。
+ ///
+ public class CgibinLicenseListOrderAccountResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Account
+ {
+ ///
+ /// 获取或设置帐号激活码。
+ ///
+ [Newtonsoft.Json.JsonProperty("active_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("active_code")]
+ public string ActiveCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置成员的 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置帐号类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置账号列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_list")]
+ public Types.Account[] AccountList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置分页游标。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderRequest.cs
new file mode 100644
index 00000000..9b7584eb
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/list_order 接口的请求。
+ ///
+ public class CgibinLicenseListOrderRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置服务商 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProviderAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业 CorpId。
+ ///
+ [Newtonsoft.Json.JsonProperty("corpid")]
+ [System.Text.Json.Serialization.JsonPropertyName("corpid")]
+ public string CorpId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [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("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/CgibinLicense/Order/CgibinLicenseListOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderResponse.cs
new file mode 100644
index 00000000..e33b46ef
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseListOrderResponse.cs
@@ -0,0 +1,51 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/license/list_order 接口的响应。
+ ///
+ public class CgibinLicenseListOrderResponse : 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_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_list")]
+ public Types.Order[] OrderList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置分页游标。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCancelOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCancelOrderRequest.json
new file mode 100644
index 00000000..d1a3619f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCancelOrderRequest.json
@@ -0,0 +1,4 @@
+{
+ "corpid": "CORPID",
+ "order_id": "xxxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateNewOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateNewOrderRequest.json
new file mode 100644
index 00000000..235ce839
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateNewOrderRequest.json
@@ -0,0 +1,12 @@
+{
+ "corpid": "wwxxx",
+ "buyer_userid": "xxxx",
+ "account_count": {
+ "base_count": 100,
+ "external_contact_count": 100
+ },
+ "account_duration": {
+ "months": 2,
+ "days": 20
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateNewOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateNewOrderResponse.json
new file mode 100644
index 00000000..30830ff2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateNewOrderResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "order_id": "xxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobRequest.json
new file mode 100644
index 00000000..2c2ab2a7
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobRequest.json
@@ -0,0 +1,10 @@
+{
+ "corpid": "wwxxx",
+ "account_list": [
+ {
+ "userid": "userid1",
+ "type": 1
+ }
+ ],
+ "jobid": "JOBID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobResponse.json
new file mode 100644
index 00000000..6534c694
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseCreateRenewOrderJobResponse.json
@@ -0,0 +1,13 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "jobid": "xxxx",
+ "invalid_account_list": [
+ {
+ "errcode": 1,
+ "errmsg": "xxx",
+ "userid": "userid1",
+ "type": 1
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseGetOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseGetOrderRequest.json
new file mode 100644
index 00000000..5de1a4ca
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseGetOrderRequest.json
@@ -0,0 +1,3 @@
+{
+ "order_id": "xxxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseGetOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseGetOrderResponse.json
new file mode 100644
index 00000000..baa2ec1d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseGetOrderResponse.json
@@ -0,0 +1,22 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "order": {
+ "order_id": "xxxxx",
+ "order_type": 1,
+ "order_status": 1,
+ "corpid": "wpxxxx",
+ "price": 10000,
+ "account_count": {
+ "base_count": 100,
+ "external_contact_count": 100
+ },
+ "account_duration": {
+ "months": 2,
+ "days": 20,
+ "new_expire_time": 1700000000
+ },
+ "create_time": 150000000,
+ "pay_time": 1550000000
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderAccountRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderAccountRequest.json
new file mode 100644
index 00000000..470011de
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderAccountRequest.json
@@ -0,0 +1,5 @@
+{
+ "order_id": "XXXXXXXX",
+ "limit": 1000,
+ "cursor": "xxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderAccountResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderAccountResponse.json
new file mode 100644
index 00000000..eb20569a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderAccountResponse.json
@@ -0,0 +1,18 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "next_cursor": "xxxx",
+ "has_more": 1,
+ "account_list": [
+ {
+ "active_code": "code1",
+ "userid": "XXX",
+ "type": 1
+ },
+ {
+ "active_code": "code2",
+ "userid": "XXX",
+ "type": 2
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderRequest.json
new file mode 100644
index 00000000..fbf24086
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderRequest.json
@@ -0,0 +1,7 @@
+{
+ "corpid": "xxxxx",
+ "start_time": 1500000000,
+ "end_time": 1600000000,
+ "cursor": "xxx",
+ "limit": 10
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderResponse.json
new file mode 100644
index 00000000..4dee6e6c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseListOrderResponse.json
@@ -0,0 +1,12 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "next_cursor": "xxx",
+ "has_more": 1,
+ "order_list": [
+ {
+ "order_id": "xxx",
+ "order_type": 1
+ }
+ ]
+}