From 8c970b5076ef73cf717483f2b8fa89ff3a089875 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 3 Nov 2022 10:30:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(wxapi):=20=E6=96=B0=E5=A2=9E=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=8F=B7=E5=B0=8F=E5=BA=97=E5=95=86=E5=93=81=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...=> ChannelsECProductCategoryAuditEvent.cs} | 6 +- .../ChannelsECProductSPUAuditEvent.cs | 48 +++ .../ChannelsECProductSPUListingEvent.cs | 48 +++ ...echatApiClientExecuteChannelsExtensions.cs | 182 +++++++++++ .../ChannelsECOrderDeliverySendRequest.cs | 2 +- .../ECProduct/ChannelsECProductAddRequest.cs | 220 ++++++++++++++ .../ECProduct/ChannelsECProductAddResponse.cs | 40 +++ .../ChannelsECProductAuditCancelRequest.cs | 15 + .../ChannelsECProductAuditCancelResponse.cs | 9 + .../ChannelsECProductDeleteRequest.cs | 15 + .../ChannelsECProductDeleteResponse.cs | 9 + .../ChannelsECProductDelistingRequest.cs | 15 + .../ChannelsECProductDelistingResponse.cs | 9 + .../ECProduct/ChannelsECProductGetRequest.cs | 22 ++ .../ECProduct/ChannelsECProductGetResponse.cs | 285 ++++++++++++++++++ .../ChannelsECProductListGetRequest.cs | 30 ++ .../ChannelsECProductListGetResponse.cs | 30 ++ .../ChannelsECProductListingRequest.cs | 15 + .../ChannelsECProductListingResponse.cs | 9 + .../ChannelsECProductStockUpdateRequest.cs | 36 +++ .../ChannelsECProductStockUpdateResponse.cs | 9 + .../ChannelsECProductUpdateRequest.cs | 178 +++++++++++ .../ChannelsECProductUpdateResponse.cs | 40 +++ .../Product/SPU/ProductSPUAddRequest.cs | 2 +- ... ChannelsECProductCategoryAuditEvent.json} | 0 .../ChannelsECProductSPUAuditEvent.json | 12 + .../ChannelsECProductSPUListingEvent.json | 12 + .../ChannelsECProductAddRequest.json | 55 ++++ .../ChannelsECProductAddResponse.json | 8 + .../ChannelsECProductDeleteRequest.json | 3 + .../ChannelsECProductGetRequest.json | 5 + .../ChannelsECProductGetResponse.json | 58 ++++ .../ChannelsECProductListGetRequest.json | 5 + .../ChannelsECProductListGetResponse.json | 18 ++ .../ChannelsECProductListingRequest.json | 3 + .../ChannelsECProductStockUpdateRequest.json | 6 + .../ChannelsECProductUpdateRequest.json | 74 +++++ .../ChannelsECProductUpdateResponse.json | 8 + 38 files changed, 1536 insertions(+), 5 deletions(-) rename src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/{ChannelsECCategoryAuditEvent.cs => ChannelsECProductCategoryAuditEvent.cs} (87%) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUAuditEvent.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUListingEvent.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateResponse.cs rename test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/{ChannelsECCategoryAuditEvent.json => ChannelsECProductCategoryAuditEvent.json} (100%) create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUAuditEvent.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUListingEvent.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductDeleteRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListingRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductStockUpdateRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateResponse.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECCategoryAuditEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductCategoryAuditEvent.cs similarity index 87% rename from src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECCategoryAuditEvent.cs rename to src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductCategoryAuditEvent.cs index c58beda0..c41993fc 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECCategoryAuditEvent.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductCategoryAuditEvent.cs @@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events /// 表示 EVENT.product_category_audit 事件的数据。 /// REF: https://developers.weixin.qq.com/doc/channels/API/category/callback/ProductCategoryAudit.html /// - public class ChannelsECCategoryAuditEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable + public class ChannelsECProductCategoryAuditEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable { public static class Types { @@ -28,12 +28,12 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events public int Status { get; set; } /// - /// 获取或设置拒绝原因。 + /// 获取或设置审核原因。 /// [Newtonsoft.Json.JsonProperty("reason")] [System.Text.Json.Serialization.JsonPropertyName("reason")] [System.Xml.Serialization.XmlElement("reason", IsNullable = true)] - public string? RejectReason { get; set; } + public string? Reason { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUAuditEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUAuditEvent.cs new file mode 100644 index 00000000..02575b17 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUAuditEvent.cs @@ -0,0 +1,48 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Events +{ + /// + /// 表示 EVENT.product_spu_audit 事件的数据。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/callback/ProductSpuAudit.html + /// + public class ChannelsECProductSPUAuditEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable + { + public static class Types + { + public class EventData + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + [System.Xml.Serialization.XmlElement("product_id")] + public long ProductId { get; set; } + + /// + /// 获取或设置审核状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + [System.Xml.Serialization.XmlElement("status")] + public int Status { get; set; } + + /// + /// 获取或设置审核原因。 + /// + [Newtonsoft.Json.JsonProperty("reason")] + [System.Text.Json.Serialization.JsonPropertyName("reason")] + [System.Xml.Serialization.XmlElement("reason", IsNullable = true)] + public string? Reason { get; set; } + } + } + + /// + /// 获取或设置事件数据。 + /// + [Newtonsoft.Json.JsonProperty("ProductSpuAudit")] + [System.Text.Json.Serialization.JsonPropertyName("ProductSpuAudit")] + [System.Xml.Serialization.XmlElement("ProductSpuAudit")] + public Types.EventData EventData { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUListingEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUListingEvent.cs new file mode 100644 index 00000000..25d393c9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/ChannelsEC/ChannelsECProductSPUListingEvent.cs @@ -0,0 +1,48 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Events +{ + /// + /// 表示 EVENT.product_spu_listing 事件的数据。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/callback/ProductSpuListing.html + /// + public class ChannelsECProductSPUListingEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable + { + public static class Types + { + public class EventData + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + [System.Xml.Serialization.XmlElement("product_id")] + public long ProductId { get; set; } + + /// + /// 获取或设置上下架状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + [System.Xml.Serialization.XmlElement("status")] + public int Status { get; set; } + + /// + /// 获取或设置下架原因。 + /// + [Newtonsoft.Json.JsonProperty("reason")] + [System.Text.Json.Serialization.JsonPropertyName("reason")] + [System.Xml.Serialization.XmlElement("reason", IsNullable = true)] + public string? Reason { get; set; } + } + } + + /// + /// 获取或设置事件数据。 + /// + [Newtonsoft.Json.JsonProperty("ProductSpuListing")] + [System.Text.Json.Serialization.JsonPropertyName("ProductSpuListing")] + [System.Xml.Serialization.XmlElement("ProductSpuListing")] + public Types.EventData EventData { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs index 5a575eab..d87b453c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs @@ -303,6 +303,188 @@ namespace SKIT.FlurlHttpClient.Wechat.Api #endregion #endregion + #region Product + /// + /// 异步调用 [POST] /channels/ec/product/add 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/add.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductAddAsync(this WechatApiClient client, Models.ChannelsECProductAddRequest 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, "channels", "ec", "product", "add") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/update 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/update.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductUpdateAsync(this WechatApiClient client, Models.ChannelsECProductUpdateRequest 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, "channels", "ec", "product", "update") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/delete 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/delete.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductDeleteAsync(this WechatApiClient client, Models.ChannelsECProductDeleteRequest 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, "channels", "ec", "product", "delete") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/get 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/get.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductGetAsync(this WechatApiClient client, Models.ChannelsECProductGetRequest 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, "channels", "ec", "product", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/list/get 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/list_get.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductListGetAsync(this WechatApiClient client, Models.ChannelsECProductListGetRequest 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, "channels", "ec", "product", "list", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/listing 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/listing.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductListingAsync(this WechatApiClient client, Models.ChannelsECProductListingRequest 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, "channels", "ec", "product", "listing") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/delisting 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/delisting.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductDelistingAsync(this WechatApiClient client, Models.ChannelsECProductDelistingRequest 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, "channels", "ec", "product", "delisting") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/audit/cancel 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/audit_cancel.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductAuditCancelAsync(this WechatApiClient client, Models.ChannelsECProductAuditCancelRequest 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, "channels", "ec", "product", "audit", "cancel") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /channels/ec/product/stock/update 接口。 + /// REF: https://developers.weixin.qq.com/doc/channels/API/product/stock_update.html + /// + /// + /// + /// + /// + public static async Task ExecuteChannelsECProductStockUpdateAsync(this WechatApiClient client, Models.ChannelsECProductStockUpdateRequest 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, "channels", "ec", "product", "stock", "update") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + #region Order #region Order/Delivery /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECOrder/Delivery/ChannelsECOrderDeliverySendRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECOrder/Delivery/ChannelsECOrderDeliverySendRequest.cs index 40854653..e73f5160 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECOrder/Delivery/ChannelsECOrderDeliverySendRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECOrder/Delivery/ChannelsECOrderDeliverySendRequest.cs @@ -57,7 +57,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models /// [Newtonsoft.Json.JsonProperty("deliver_type")] [System.Text.Json.Serialization.JsonPropertyName("deliver_type")] - public int DeliverType { get; set; } + public int DeliverMethod { get; set; } /// /// 获取或设置商品列表。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddRequest.cs new file mode 100644 index 00000000..fa4ce210 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddRequest.cs @@ -0,0 +1,220 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/add 接口的请求。 + /// + public class ChannelsECProductAddRequest : WechatApiRequest, IInferable + { + public static class Types + { + public class Detail + { + /// + /// 获取或设置商品详情图片 URL 列表。 + /// + [Newtonsoft.Json.JsonProperty("imgs")] + [System.Text.Json.Serialization.JsonPropertyName("imgs")] + public IList ImageUrlList { get; set; } = new List(); + + /// + /// 获取或设置商品详情文字。 + /// + [Newtonsoft.Json.JsonProperty("desc")] + [System.Text.Json.Serialization.JsonPropertyName("desc")] + public string? Description { get; set; } + } + + public class Category + { + /// + /// 获取或设置商品类目 ID。 + /// + [Newtonsoft.Json.JsonProperty("cat_id")] + [System.Text.Json.Serialization.JsonPropertyName("cat_id")] + public int CategoryId { get; set; } + } + + public class Attribute + { + /// + /// 获取或设置属性的 Key。 + /// + [Newtonsoft.Json.JsonProperty("attr_key")] + [System.Text.Json.Serialization.JsonPropertyName("attr_key")] + public string Key { get; set; } = string.Empty; + + /// + /// 获取或设置属性的值。 + /// + [Newtonsoft.Json.JsonProperty("attr_value")] + [System.Text.Json.Serialization.JsonPropertyName("attr_value")] + public string Value { get; set; } = string.Empty; + } + + public class Express + { + /// + /// 获取或设置运费模板 ID。 + /// + [Newtonsoft.Json.JsonProperty("template_id")] + [System.Text.Json.Serialization.JsonPropertyName("template_id")] + public long TemplateId { get; set; } + } + + public class SKU + { + /// + /// 获取或设置商家自定义 SKU ID。 + /// + [Newtonsoft.Json.JsonProperty("out_sku_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_sku_id")] + public string OutSKUId { get; set; } = string.Empty; + + /// + /// 获取或设置缩略图 Url。 + /// + [Newtonsoft.Json.JsonProperty("thumb_img")] + [System.Text.Json.Serialization.JsonPropertyName("thumb_img")] + public string ThumbnailUrl { get; set; } = string.Empty; + + /// + /// 获取或设置售价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("sale_price")] + [System.Text.Json.Serialization.JsonPropertyName("sale_price")] + public int SalePrice { get; set; } + + /// + /// 获取或设置市场价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("market_price")] + [System.Text.Json.Serialization.JsonPropertyName("market_price")] + public int MarketPrice { get; set; } + + /// + /// 获取或设置库存。 + /// + [Newtonsoft.Json.JsonProperty("stock_num")] + [System.Text.Json.Serialization.JsonPropertyName("stock_num")] + public int Stock { get; set; } + + /// + /// 获取或设置商品编码。 + /// + [Newtonsoft.Json.JsonProperty("sku_code")] + [System.Text.Json.Serialization.JsonPropertyName("sku_code")] + public string? SKUCode { get; set; } + + /// + /// 获取或设置商品属性列表。 + /// + [Newtonsoft.Json.JsonProperty("sku_attrs")] + [System.Text.Json.Serialization.JsonPropertyName("sku_attrs")] + public IList? AttributeList { get; set; } + } + + public class Limitation + { + /// + /// 获取或设置限购周期类型。 + /// + [Newtonsoft.Json.JsonProperty("period_type")] + [System.Text.Json.Serialization.JsonPropertyName("period_type")] + public int PeriodType { get; set; } + + /// + /// 获取或设置限购数量。 + /// + [Newtonsoft.Json.JsonProperty("limited_buy_num")] + [System.Text.Json.Serialization.JsonPropertyName("limited_buy_num")] + public int? LimitedBuyCount { get; set; } + } + } + + /// + /// 获取或设置商家自定义商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("out_product_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_product_id")] + public string? OutProductId { get; set; } + + /// + /// 获取或设置商品标题。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = string.Empty; + + /// + /// 获取或设置商品副标题。 + /// + [Newtonsoft.Json.JsonProperty("sub_title")] + [System.Text.Json.Serialization.JsonPropertyName("sub_title")] + public string? SubTitle { get; set; } + + /// + /// 获取或设置主图 URL 列表。 + /// + [Newtonsoft.Json.JsonProperty("head_imgs")] + [System.Text.Json.Serialization.JsonPropertyName("head_imgs")] + public IList HeadImageUrlList { get; set; } = new List(); + + /// + /// 获取或设置商品详情信息。 + /// + [Newtonsoft.Json.JsonProperty("desc_info")] + [System.Text.Json.Serialization.JsonPropertyName("desc_info")] + public Types.Detail Detail { get; set; } = new Types.Detail(); + + /// + /// 获取或设置商品类目列表。 + /// + [Newtonsoft.Json.JsonProperty("cats")] + [System.Text.Json.Serialization.JsonPropertyName("cats")] + public IList CategoryList { get; set; } = new List(); + + /// + /// 获取或设置商品属性列表。 + /// + [Newtonsoft.Json.JsonProperty("attrs")] + [System.Text.Json.Serialization.JsonPropertyName("attrs")] + public IList? AttributeList { get; set; } + + /// + /// 获取或设置发货方式。 + /// + [Newtonsoft.Json.JsonProperty("deliver_method")] + [System.Text.Json.Serialization.JsonPropertyName("deliver_method")] + public int? DeliverMethod { get; set; } + + /// + /// 获取或设置运费信息。 + /// + [Newtonsoft.Json.JsonProperty("express_info")] + [System.Text.Json.Serialization.JsonPropertyName("express_info")] + public Types.Express? Express { get; set; } + + /// + /// 获取或设置售后说明。 + /// + [Newtonsoft.Json.JsonProperty("aftersale_desc")] + [System.Text.Json.Serialization.JsonPropertyName("aftersale_desc")] + public string? AftersaleDescription { get; set; } + + /// + /// 获取或设置 SKU 列表。 + /// + [Newtonsoft.Json.JsonProperty("skus")] + [System.Text.Json.Serialization.JsonPropertyName("skus")] + public IList? SKUList { get; set; } + + /// + /// 获取或设置限购信息。 + /// + [Newtonsoft.Json.JsonProperty("limited_info")] + [System.Text.Json.Serialization.JsonPropertyName("limited_info")] + public Types.Limitation? Limitation { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddResponse.cs new file mode 100644 index 00000000..07e5ef46 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAddResponse.cs @@ -0,0 +1,40 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/add 接口的响应。 + /// + public class ChannelsECProductAddResponse : WechatApiResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long ProductId { get; set; } + + /// + /// 获取或设置创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelRequest.cs new file mode 100644 index 00000000..a5d814f6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/audit/cancel 接口的请求。 + /// + public class ChannelsECProductAuditCancelRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + public long ProductId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelResponse.cs new file mode 100644 index 00000000..1826ffb8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductAuditCancelResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/audit/cancel 接口的响应。 + /// + public class ChannelsECProductAuditCancelResponse : WechatApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteRequest.cs new file mode 100644 index 00000000..c2efd199 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/delete 接口的请求。 + /// + public class ChannelsECProductDeleteRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + public long ProductId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteResponse.cs new file mode 100644 index 00000000..88beaed3 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDeleteResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/delete 接口的响应。 + /// + public class ChannelsECProductDeleteResponse : WechatApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingRequest.cs new file mode 100644 index 00000000..e87f4bfe --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/delisting 接口的请求。 + /// + public class ChannelsECProductDelistingRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + public long ProductId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingResponse.cs new file mode 100644 index 00000000..6dbc51ea --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductDelistingResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/delisting 接口的响应。 + /// + public class ChannelsECProductDelistingResponse : WechatApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetRequest.cs new file mode 100644 index 00000000..f4490a64 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/get 接口的请求。 + /// + public class ChannelsECProductGetRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + public long ProductId { get; set; } + + /// + /// 获取或设置数据类型。 + /// + [Newtonsoft.Json.JsonProperty("data_type")] + [System.Text.Json.Serialization.JsonPropertyName("data_type")] + public int? DataType { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetResponse.cs new file mode 100644 index 00000000..f0351707 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductGetResponse.cs @@ -0,0 +1,285 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/get 接口的响应。 + /// + public class ChannelsECProductGetResponse : WechatApiResponse + { + public static class Types + { + public class Product + { + + public static class Types + { + public class Detail + { + /// + /// 获取或设置商品详情图片 URL 列表。 + /// + [Newtonsoft.Json.JsonProperty("imgs")] + [System.Text.Json.Serialization.JsonPropertyName("imgs")] + public string[] ImageUrlList { get; set; } = default!; + + /// + /// 获取或设置商品文字描述。 + /// + [Newtonsoft.Json.JsonProperty("desc")] + [System.Text.Json.Serialization.JsonPropertyName("desc")] + public string? Description { get; set; } + } + + public class Category + { + /// + /// 获取或设置商品类目 ID。 + /// + [Newtonsoft.Json.JsonProperty("cat_id")] + [System.Text.Json.Serialization.JsonPropertyName("cat_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public int CategoryId { get; set; } + } + + public class Attribute + { + /// + /// 获取或设置属性的 Key。 + /// + [Newtonsoft.Json.JsonProperty("attr_key")] + [System.Text.Json.Serialization.JsonPropertyName("attr_key")] + public string Key { get; set; } = default!; + + /// + /// 获取或设置属性的值。 + /// + [Newtonsoft.Json.JsonProperty("attr_value")] + [System.Text.Json.Serialization.JsonPropertyName("attr_value")] + public string Value { get; set; } = default!; + } + + public class Express + { + /// + /// 获取或设置运费模板 ID。 + /// + [Newtonsoft.Json.JsonProperty("template_id")] + [System.Text.Json.Serialization.JsonPropertyName("template_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long TemplateId { get; set; } + } + + public class SKU + { + /// + /// 获取或设置 SKU ID。 + /// + [Newtonsoft.Json.JsonProperty("sku_id")] + [System.Text.Json.Serialization.JsonPropertyName("sku_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long SKUId { get; set; } + + /// + /// 获取或设置商家自定义 SKU ID。 + /// + [Newtonsoft.Json.JsonProperty("out_sku_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_sku_id")] + public string OutSKUId { get; set; } = default!; + + /// + /// 获取或设置缩略图 URL。 + /// + [Newtonsoft.Json.JsonProperty("thumb_img")] + [System.Text.Json.Serialization.JsonPropertyName("thumb_img")] + public string ThumbnailUrl { get; set; } = default!; + + /// + /// 获取或设置售价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("sale_price")] + [System.Text.Json.Serialization.JsonPropertyName("sale_price")] + public int SalePrice { get; set; } + + /// + /// 获取或设置市场价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("market_price")] + [System.Text.Json.Serialization.JsonPropertyName("market_price")] + public int MarketPrice { get; set; } + + /// + /// 获取或设置库存。 + /// + [Newtonsoft.Json.JsonProperty("stock_num")] + [System.Text.Json.Serialization.JsonPropertyName("stock_num")] + public int Stock { get; set; } + + /// + /// 获取或设置商品编码。 + /// + [Newtonsoft.Json.JsonProperty("sku_code")] + [System.Text.Json.Serialization.JsonPropertyName("sku_code")] + public string? SKUCode { get; set; } + + /// + /// 获取或设置商品属性列表。 + /// + [Newtonsoft.Json.JsonProperty("sku_attrs")] + [System.Text.Json.Serialization.JsonPropertyName("sku_attrs")] + public Attribute[]? AttributeList { get; set; } + + /// + /// 获取或设置 SKU 状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + } + + public class Limitation + { + /// + /// 获取或设置限购周期类型。 + /// + [Newtonsoft.Json.JsonProperty("period_type")] + [System.Text.Json.Serialization.JsonPropertyName("period_type")] + public int PeriodType { get; set; } + + /// + /// 获取或设置限购数量。 + /// + [Newtonsoft.Json.JsonProperty("limited_buy_num")] + [System.Text.Json.Serialization.JsonPropertyName("limited_buy_num")] + public int? LimitedBuyCount { get; set; } + } + } + + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long ProductId { get; set; } + + /// + /// 获取或设置商家自定义商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("out_product_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_product_id")] + public string? OutProductId { get; set; } + + /// + /// 获取或设置商品标题。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = default!; + + /// + /// 获取或设置商品副标题。 + /// + [Newtonsoft.Json.JsonProperty("sub_title")] + [System.Text.Json.Serialization.JsonPropertyName("sub_title")] + public string? SubTitle { get; set; } + + /// + /// 获取或设置主图 URL 列表。 + /// + [Newtonsoft.Json.JsonProperty("head_imgs")] + [System.Text.Json.Serialization.JsonPropertyName("head_imgs")] + public string[] HeadImageUrlList { get; set; } = default!; + + /// + /// 获取或设置商品详情信息。 + /// + [Newtonsoft.Json.JsonProperty("desc_info")] + [System.Text.Json.Serialization.JsonPropertyName("desc_info")] + public Types.Detail Detail { get; set; } = default!; + + /// + /// 获取或设置商品类目列表。 + /// + [Newtonsoft.Json.JsonProperty("cats")] + [System.Text.Json.Serialization.JsonPropertyName("cats")] + public Types.Category[] CategoryList { get; set; } = default!; + + /// + /// 获取或设置商品属性列表。 + /// + [Newtonsoft.Json.JsonProperty("attrs")] + [System.Text.Json.Serialization.JsonPropertyName("attrs")] + public Types.Attribute[]? AttributeList { get; set; } + + /// + /// 获取或设置发货方式。 + /// + [Newtonsoft.Json.JsonProperty("deliver_method")] + [System.Text.Json.Serialization.JsonPropertyName("deliver_method")] + public int? DeliverMethod { get; set; } + + /// + /// 获取或设置运费信息。 + /// + [Newtonsoft.Json.JsonProperty("express_info")] + [System.Text.Json.Serialization.JsonPropertyName("express_info")] + public Types.Express? Express { get; set; } + + /// + /// 获取或设置售后说明。 + /// + [Newtonsoft.Json.JsonProperty("aftersale_desc")] + [System.Text.Json.Serialization.JsonPropertyName("aftersale_desc")] + public string? AftersaleDescription { get; set; } + + /// + /// 获取或设置商品状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + + /// + /// 获取或设置商品草稿状态。 + /// + [Newtonsoft.Json.JsonProperty("edit_status")] + [System.Text.Json.Serialization.JsonPropertyName("edit_status")] + public int EditingStatus { get; set; } + + /// + /// 获取或设置 SKU 最低价格(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("min_price")] + [System.Text.Json.Serialization.JsonPropertyName("min_price")] + public int MinPrice { get; set; } + + /// + /// 获取或设置 SKU 列表。 + /// + [Newtonsoft.Json.JsonProperty("skus")] + [System.Text.Json.Serialization.JsonPropertyName("skus")] + public Types.SKU[]? SKUList { get; set; } + + /// + /// 获取或设置限购信息。 + /// + [Newtonsoft.Json.JsonProperty("limited_info")] + [System.Text.Json.Serialization.JsonPropertyName("limited_info")] + public Types.Limitation? Limitation { get; set; } + } + } + + /// + /// 获取或设置线上商品信息。 + /// + [Newtonsoft.Json.JsonProperty("product")] + [System.Text.Json.Serialization.JsonPropertyName("product")] + public Types.Product? Product { get; set; } + + /// + /// 获取或设置草稿商品信息。 + /// + [Newtonsoft.Json.JsonProperty("edit_product")] + [System.Text.Json.Serialization.JsonPropertyName("edit_product")] + public Types.Product? EditingProduct { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetRequest.cs new file mode 100644 index 00000000..9412ddee --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetRequest.cs @@ -0,0 +1,30 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/list/get 接口的请求。 + /// + public class ChannelsECProductListGetRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int? Status { get; set; } + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_key")] + [System.Text.Json.Serialization.JsonPropertyName("next_key")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// 默认值:10 + /// + [Newtonsoft.Json.JsonProperty("page_size")] + [System.Text.Json.Serialization.JsonPropertyName("page_size")] + public int Limit { get; set; } = 10; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetResponse.cs new file mode 100644 index 00000000..5c68c7e6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListGetResponse.cs @@ -0,0 +1,30 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/list/get 接口的响应。 + /// + public class ChannelsECProductListGetResponse : WechatApiResponse + { + /// + /// 获取或设置商品 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("product_ids")] + [System.Text.Json.Serialization.JsonPropertyName("product_ids")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.TextualLongArrayConverter))] + public long[] ProductIdList { get; set; } = default!; + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_key")] + [System.Text.Json.Serialization.JsonPropertyName("next_key")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置总数量。 + /// + [Newtonsoft.Json.JsonProperty("total_num")] + [System.Text.Json.Serialization.JsonPropertyName("total_num")] + public int TotalCount { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingRequest.cs new file mode 100644 index 00000000..f35c564c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/listing 接口的请求。 + /// + public class ChannelsECProductListingRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + public long ProductId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingResponse.cs new file mode 100644 index 00000000..c4b995ff --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductListingResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/listing 接口的响应。 + /// + public class ChannelsECProductListingResponse : WechatApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateRequest.cs new file mode 100644 index 00000000..8d7d42cf --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateRequest.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/stock/update 接口的请求。 + /// + public class ChannelsECProductStockUpdateRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + public long ProductId { get; set; } + + /// + /// 获取或设置 SKU ID。 + /// + [Newtonsoft.Json.JsonProperty("sku_id")] + [System.Text.Json.Serialization.JsonPropertyName("sku_id")] + public long SKUId { get; set; } + + /// + /// 获取或设置修改类型。 + /// + [Newtonsoft.Json.JsonProperty("diff_type")] + [System.Text.Json.Serialization.JsonPropertyName("diff_type")] + public int DiffType { get; set; } + + /// + /// 获取或设置修改数量。 + /// + [Newtonsoft.Json.JsonProperty("num")] + [System.Text.Json.Serialization.JsonPropertyName("num")] + public int DiffCount { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateResponse.cs new file mode 100644 index 00000000..6b06257e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductStockUpdateResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/stock/update 接口的响应。 + /// + public class ChannelsECProductStockUpdateResponse : WechatApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateRequest.cs new file mode 100644 index 00000000..39c5cc45 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateRequest.cs @@ -0,0 +1,178 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/update 接口的请求。 + /// + public class ChannelsECProductUpdateRequest : WechatApiRequest, IInferable + { + public static class Types + { + public class Detail : ChannelsECProductAddRequest.Types.Detail + { + } + + public class Category : ChannelsECProductAddRequest.Types.Category + { + } + + public class Attribute : ChannelsECProductAddRequest.Types.Attribute + { + } + + public class Express : ChannelsECProductAddRequest.Types.Express + { + } + + public class SKU + { + /// + /// 获取或设置 SKU ID。 + /// + [Newtonsoft.Json.JsonProperty("sku_id")] + [System.Text.Json.Serialization.JsonPropertyName("sku_id")] + public long SKUId { get; set; } + + /// + /// 获取或设置缩略图 URL。 + /// + [Newtonsoft.Json.JsonProperty("thumb_img")] + [System.Text.Json.Serialization.JsonPropertyName("thumb_img")] + public string ThumbnailUrl { get; set; } = string.Empty; + + /// + /// 获取或设置售价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("sale_price")] + [System.Text.Json.Serialization.JsonPropertyName("sale_price")] + public int SalePrice { get; set; } + + /// + /// 获取或设置市场价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("market_price")] + [System.Text.Json.Serialization.JsonPropertyName("market_price")] + public int MarketPrice { get; set; } + + /// + /// 获取或设置库存。 + /// + [Newtonsoft.Json.JsonProperty("stock_num")] + [System.Text.Json.Serialization.JsonPropertyName("stock_num")] + public int Stock { get; set; } + + /// + /// 获取或设置商品编码。 + /// + [Newtonsoft.Json.JsonProperty("sku_code")] + [System.Text.Json.Serialization.JsonPropertyName("sku_code")] + public string? SKUCode { get; set; } + + /// + /// 获取或设置商品属性列表。 + /// + [Newtonsoft.Json.JsonProperty("sku_attrs")] + [System.Text.Json.Serialization.JsonPropertyName("sku_attrs")] + public IList? AttributeList { get; set; } + } + + public class Limitation : ChannelsECProductAddRequest.Types.Limitation + { + } + } + + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + public long ProductId { get; set; } + + /// + /// 获取或设置商品标题。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = string.Empty; + + /// + /// 获取或设置商品副标题。 + /// + [Newtonsoft.Json.JsonProperty("sub_title")] + [System.Text.Json.Serialization.JsonPropertyName("sub_title")] + public string? SubTitle { get; set; } + + /// + /// 获取或设置主图 URL 列表。 + /// + [Newtonsoft.Json.JsonProperty("head_imgs")] + [System.Text.Json.Serialization.JsonPropertyName("head_imgs")] + public IList HeadImageUrlList { get; set; } = new List(); + + /// + /// 获取或设置商品详情信息。 + /// + [Newtonsoft.Json.JsonProperty("desc_info")] + [System.Text.Json.Serialization.JsonPropertyName("desc_info")] + public Types.Detail Detail { get; set; } = new Types.Detail(); + + /// + /// 获取或设置商品类目列表。 + /// + [Newtonsoft.Json.JsonProperty("cats")] + [System.Text.Json.Serialization.JsonPropertyName("cats")] + public IList CategoryList { get; set; } = new List(); + + /// + /// 获取或设置商品属性列表。 + /// + [Newtonsoft.Json.JsonProperty("attrs")] + [System.Text.Json.Serialization.JsonPropertyName("attrs")] + public IList? AttributeList { get; set; } + + /// + /// 获取或设置发货方式。 + /// + [Newtonsoft.Json.JsonProperty("deliver_method")] + [System.Text.Json.Serialization.JsonPropertyName("deliver_method")] + public int? DeliverMethod { get; set; } + + /// + /// 获取或设置运费信息。 + /// + [Newtonsoft.Json.JsonProperty("express_info")] + [System.Text.Json.Serialization.JsonPropertyName("express_info")] + public Types.Express? Express { get; set; } + + /// + /// 获取或设置售后说明。 + /// + [Newtonsoft.Json.JsonProperty("aftersale_desc")] + [System.Text.Json.Serialization.JsonPropertyName("aftersale_desc")] + public string? AftersaleDescription { get; set; } + + /// + /// 获取或设置 SKU 列表。 + /// + [Newtonsoft.Json.JsonProperty("skus")] + [System.Text.Json.Serialization.JsonPropertyName("skus")] + public IList? SKUList { get; set; } + + /// + /// 获取或设置限购信息。 + /// + [Newtonsoft.Json.JsonProperty("limited_info")] + [System.Text.Json.Serialization.JsonPropertyName("limited_info")] + public Types.Limitation? Limitation { get; set; } + + /// + /// 获取或设置更新后是否立即上架。 + /// + [Newtonsoft.Json.JsonProperty("listing")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalNullableBooleanConverter))] + [System.Text.Json.Serialization.JsonPropertyName("listing")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalNullableBooleanConverter))] + public bool? RequireListing { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateResponse.cs new file mode 100644 index 00000000..d5f9f9f8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECProduct/ChannelsECProductUpdateResponse.cs @@ -0,0 +1,40 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /channels/ec/product/update 接口的响应。 + /// + public class ChannelsECProductUpdateResponse : WechatApiResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long ProductId { get; set; } + + /// + /// 获取或设置更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/SPU/ProductSPUAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/SPU/ProductSPUAddRequest.cs index 10958cfc..667a5ebf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/SPU/ProductSPUAddRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/SPU/ProductSPUAddRequest.cs @@ -198,7 +198,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models /// [Newtonsoft.Json.JsonProperty("express_info")] [System.Text.Json.Serialization.JsonPropertyName("express_info")] - public Types.Express Express { get; set; } = new Types.Express(); + public Types.Express? Express { get; set; } /// /// 获取或设置 SKU 列表。 diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECCategoryAuditEvent.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductCategoryAuditEvent.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECCategoryAuditEvent.json rename to test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductCategoryAuditEvent.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUAuditEvent.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUAuditEvent.json new file mode 100644 index 00000000..958f566d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUAuditEvent.json @@ -0,0 +1,12 @@ +{ + "ToUserName": "gh_*", + "FromUserName": "OPENID", + "CreateTime": 1662480000, + "MsgType": "event", + "Event": "product_spu_audit", + "ProductSpuAudit": { + "product_id": "12345678", + "status": 3, + "reason": "abc" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUListingEvent.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUListingEvent.json new file mode 100644 index 00000000..78a82c84 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/ChannelsEC/ChannelsECProductSPUListingEvent.json @@ -0,0 +1,12 @@ +{ + "ToUserName": "gh_*", + "FromUserName": "OPENID", + "CreateTime": 1662480000, + "MsgType": "event", + "Event": "product_spu_listing", + "ProductSpuListing": { + "product_id": "12345678", + "status": 3, + "reason": "abc" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddRequest.json new file mode 100644 index 00000000..c5cdd7ca --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddRequest.json @@ -0,0 +1,55 @@ +{ + "title": "任天堂 Nintendo Switch 国行续航增强版 NS家用体感游戏机掌机 便携掌上游戏机 红蓝主机", + "sub_title": "随时随地,一起趣玩。", + "head_imgs": [ + "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ" + ], + "desc_info": { + "imgs": [ + "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ" + ] + }, + "cats": [ + { + "cat_id": "6033" + }, + { + "cat_id": "6057" + }, + { + "cat_id": "6091" + } + ], + "attrs": [ + { + "attr_key": "商品毛重", + "attr_value": "380g" + }, + { + "attr_key": "商品产地", + "attr_value": "中国大陆" + } + ], + "express_info": { + "template_id": "47428464001" + }, + "skus": [ + { + "thumb_img": "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ", + "sale_price": 1300, + "market_price": 1500, + "stock_num": 100, + "sku_code": "A24525252", + "sku_attrs": [ + { + "attr_key": "选择颜色", + "attr_value": "红蓝主机" + }, + { + "attr_key": "选择套装", + "attr_value": "主机+保护套" + } + ] + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddResponse.json new file mode 100644 index 00000000..871dfed3 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductAddResponse.json @@ -0,0 +1,8 @@ +{ + "errcode": 0, + "errmsg": "ok", + "data": { + "product_id": 23423523452345235, + "create_time": "2020-03-25 12:05:25" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductDeleteRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductDeleteRequest.json new file mode 100644 index 00000000..43d5663d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductDeleteRequest.json @@ -0,0 +1,3 @@ +{ + "product_id": "324545" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetRequest.json new file mode 100644 index 00000000..8f08445d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetRequest.json @@ -0,0 +1,5 @@ +{ + "product_id": "324545", + "data_type": 1 +} + diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetResponse.json new file mode 100644 index 00000000..c6463a93 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductGetResponse.json @@ -0,0 +1,58 @@ +{ + "errcode": 0, + "errmsg": "ok", + "product": { + "product_id": "123456789", + "out_product_id": "OUT_PRODUCT_ID_TEST", + "title": "任天堂 Nintendo Switch 国行续航增强版", + "sub_title": "【国行Switch,更安心的保修服务,更快的国行服务器】一台主机三种模式,游戏掌机,随时随地,一起趣玩", + "head_imgs": [ + "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ" + ], + "desc_info": { + "imgs": [ + "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ" + ] + }, + "cats": [ + { + "cat_id": "1" + }, + { + "cat_id": "2" + }, + { + "cat_id": "3" + } + ], + "attrs": [ + { + "attr_key": "商品毛重", + "attr_value": "380g" + }, + { + "attr_key": "商品产地", + "attr_value": "中国大陆" + } + ], + "express_info": { + "template_id": "123456" + }, + "status": 5, + "edit_status": 2, + "skus": [ + { + "sku_id": "123456001", + "out_sku_id": "OUT_SKU_ID_TEST", + "thumb_img": "", + "sale_price": 1, + "market_price": 2, + "stock_num": 5, + "sku_code": "SKU_CODE_TEST", + "sku_attrs": [], + "status": 0 + } + ], + "min_price": 1 + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetRequest.json new file mode 100644 index 00000000..aee9e0d5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetRequest.json @@ -0,0 +1,5 @@ +{ + "status": 5, + "page_size": 10, + "next_key": "THE_NEXT_KEY" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetResponse.json new file mode 100644 index 00000000..0dc1fbb7 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListGetResponse.json @@ -0,0 +1,18 @@ +{ + "errcode": 0, + "errmsg": "ok", + "product_ids": [ + "1234567001", + "1234567002", + "1234567003", + "1234567004", + "1234567005", + "1234567006", + "1234567007", + "1234567008", + "1234567009", + "1234567010" + ], + "next_key": "THE_NEXT_KEY_NEW", + "total_num": 100 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListingRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListingRequest.json new file mode 100644 index 00000000..bc59141e --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductListingRequest.json @@ -0,0 +1,3 @@ +{ + "product_id": "1234234" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductStockUpdateRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductStockUpdateRequest.json new file mode 100644 index 00000000..e52b7eac --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductStockUpdateRequest.json @@ -0,0 +1,6 @@ +{ + "product_id": "324545", + "sku_id": "9328425", + "diff_type": 1, + "num": 10 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateRequest.json new file mode 100644 index 00000000..f7b9ad7b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateRequest.json @@ -0,0 +1,74 @@ +{ + "product_id": "10000000089215", + "title": "任天堂 Nintendo Switch 国行续航增强版 NS家用体感游戏机掌机 便携掌上游戏机 红蓝主机", + "sub_title": "随时随地,一起趣玩。【更新】", + "head_imgs": [ + "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ" + ], + "desc_info": { + "imgs": [ + "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ" + ] + }, + "cats": [ + { + "cat_id": "6033" + }, + { + "cat_id": "6057" + }, + { + "cat_id": "6091" + } + ], + "attrs": [ + { + "attr_key": "商品毛重", + "attr_value": "380g" + }, + { + "attr_key": "商品产地", + "attr_value": "中国大陆" + } + ], + "express_info": { + "template_id": "47428464001" + }, + "skus": [ + { + "sku_id": "462966903", + "thumb_img": "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ", + "sale_price": 1300, + "market_price": 1500, + "stock_num": 100, + "sku_code": "A24525252", + "sku_attrs": [ + { + "attr_key": "选择颜色", + "attr_value": "红蓝主机" + }, + { + "attr_key": "选择套装", + "attr_value": "主机+保护套" + } + ] + }, + { + "thumb_img": "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ", + "sale_price": 1000, + "market_price": 1200, + "stock_num": 100, + "sku_code": "A24525252", + "sku_attrs": [ + { + "attr_key": "选择颜色", + "attr_value": "红蓝主机" + }, + { + "attr_key": "选择套装", + "attr_value": "标配" + } + ] + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateResponse.json new file mode 100644 index 00000000..2f799556 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECProduct/ChannelsECProductUpdateResponse.json @@ -0,0 +1,8 @@ +{ + "errcode": 0, + "errmsg": "ok", + "data": { + "product_id": "23423523452345235", + "update_time": "2020-06-20 10:00:00" + } +}