feat(wxapi): 新增视频号小店商品操作相关接口

This commit is contained in:
Fu Diwei 2022-11-03 10:30:40 +08:00
parent 5c899a2fcb
commit 8c970b5076
38 changed files with 1536 additions and 5 deletions

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.product_category_audit 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/category/callback/ProductCategoryAudit.html </para>
/// </summary>
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; }
/// <summary>
/// 获取或设置拒绝原因。
/// 获取或设置审核原因。
/// </summary>
[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; }
}
}

View File

@ -0,0 +1,48 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.product_spu_audit 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/callback/ProductSpuAudit.html </para>
/// </summary>
public class ChannelsECProductSPUAuditEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
{
public static class Types
{
public class EventData
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[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; }
/// <summary>
/// 获取或设置审核状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
[System.Xml.Serialization.XmlElement("status")]
public int Status { get; set; }
/// <summary>
/// 获取或设置审核原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("reason")]
[System.Text.Json.Serialization.JsonPropertyName("reason")]
[System.Xml.Serialization.XmlElement("reason", IsNullable = true)]
public string? Reason { get; set; }
}
}
/// <summary>
/// 获取或设置事件数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("ProductSpuAudit")]
[System.Text.Json.Serialization.JsonPropertyName("ProductSpuAudit")]
[System.Xml.Serialization.XmlElement("ProductSpuAudit")]
public Types.EventData EventData { get; set; } = default!;
}
}

View File

@ -0,0 +1,48 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.product_spu_listing 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/callback/ProductSpuListing.html </para>
/// </summary>
public class ChannelsECProductSPUListingEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
{
public static class Types
{
public class EventData
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[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; }
/// <summary>
/// 获取或设置上下架状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
[System.Xml.Serialization.XmlElement("status")]
public int Status { get; set; }
/// <summary>
/// 获取或设置下架原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("reason")]
[System.Text.Json.Serialization.JsonPropertyName("reason")]
[System.Xml.Serialization.XmlElement("reason", IsNullable = true)]
public string? Reason { get; set; }
}
}
/// <summary>
/// 获取或设置事件数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("ProductSpuListing")]
[System.Text.Json.Serialization.JsonPropertyName("ProductSpuListing")]
[System.Xml.Serialization.XmlElement("ProductSpuListing")]
public Types.EventData EventData { get; set; } = default!;
}
}

View File

@ -303,6 +303,188 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
#endregion
#endregion
#region Product
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/add 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/add.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductAddResponse> 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<Models.ChannelsECProductAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/update 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/update.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductUpdateResponse> 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<Models.ChannelsECProductUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/delete 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/delete.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductDeleteResponse> 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<Models.ChannelsECProductDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/get 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/get.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductGetResponse> 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<Models.ChannelsECProductGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/list/get 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/list_get.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductListGetResponse> 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<Models.ChannelsECProductListGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/listing 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/listing.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductListingResponse> 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<Models.ChannelsECProductListingResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/delisting 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/delisting.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductDelistingResponse> 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<Models.ChannelsECProductDelistingResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/audit/cancel 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/audit_cancel.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductAuditCancelResponse> 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<Models.ChannelsECProductAuditCancelResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/product/stock/update 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/stock_update.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECProductStockUpdateResponse> 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<Models.ChannelsECProductStockUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region Order
#region Order/Delivery
/// <summary>

View File

@ -57,7 +57,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("deliver_type")]
[System.Text.Json.Serialization.JsonPropertyName("deliver_type")]
public int DeliverType { get; set; }
public int DeliverMethod { get; set; }
/// <summary>
/// 获取或设置商品列表。

View File

