diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionShopExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionShopExtensions.cs new file mode 100644 index 00000000..c3652d30 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionShopExtensions.cs @@ -0,0 +1,74 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Api +{ + public static class WechatApiClientExecuteUnionShopExtensions + { + #region Open + /// + /// 异步调用 [POST] /union/shop/open/set_commission 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/custom_component/api/shop/set_commission.html + /// + /// + /// + /// + /// + public static async Task ExecuteUnionShopOpenSetCommissionAsync(this WechatApiClient client, Models.UnionShopOpenSetCommissionRequest 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, "union", "shop", "open", "set_commission") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /union/shop/open/get_commission 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/custom_component/api/shop/set_commission.html + /// + /// + /// + /// + /// + public static async Task ExecuteUnionShopOpenGetCommissionAsync(this WechatApiClient client, Models.UnionShopOpenGetCommissionRequest 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, "union", "shop", "open", "get_commission") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /union/shop/open/delete_commission 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/custom_component/api/shop/set_commission.html + /// + /// + /// + /// + /// + public static async Task ExecuteUnionShopOpenDeleteCommissionAsync(this WechatApiClient client, Models.UnionShopOpenDeleteCommissionRequest 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, "union", "shop", "open", "delete_commission") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Target/UnionPromoterTargetPlanInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Target/UnionPromoterTargetPlanInfoResponse.cs index 7b49e841..91bb9b2a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Target/UnionPromoterTargetPlanInfoResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Target/UnionPromoterTargetPlanInfoResponse.cs @@ -1,4 +1,4 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [GET] /union/promoter/target/plan_info 接口的响应。 @@ -254,7 +254,6 @@ /// [Newtonsoft.Json.JsonProperty("commissionRatio")] [System.Text.Json.Serialization.JsonPropertyName("commissionRatio")] - public int CommissionRatio { get; set; } /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenDeleteCommissionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenDeleteCommissionRequest.cs new file mode 100644 index 00000000..51a7d341 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenDeleteCommissionRequest.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/shop/open/delete_commission 接口的请求。 + /// + public class UnionShopOpenDeleteCommissionRequest : WechatApiRequest, IInferable + { + public static class Types + { + public class Product + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("productId")] + [System.Text.Json.Serialization.JsonPropertyName("productId")] + public long? ProductId { get; set; } + + /// + /// 获取或设置商家自定义商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("outProductId")] + [System.Text.Json.Serialization.JsonPropertyName("outProductId")] + public string? OutProductId { get; set; } + } + } + + /// + /// 获取或设置商品列表。 + /// + [Newtonsoft.Json.JsonProperty("key")] + [System.Text.Json.Serialization.JsonPropertyName("key")] + public IList ProductList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenDeleteCommissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenDeleteCommissionResponse.cs new file mode 100644 index 00000000..28738708 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenDeleteCommissionResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/shop/open/delete_commission 接口的响应。 + /// + public class UnionShopOpenDeleteCommissionResponse : WechatApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenGetCommissionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenGetCommissionRequest.cs new file mode 100644 index 00000000..ee805a35 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenGetCommissionRequest.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/shop/open/get_commission 接口的请求。 + /// + public class UnionShopOpenGetCommissionRequest : WechatApiRequest, IInferable + { + public static class Types + { + public class Product + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("productId")] + [System.Text.Json.Serialization.JsonPropertyName("productId")] + public long? ProductId { get; set; } + + /// + /// 获取或设置商家自定义商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("outProductId")] + [System.Text.Json.Serialization.JsonPropertyName("outProductId")] + public string? OutProductId { get; set; } + } + } + + /// + /// 获取或设置商品列表。 + /// + [Newtonsoft.Json.JsonProperty("key")] + [System.Text.Json.Serialization.JsonPropertyName("key")] + public IList ProductList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenGetCommissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenGetCommissionResponse.cs new file mode 100644 index 00000000..0142fbe0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenGetCommissionResponse.cs @@ -0,0 +1,63 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/shop/open/get_commission 接口的响应。 + /// + public class UnionShopOpenGetCommissionResponse : WechatApiResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("productId")] + [System.Text.Json.Serialization.JsonPropertyName("productId")] + public long ProductId { get; set; } + + /// + /// 获取或设置商家自定义商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("outProductId")] + [System.Text.Json.Serialization.JsonPropertyName("outProductId")] + public string OutProductId { get; set; } = default!; + + /// + /// 获取或设置是否是佣金商品。 + /// + [Newtonsoft.Json.JsonProperty("isCommissionProduct")] + [System.Text.Json.Serialization.JsonPropertyName("isCommissionProduct")] + public bool IsCommissionProduct { get; set; } + + /// + /// 获取或设置佣金率(单位:万分之一)。 + /// + [Newtonsoft.Json.JsonProperty("commissionRatio")] + [System.Text.Json.Serialization.JsonPropertyName("commissionRatio")] + public int? CommissionRatio { get; set; } + + /// + /// 获取或设置待生效佣金率(单位:万分之一)。 + /// + [Newtonsoft.Json.JsonProperty("nextCommissionRatio")] + [System.Text.Json.Serialization.JsonPropertyName("nextCommissionRatio")] + public int? NextCommissionRatio { get; set; } + + /// + /// 获取或设置生效时间戳。 + /// + [Newtonsoft.Json.JsonProperty("effectiveTime")] + [System.Text.Json.Serialization.JsonPropertyName("effectiveTime")] + public long? EffectiveTimestamp { get; set; } + } + } + + /// + /// 获取或设置结果列表。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public Types.Result[] ResultList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenSetCommissionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenSetCommissionRequest.cs new file mode 100644 index 00000000..7f684faa --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenSetCommissionRequest.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/shop/open/set_commission 接口的请求。 + /// + public class UnionShopOpenSetCommissionRequest : WechatApiRequest, IInferable + { + public static class Types + { + public class Product + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("productId")] + [System.Text.Json.Serialization.JsonPropertyName("productId")] + public long? ProductId { get; set; } + + /// + /// 获取或设置商家自定义商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("outProductId")] + [System.Text.Json.Serialization.JsonPropertyName("outProductId")] + public string? OutProductId { get; set; } + + /// + /// 获取或设置佣金率(单位:万分之一)。 + /// + [Newtonsoft.Json.JsonProperty("commissionRatio")] + [System.Text.Json.Serialization.JsonPropertyName("commissionRatio")] + public int CommissionRatio { get; set; } + } + } + + /// + /// 获取或设置商品列表。 + /// + [Newtonsoft.Json.JsonProperty("key")] + [System.Text.Json.Serialization.JsonPropertyName("key")] + public IList ProductList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenSetCommissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenSetCommissionResponse.cs new file mode 100644 index 00000000..d14536d8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionShop/Open/UnionShopOpenSetCommissionResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/shop/open/set_commission 接口的响应。 + /// + public class UnionShopOpenSetCommissionResponse : WechatApiResponse + { + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenDeleteCommissionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenDeleteCommissionRequest.json new file mode 100644 index 00000000..f6284d3d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenDeleteCommissionRequest.json @@ -0,0 +1,8 @@ +{ + "key": [ + { + "productId": 411330134, + "outProductId": "1234566" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenGetCommissionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenGetCommissionRequest.json new file mode 100644 index 00000000..f6284d3d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenGetCommissionRequest.json @@ -0,0 +1,8 @@ +{ + "key": [ + { + "productId": 411330134, + "outProductId": "1234566" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenGetCommissionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenGetCommissionResponse.json new file mode 100644 index 00000000..d91c6c6b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenGetCommissionResponse.json @@ -0,0 +1,11 @@ +{ + "errcode": 0, + "errmsg": "ok", + "result": [ + { + "productId": "411330134", + "outProductId": "1234566", + "isCommissionProduct": false + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenSetCommissionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenSetCommissionRequest.json new file mode 100644 index 00000000..f6284d3d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionShop/Open/UnionShopOpenSetCommissionRequest.json @@ -0,0 +1,8 @@ +{ + "key": [ + { + "productId": 411330134, + "outProductId": "1234566" + } + ] +}