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