@ -0,0 +1,220 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/add 接口的请求。</para>
/// </summary>
public class ChannelsECProductAddRequest : WechatApiRequest, IInferable<ChannelsECProductAddRequest, ChannelsECProductAddResponse>
{
public static class Types
{
public class Detail
{
/// <summary>
/// 获取或设置商品详情图片 URL 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("imgs")]
[System.Text.Json.Serialization.JsonPropertyName("imgs")]
public IList<string> ImageUrlList { get; set; } = new List<string>();
/// <summary>
/// 获取或设置商品详情文字。
/// </summary>
[Newtonsoft.Json.JsonProperty("desc")]
[System.Text.Json.Serialization.JsonPropertyName("desc")]
public string? Description { get; set; }
}
public class Category
{
/// <summary>
/// 获取或设置商品类目 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("cat_id")]
[System.Text.Json.Serialization.JsonPropertyName("cat_id")]
public int CategoryId { get; set; }
}
public class Attribute
{
/// <summary>
/// 获取或设置属性的 Key。
/// </summary>
[Newtonsoft.Json.JsonProperty("attr_key")]
[System.Text.Json.Serialization.JsonPropertyName("attr_key")]
public string Key { get; set; } = string.Empty;
/// <summary>
/// 获取或设置属性的值。
/// </summary>
[Newtonsoft.Json.JsonProperty("attr_value")]
[System.Text.Json.Serialization.JsonPropertyName("attr_value")]
public string Value { get; set; } = string.Empty;
}
public class Express
{
/// <summary>
/// 获取或设置运费模板 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("template_id")]
[System.Text.Json.Serialization.JsonPropertyName("template_id")]
public long TemplateId { get; set; }
}
public class SKU
{
/// <summary>
/// 获取或设置商家自定义 SKU ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_sku_id")]
[System.Text.Json.Serialization.JsonPropertyName("out_sku_id")]
public string OutSKUId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置缩略图 Url。
/// </summary>
[Newtonsoft.Json.JsonProperty("thumb_img")]
[System.Text.Json.Serialization.JsonPropertyName("thumb_img")]
public string ThumbnailUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置售价(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("sale_price")]
[System.Text.Json.Serialization.JsonPropertyName("sale_price")]
public int SalePrice { get; set; }
/// <summary>
/// 获取或设置市场价(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("market_price")]
[System.Text.Json.Serialization.JsonPropertyName("market_price")]
public int MarketPrice { get; set; }
/// <summary>
/// 获取或设置库存。
/// </summary>
[Newtonsoft.Json.JsonProperty("stock_num")]
[System.Text.Json.Serialization.JsonPropertyName("stock_num")]
public int Stock { get; set; }
/// <summary>
/// 获取或设置商品编码。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_code")]
[System.Text.Json.Serialization.JsonPropertyName("sku_code")]
public string? SKUCode { get; set; }
/// <summary>
/// 获取或设置商品属性列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_attrs")]
[System.Text.Json.Serialization.JsonPropertyName("sku_attrs")]
public IList<Attribute>? AttributeList { get; set; }
}
public class Limitation
{
/// <summary>
/// 获取或设置限购周期类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("period_type")]
[System.Text.Json.Serialization.JsonPropertyName("period_type")]
public int PeriodType { get; set; }
/// <summary>
/// 获取或设置限购数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("limited_buy_num")]
[System.Text.Json.Serialization.JsonPropertyName("limited_buy_num")]
public int? LimitedBuyCount { get; set; }
}
}
/// <summary>
/// 获取或设置商家自定义商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_product_id")]
[System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
public string? OutProductId { get; set; }
/// <summary>
/// 获取或设置商品标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("title")]
[System.Text.Json.Serialization.JsonPropertyName("title")]
public string Title { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商品副标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_title")]
[System.Text.Json.Serialization.JsonPropertyName("sub_title")]
public string? SubTitle { get; set; }
/// <summary>
/// 获取或设置主图 URL 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("head_imgs")]
[System.Text.Json.Serialization.JsonPropertyName("head_imgs")]
public IList<string> HeadImageUrlList { get; set; } = new List<string>();
/// <summary>
/// 获取或设置商品详情信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("desc_info")]
[System.Text.Json.Serialization.JsonPropertyName("desc_info")]
public Types.Detail Detail { get; set; } = new Types.Detail();
/// <summary>
/// 获取或设置商品类目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("cats")]
[System.Text.Json.Serialization.JsonPropertyName("cats")]
public IList<Types.Category> CategoryList { get; set; } = new List<Types.Category>();
/// <summary>
/// 获取或设置商品属性列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("attrs")]
[System.Text.Json.Serialization.JsonPropertyName("attrs")]
public IList<Types.Attribute>? AttributeList { get; set; }
/// <summary>
/// 获取或设置发货方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("deliver_method")]
[System.Text.Json.Serialization.JsonPropertyName("deliver_method")]
public int? DeliverMethod { get; set; }
/// <summary>
/// 获取或设置运费信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("express_info")]
[System.Text.Json.Serialization.JsonPropertyName("express_info")]
public Types.Express? Express { get; set; }
/// <summary>
/// 获取或设置售后说明。
/// </summary>
[Newtonsoft.Json.JsonProperty("aftersale_desc")]
[System.Text.Json.Serialization.JsonPropertyName("aftersale_desc")]
public string? AftersaleDescription { get; set; }
/// <summary>
/// 获取或设置 SKU 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("skus")]
[System.Text.Json.Serialization.JsonPropertyName("skus")]
public IList<Types.SKU>? SKUList { get; set; }
/// <summary>
/// 获取或设置限购信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("limited_info")]
[System.Text.Json.Serialization.JsonPropertyName("limited_info")]
public Types.Limitation? Limitation { get; set; }
}
}

View File

@ -0,0 +1,40 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/add 接口的响应。</para>
/// </summary>
public class ChannelsECProductAddResponse : WechatApiResponse
{
public static class Types
{
public class Data
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[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; }
/// <summary>
/// 获取或设置创建时间。
/// </summary>
[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; }
}
}
/// <summary>
/// 获取或设置返回数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("data")]
[System.Text.Json.Serialization.JsonPropertyName("data")]
public Types.Data Data { get; set; } = default!;
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/audit/cancel 接口的请求。</para>
/// </summary>
public class ChannelsECProductAuditCancelRequest : WechatApiRequest, IInferable<ChannelsECProductAuditCancelRequest, ChannelsECProductAuditCancelResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/audit/cancel 接口的响应。</para>
/// </summary>
public class ChannelsECProductAuditCancelResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/delete 接口的请求。</para>
/// </summary>
public class ChannelsECProductDeleteRequest : WechatApiRequest, IInferable<ChannelsECProductDeleteRequest, ChannelsECProductDeleteResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/delete 接口的响应。</para>
/// </summary>
public class ChannelsECProductDeleteResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/delisting 接口的请求。</para>
/// </summary>
public class ChannelsECProductDelistingRequest : WechatApiRequest, IInferable<ChannelsECProductDelistingRequest, ChannelsECProductDelistingResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/delisting 接口的响应。</para>
/// </summary>
public class ChannelsECProductDelistingResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/get 接口的请求。</para>
/// </summary>
public class ChannelsECProductGetRequest : WechatApiRequest, IInferable<ChannelsECProductGetRequest, ChannelsECProductGetResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置数据类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("data_type")]
[System.Text.Json.Serialization.JsonPropertyName("data_type")]
public int? DataType { get; set; }
}
}

