diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs index d09d6b52..96928751 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinLicenseExtensions.cs @@ -318,6 +318,29 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } + /// + /// 异步调用 [POST] /cgi-bin/license/submit_order_job 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinLicenseSubmitOrderJobAsync(this WechatWorkClient client, Models.CgibinLicenseSubmitOrderJobRequest 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", "license", "submit_order_job") + .SetQueryParam("provider_access_token", request.ProviderAccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + /// /// 异步调用 [POST] /cgi-bin/license/list_order 接口。 /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseSubmitOrderJobRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseSubmitOrderJobRequest.cs new file mode 100644 index 00000000..3e9eb025 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseSubmitOrderJobRequest.cs @@ -0,0 +1,56 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/license/submit_order_job 接口的请求。 + /// + public class CgibinLicenseSubmitOrderJobRequest : WechatWorkRequest + { + public static class Types + { + public class AccountDuration + { + /// + /// 获取或设置购买的月数。 + /// + [Newtonsoft.Json.JsonProperty("months")] + [System.Text.Json.Serialization.JsonPropertyName("months")] + public int? Months { get; set; } + + /// + /// 获取或设置新的到期时间戳。 + /// + [Newtonsoft.Json.JsonProperty("new_expire_time")] + [System.Text.Json.Serialization.JsonPropertyName("new_expire_time")] + public long? NewExpireTimestamp { get; set; } + } + } + + /// + /// 获取或设置服务商 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string ProviderAccessToken { get; set; } = string.Empty; + + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { 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_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/CgibinLicenseSubmitOrderJobResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseSubmitOrderJobResponse.cs new file mode 100644 index 00000000..4d3fa459 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinLicense/Order/CgibinLicenseSubmitOrderJobResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/license/submit_order_job 接口的响应。 + /// + public class CgibinLicenseSubmitOrderJobResponse : WechatWorkResponse + { + /// + /// 获取或设置订单号。 + /// + [Newtonsoft.Json.JsonProperty("order_id")] + [System.Text.Json.Serialization.JsonPropertyName("order_id")] + public string OrderId { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseSubmitOrderJobRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseSubmitOrderJobRequest.json new file mode 100644 index 00000000..10ce7e21 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseSubmitOrderJobRequest.json @@ -0,0 +1,8 @@ +{ + "jobid": "wwxxx", + "buyer_userid": "xxxx", + "account_duration": { + "months": 2, + "new_expire_time":1700000000 + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseSubmitOrderJobResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseSubmitOrderJobResponse.json new file mode 100644 index 00000000..26e6d2f8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinLicense/Order/CgibinLicenseSubmitOrderJobResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "order_id": "xxxx" +}