View File

@ -0,0 +1,285 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/get 接口的响应。</para>
/// </summary>
public class ChannelsECProductGetResponse : WechatApiResponse
{
public static class Types
{
public class Product
{
public static class Types
{
public class Detail
{
/// <summary>
/// 获取或设置商品详情图片 URL 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("imgs")]
[System.Text.Json.Serialization.JsonPropertyName("imgs")]
public string[] ImageUrlList { get; set; } = default!;
/// <summary>
/// 获取或设置商品文字描述。
/// </summary>
[Newtonsoft.Json.JsonProperty("desc")]
[System.Text.Json.Serialization.JsonPropertyName("desc")]
public string? Description { get; set; }
}
public class Category
{
/// <summary>
/// 获取或设置商品类目 ID。
/// </summary>
[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
{
/// <summary>
/// 获取或设置属性的 Key。
/// </summary>
[Newtonsoft.Json.JsonProperty("attr_key")]
[System.Text.Json.Serialization.JsonPropertyName("attr_key")]
public string Key { get; set; } = default!;
/// <summary>
/// 获取或设置属性的值。
/// </summary>
[Newtonsoft.Json.JsonProperty("attr_value")]
[System.Text.Json.Serialization.JsonPropertyName("attr_value")]
public string Value { get; set; } = default!;
}
public class Express
{
/// <summary>
/// 获取或设置运费模板 ID。
/// </summary>
[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
{
/// <summary>
/// 获取或设置 SKU ID。
/// </summary>
[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; }
/// <summary>
/// 获取或设置商家自定义 SKU ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_sku_id")]
[System.Text.Json.Serialization.JsonPropertyName("out_sku_id")]
public string OutSKUId { get; set; } = default!;
/// <summary>
/// 获取或设置缩略图 URL。
/// </summary>
[Newtonsoft.Json.JsonProperty("thumb_img")]
[System.Text.Json.Serialization.JsonPropertyName("thumb_img")]
public string ThumbnailUrl { get; set; } = default!;
/// <summary>
/// 获取或设置售价(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("sale_price")]
[System.Text.Json.Serialization.JsonPropertyName("sale_price")]
public int SalePrice { get; set; }
/// <summary>
/// 获取或设置市场价(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("market_price")]
[System.Text.Json.Serialization.JsonPropertyName("market_price")]
public int MarketPrice { get; set; }
/// <summary>
/// 获取或设置库存。
/// </summary>
[Newtonsoft.Json.JsonProperty("stock_num")]
[System.Text.Json.Serialization.JsonPropertyName("stock_num")]
public int Stock { get; set; }
/// <summary>
/// 获取或设置商品编码。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_code")]
[System.Text.Json.Serialization.JsonPropertyName("sku_code")]
public string? SKUCode { get; set; }
/// <summary>
/// 获取或设置商品属性列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_attrs")]
[System.Text.Json.Serialization.JsonPropertyName("sku_attrs")]
public Attribute[]? AttributeList { get; set; }
/// <summary>
/// 获取或设置 SKU 状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
public int Status { get; set; }
}
public class Limitation
{
/// <summary>
/// 获取或设置限购周期类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("period_type")]
[System.Text.Json.Serialization.JsonPropertyName("period_type")]
public int PeriodType { get; set; }
/// <summary>
/// 获取或设置限购数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("limited_buy_num")]
[System.Text.Json.Serialization.JsonPropertyName("limited_buy_num")]
public int? LimitedBuyCount { get; set; }
}
}
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[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; }
/// <summary>
/// 获取或设置商家自定义商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_product_id")]
[System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
public string? OutProductId { get; set; }
/// <summary>
/// 获取或设置商品标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("title")]
[System.Text.Json.Serialization.JsonPropertyName("title")]
public string Title { get; set; } = default!;
/// <summary>
/// 获取或设置商品副标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_title")]
[System.Text.Json.Serialization.JsonPropertyName("sub_title")]
public string? SubTitle { get; set; }
/// <summary>
/// 获取或设置主图 URL 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("head_imgs")]
[System.Text.Json.Serialization.JsonPropertyName("head_imgs")]
public string[] HeadImageUrlList { get; set; } = default!;
/// <summary>
/// 获取或设置商品详情信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("desc_info")]
[System.Text.Json.Serialization.JsonPropertyName("desc_info")]
public Types.Detail Detail { get; set; } = default!;
/// <summary>
/// 获取或设置商品类目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("cats")]
[System.Text.Json.Serialization.JsonPropertyName("cats")]
public Types.Category[] CategoryList { get; set; } = default!;
/// <summary>
/// 获取或设置商品属性列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("attrs")]
[System.Text.Json.Serialization.JsonPropertyName("attrs")]
public Types.Attribute[]? AttributeList { get; set; }
/// <summary>
/// 获取或设置发货方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("deliver_method")]
[System.Text.Json.Serialization.JsonPropertyName("deliver_method")]
public int? DeliverMethod { get; set; }
/// <summary>
/// 获取或设置运费信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("express_info")]
[System.Text.Json.Serialization.JsonPropertyName("express_info")]
public Types.Express? Express { get; set; }
/// <summary>
/// 获取或设置售后说明。
/// </summary>
[Newtonsoft.Json.JsonProperty("aftersale_desc")]
[System.Text.Json.Serialization.JsonPropertyName("aftersale_desc")]
public string? AftersaleDescription { get; set; }
/// <summary>
/// 获取或设置商品状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
public int Status { get; set; }
/// <summary>
/// 获取或设置商品草稿状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("edit_status")]
[System.Text.Json.Serialization.JsonPropertyName("edit_status")]
public int EditingStatus { get; set; }
/// <summary>
/// 获取或设置 SKU 最低价格(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("min_price")]
[System.Text.Json.Serialization.JsonPropertyName("min_price")]
public int MinPrice { get; set; }
/// <summary>
/// 获取或设置 SKU 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("skus")]
[System.Text.Json.Serialization.JsonPropertyName("skus")]
public Types.SKU[]? SKUList { get; set; }
/// <summary>
/// 获取或设置限购信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("limited_info")]
[System.Text.Json.Serialization.JsonPropertyName("limited_info")]
public Types.Limitation? Limitation { get; set; }
}
}
/// <summary>
/// 获取或设置线上商品信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("product")]
[System.Text.Json.Serialization.JsonPropertyName("product")]
public Types.Product? Product { get; set; }
/// <summary>
/// 获取或设置草稿商品信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("edit_product")]
[System.Text.Json.Serialization.JsonPropertyName("edit_product")]
public Types.Product? EditingProduct { get; set; }
}
}

View File

@ -0,0 +1,30 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/list/get 接口的请求。</para>
/// </summary>
public class ChannelsECProductListGetRequest : WechatApiRequest, IInferable<ChannelsECProductListGetRequest, ChannelsECProductListGetResponse>
{
/// <summary>
/// 获取或设置商品状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
public int? Status { get; set; }
/// <summary>
/// 获取或设置翻页标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_key")]
[System.Text.Json.Serialization.JsonPropertyName("next_key")]
public string? Cursor { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// <para>默认值10</para>
/// </summary>
[Newtonsoft.Json.JsonProperty("page_size")]
[System.Text.Json.Serialization.JsonPropertyName("page_size")]
public int Limit { get; set; } = 10;
}
}

View File

@ -0,0 +1,30 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/list/get 接口的响应。</para>
/// </summary>
public class ChannelsECProductListGetResponse : WechatApiResponse
{
/// <summary>
/// 获取或设置商品 ID 列表。
/// </summary>
[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!;
/// <summary>
/// 获取或设置翻页标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_key")]
[System.Text.Json.Serialization.JsonPropertyName("next_key")]
public string? NextCursor { get; set; }
/// <summary>
/// 获取或设置总数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_num")]
[System.Text.Json.Serialization.JsonPropertyName("total_num")]
public int TotalCount { get; set; }
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/listing 接口的请求。</para>
/// </summary>
public class ChannelsECProductListingRequest : WechatApiRequest, IInferable<ChannelsECProductListingRequest, ChannelsECProductListingResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/listing 接口的响应。</para>
/// </summary>
public class ChannelsECProductListingResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,36 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/stock/update 接口的请求。</para>
/// </summary>
public class ChannelsECProductStockUpdateRequest : WechatApiRequest, IInferable<ChannelsECProductStockUpdateRequest, ChannelsECProductStockUpdateResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置 SKU ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_id")]
[System.Text.Json.Serialization.JsonPropertyName("sku_id")]
public long SKUId { get; set; }
/// <summary>
/// 获取或设置修改类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("diff_type")]
[System.Text.Json.Serialization.JsonPropertyName("diff_type")]
public int DiffType { get; set; }
/// <summary>
/// 获取或设置修改数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("num")]
[System.Text.Json.Serialization.JsonPropertyName("num")]
public int DiffCount { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/stock/update 接口的响应。</para>
/// </summary>
public class ChannelsECProductStockUpdateResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,178 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/update 接口的请求。</para>
/// </summary>
public class ChannelsECProductUpdateRequest : WechatApiRequest, IInferable<ChannelsECProductUpdateRequest, ChannelsECProductUpdateResponse>
{
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
{
/// <summary>
/// 获取或设置 SKU ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_id")]
[System.Text.Json.Serialization.JsonPropertyName("sku_id")]
public long SKUId { get; set; }
/// <summary>
/// 获取或设置缩略图 URL。
/// </summary>
[Newtonsoft.Json.JsonProperty("thumb_img")]
[System.Text.Json.Serialization.JsonPropertyName("thumb_img")]
public string ThumbnailUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置售价(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("sale_price")]
[System.Text.Json.Serialization.JsonPropertyName("sale_price")]
public int SalePrice { get; set; }
/// <summary>
/// 获取或设置市场价(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("market_price")]
[System.Text.Json.Serialization.JsonPropertyName("market_price")]
public int MarketPrice { get; set; }
/// <summary>
/// 获取或设置库存。
/// </summary>
[Newtonsoft.Json.JsonProperty("stock_num")]
[System.Text.Json.Serialization.JsonPropertyName("stock_num")]
public int Stock { get; set; }
/// <summary>
/// 获取或设置商品编码。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_code")]
[System.Text.Json.Serialization.JsonPropertyName("sku_code")]
public string? SKUCode { get; set; }
/// <summary>
/// 获取或设置商品属性列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("sku_attrs")]
[System.Text.Json.Serialization.JsonPropertyName("sku_attrs")]
public IList<Attribute>? AttributeList { get; set; }
}
public class Limitation : ChannelsECProductAddRequest.Types.Limitation
{
}
}
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置商品标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("title")]
[System.Text.Json.Serialization.JsonPropertyName("title")]
public string Title { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商品副标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_title")]
[System.Text.Json.Serialization.JsonPropertyName("sub_title")]
public string? SubTitle { get; set; }
/// <summary>
/// 获取或设置主图 URL 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("head_imgs")]
[System.Text.Json.Serialization.JsonPropertyName("head_imgs")]
public IList<string> HeadImageUrlList { get; set; } = new List<string>();
/// <summary>
/// 获取或设置商品详情信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("desc_info")]
[System.Text.Json.Serialization.JsonPropertyName("desc_info")]
public Types.Detail Detail { get; set; } = new Types.Detail();
/// <summary>
/// 获取或设置商品类目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("cats")]
[System.Text.Json.Serialization.JsonPropertyName("cats")]
public IList<Types.Category> CategoryList { get; set; } = new List<Types.Category>();
/// <summary>
/// 获取或设置商品属性列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("attrs")]
[System.Text.Json.Serialization.JsonPropertyName("attrs")]
public IList<Types.Attribute>? AttributeList { get; set; }
/// <summary>
/// 获取或设置发货方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("deliver_method")]
[System.Text.Json.Serialization.JsonPropertyName("deliver_method")]
public int? DeliverMethod { get; set; }
/// <summary>
/// 获取或设置运费信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("express_info")]
[System.Text.Json.Serialization.JsonPropertyName("express_info")]
public Types.Express? Express { get; set; }
/// <summary>
/// 获取或设置售后说明。
/// </summary>
[Newtonsoft.Json.JsonProperty("aftersale_desc")]
[System.Text.Json.Serialization.JsonPropertyName("aftersale_desc")]
public string? AftersaleDescription { get; set; }
/// <summary>
/// 获取或设置 SKU 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("skus")]
[System.Text.Json.Serialization.JsonPropertyName("skus")]
public IList<Types.SKU>? SKUList { get; set; }
/// <summary>
/// 获取或设置限购信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("limited_info")]
[System.Text.Json.Serialization.JsonPropertyName("limited_info")]
public Types.Limitation? Limitation { get; set; }
/// <summary>
/// 获取或设置更新后是否立即上架。
/// </summary>
[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; }
}
}

View File

@ -0,0 +1,40 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/update 接口的响应。</para>
/// </summary>
public class ChannelsECProductUpdateResponse : WechatApiResponse
{
public static class Types
{
public class Data
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[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; }
/// <summary>
/// 获取或设置更新时间。
/// </summary>
[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; }
}
}
/// <summary>
/// 获取或设置返回数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("data")]
[System.Text.Json.Serialization.JsonPropertyName("data")]
public Types.Data Data { get; set; } = default!;
}
}

View File

@ -198,7 +198,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
/// </summary>
[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; }
/// <summary>
/// 获取或设置 SKU 列表。

View File

@ -0,0 +1,12 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "product_spu_audit",
"ProductSpuAudit": {
"product_id": "12345678",
"status": 3,
"reason": "abc"
}
}

View File

@ -0,0 +1,12 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "product_spu_listing",
"ProductSpuListing": {
"product_id": "12345678",
"status": 3,
"reason": "abc"
}
}

View File

@ -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": "主机+保护套"
}
]
}
]
}

View File

@ -0,0 +1,8 @@
{
"errcode": 0,
"errmsg": "ok",
"data": {
"product_id": 23423523452345235,
"create_time": "2020-03-25 12:05:25"
}
}

View File

@ -0,0 +1,5 @@
{
"product_id": "324545",
"data_type": 1
}

View File

@ -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
}
}

View File

@ -0,0 +1,5 @@
{
"status": 5,
"page_size": 10,
"next_key": "THE_NEXT_KEY"
}

View File

@ -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
}

View File

@ -0,0 +1,6 @@
{
"product_id": "324545",
"sku_id": "9328425",
"diff_type": 1,
"num": 10
}

View File

@ -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": "标配"
}
]
}
]
}

View File

@ -0,0 +1,8 @@
{
"errcode": 0,
"errmsg": "ok",
"data": {
"product_id": "23423523452345235",
"update_time": "2020-06-20 10:00:00"
}
}