diff --git a/docs/WechatApi/README.md b/docs/WechatApi/README.md
index c7599cc2..3b9eec70 100644
--- a/docs/WechatApi/README.md
+++ b/docs/WechatApi/README.md
@@ -57,7 +57,7 @@
| √ | 小程序搜索 | 小程序 | |
| √ | 服务市场 | 小程序 | |
| √ | 生物认证 | 小程序 | |
- | × | 行业能力乘车码 | 小程序 | _开发中_ |
+ | × | 行业能力:乘车码 | 小程序 | _开发中_ |
| √ | 城市服务 | 小程序 | |
| √ | 虚拟支付 | 小游戏 | |
| √ | 开放数据 | 小游戏 | |
@@ -81,7 +81,7 @@
| √ | 优惠券管理 | 小商店 | |
| √ | 店铺管理 | 小商店 | |
| √ | 商家地址管理 | 小商店 | |
- | × | 自定义交易组件 | 小商店 | _开发中_ |
+ | √ | 自定义交易组件 | 小商店 | |
| √ | 小程序联盟 | 小商店 | |
| √ | 微信登录功能 | 开放平台 | |
| √ | 一次性订阅消息 | 开放平台 | |
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductAccountRegisterEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductAccountRegisterEvent.cs
new file mode 100644
index 00000000..e4f70090
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductAccountRegisterEvent.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 EVENT.open_product_account_register 事件的数据。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/callback/account_register.html
+ ///
+ public class OpenProductAccountRegisterEvent : WechatApiEvent, WechatApiEvent.Types.IJsonSerializable, WechatApiEvent.Types.IXmlSerializable
+ {
+ public new static class Types
+ {
+ public class EventData
+ {
+ ///
+ /// 获取或设置开通状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ [System.Xml.Serialization.XmlElement("status")]
+ public int Status { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置事件数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("OpenProductAccountRegister")]
+ [System.Text.Json.Serialization.JsonPropertyName("OpenProductAccountRegister")]
+ [System.Xml.Serialization.XmlElement("OpenProductAccountRegister")]
+ public Types.EventData EventData { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductBrandAuditEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductBrandAuditEvent.cs
new file mode 100644
index 00000000..02bf9955
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductBrandAuditEvent.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 EVENT.open_product_brand_audit 事件的数据。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/callback/brand_audit.html
+ ///
+ public class OpenProductBrandAuditEvent : WechatApiEvent, WechatApiEvent.Types.IJsonSerializable, WechatApiEvent.Types.IXmlSerializable
+ {
+ public new static class Types
+ {
+ public class EventData : OpenProductCategoryAuditEvent.Types.EventData
+ {
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ [System.Xml.Serialization.XmlElement("brand_id")]
+ public int BrandId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置事件数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("QualificationAuditResult")]
+ [System.Text.Json.Serialization.JsonPropertyName("QualificationAuditResult")]
+ [System.Xml.Serialization.XmlElement("QualificationAuditResult")]
+ public Types.EventData EventData { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductCategoryAuditEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductCategoryAuditEvent.cs
new file mode 100644
index 00000000..fad13f5a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductCategoryAuditEvent.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 EVENT.open_product_category_audit 事件的数据。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/callback/category_audit.html
+ ///
+ public class OpenProductCategoryAuditEvent : WechatApiEvent, WechatApiEvent.Types.IJsonSerializable, WechatApiEvent.Types.IXmlSerializable
+ {
+ public new static class Types
+ {
+ public class EventData
+ {
+ ///
+ /// 获取或设置审核状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ [System.Xml.Serialization.XmlElement("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置审核单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_id")]
+ [System.Xml.Serialization.XmlElement("audit_id")]
+ public string AuditId { get; set; } = default!;
+
+ ///
+ /// 获取或设置审核单类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_type")]
+ [System.Xml.Serialization.XmlElement("audit_type")]
+ public int AuditType { get; set; }
+
+ ///
+ /// 获取或设置拒绝原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("reject_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
+ [System.Xml.Serialization.XmlElement("reject_reason")]
+ public string? RejectReason { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置事件数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("QualificationAuditResult")]
+ [System.Text.Json.Serialization.JsonPropertyName("QualificationAuditResult")]
+ [System.Xml.Serialization.XmlElement("QualificationAuditResult")]
+ public Types.EventData EventData { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductSPUAuditEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductSPUAuditEvent.cs
new file mode 100644
index 00000000..d436cd3c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/OpenProduct/OpenProductSPUAuditEvent.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 EVENT.open_product_spu_audit 事件的数据。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/callback/spu_audit.html
+ ///
+ public class OpenProductSPUAuditEvent : WechatApiEvent, WechatApiEvent.Types.IJsonSerializable, WechatApiEvent.Types.IXmlSerializable
+ {
+ public new static class Types
+ {
+ public class EventData
+ {
+ ///
+ /// 获取或设置审核状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ [System.Xml.Serialization.XmlElement("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置商家自定义商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
+ [System.Xml.Serialization.XmlElement("out_product_id")]
+ public string OutProductId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ [System.Xml.Serialization.XmlElement("product_id")]
+ public long ProductId { get; set; }
+
+ ///
+ /// 获取或设置拒绝原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("reject_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
+ [System.Xml.Serialization.XmlElement("reject_reason")]
+ public string? RejectReason { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置事件数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("OpenProductSpuAudit")]
+ [System.Text.Json.Serialization.JsonPropertyName("OpenProductSpuAudit")]
+ [System.Xml.Serialization.XmlElement("OpenProductSpuAudit")]
+ public Types.EventData EventData { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteShopExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteShopExtensions.cs
new file mode 100644
index 00000000..de94277f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteShopExtensions.cs
@@ -0,0 +1,670 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api
+{
+ public static class WechatApiClientExecuteShopExtensions
+ {
+ ///
+ /// 异步调用 [POST] /shop/img/upload 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/public/upload_img.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopImageUploadAsync(this WechatApiClient client, Models.ShopImageUploadRequest 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(HttpMethod.Post, "shop", "img", "upload")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x");
+ string filename = "image.png";
+ var httpContent = new MultipartFormDataContent(boundary);
+ var fileContent = new ByteArrayContent(request.ImageFileBytes ?? new byte[0]);
+ httpContent.Add(fileContent, "\"media\"", "\"" + filename + "\"");
+ fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png");
+ fileContent.Headers.ContentLength = request.ImageFileBytes?.Length;
+ httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary);
+ return await client.SendRequestAsync(flurlReq, content: httpContent, cancellationToken: cancellationToken);
+ }
+
+ #region Register
+ ///
+ /// 异步调用 [POST] /shop/register/apply 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/enter/enter_apply.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopRegisterApplyAsync(this WechatApiClient client, Models.ShopRegisterApplyRequest 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(HttpMethod.Post, "shop", "register", "apply")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/register/check 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/enter/enter_check.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopRegisterCheckAsync(this WechatApiClient client, Models.ShopRegisterCheckRequest 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(HttpMethod.Post, "shop", "register", "check")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Category
+ ///
+ /// 异步调用 [POST] /shop/cat/get 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/cat/get_children_cateogry.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopCategoryGetAsync(this WechatApiClient client, Models.ShopCategoryGetRequest 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(HttpMethod.Post, "shop", "cat", "get")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Audit
+ ///
+ /// 异步调用 [POST] /shop/audit/audit_brand 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/audit/audit_brand.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAuditAuditBrandAsync(this WechatApiClient client, Models.ShopAuditAuditBrandRequest 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(HttpMethod.Post, "shop", "audit", "audit_brand")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/audit/audit_category 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/audit/audit_category.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAuditAuditCategoryAsync(this WechatApiClient client, Models.ShopAuditAuditCategoryRequest 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(HttpMethod.Post, "shop", "audit", "audit_category")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/audit/result 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/audit/audit_result.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAuditResultAsync(this WechatApiClient client, Models.ShopAuditResultRequest 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(HttpMethod.Post, "shop", "audit", "result")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/audit/get_miniapp_certificate 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/audit/get_miniapp_certificate.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAuditGetMiniAppCertificateAsync(this WechatApiClient client, Models.ShopAuditGetMiniAppCertificateRequest 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(HttpMethod.Post, "shop", "audit", "get_miniapp_certificate")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Account
+ ///
+ /// 异步调用 [POST] /shop/account/get_category_list 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/account/category_list.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAccountGetCategoryListAsync(this WechatApiClient client, Models.ShopAccountGetCategoryListRequest 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(HttpMethod.Post, "shop", "account", "get_category_list")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/account/get_brand_list 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/account/brand_list.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAccountGetBrandListAsync(this WechatApiClient client, Models.ShopAccountGetBrandListRequest 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(HttpMethod.Post, "shop", "account", "get_brand_list")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/account/get_info 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/account/get_info.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAccountGetInfoAsync(this WechatApiClient client, Models.ShopAccountGetInfoRequest 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(HttpMethod.Post, "shop", "account", "get_info")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/account/update_info 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/account/update_info.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAccountUpdateInfoAsync(this WechatApiClient client, Models.ShopAccountUpdateInfoRequest 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(HttpMethod.Post, "shop", "account", "update_info")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region SPU
+ ///
+ /// 异步调用 [POST] /shop/spu/add 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/SPU/add_spu.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUAddAsync(this WechatApiClient client, Models.ShopSPUAddRequest 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(HttpMethod.Post, "shop", "spu", "add")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/spu/update 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/SPU/update_spu.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUUpdateAsync(this WechatApiClient client, Models.ShopSPUUpdateRequest 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(HttpMethod.Post, "shop", "spu", "update")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/spu/del 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/SPU/del_spu.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUDeleteAsync(this WechatApiClient client, Models.ShopSPUDeleteRequest 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(HttpMethod.Post, "shop", "spu", "del")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/spu/del_audit 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/SPU/del_spu_audit.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUDeleteAuditAsync(this WechatApiClient client, Models.ShopSPUDeleteAuditRequest 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(HttpMethod.Post, "shop", "spu", "del_audit")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/spu/get 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/SPU/get_spu.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUGetAsync(this WechatApiClient client, Models.ShopSPUGetRequest 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(HttpMethod.Post, "shop", "spu", "get")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/spu/get_list 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/check_scene.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUGetListAsync(this WechatApiClient client, Models.ShopSPUGetListRequest 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(HttpMethod.Post, "shop", "spu", "get_list")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/spu/listing 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/SPU/listing_spu.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUListingAsync(this WechatApiClient client, Models.ShopSPUListingRequest 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(HttpMethod.Post, "shop", "spu", "listing")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/spu/delisting 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/SPU/delisting_spu.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSPUDelistingAsync(this WechatApiClient client, Models.ShopSPUDelistingRequest 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(HttpMethod.Post, "shop", "spu", "delisting")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Order
+ ///
+ /// 异步调用 [POST] /shop/scene/check 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/check_scene.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopSceneCheckAsync(this WechatApiClient client, Models.ShopSceneCheckRequest 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(HttpMethod.Post, "shop", "scene", "check")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/order/add 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/add_order.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopOrderAddAsync(this WechatApiClient client, Models.ShopOrderAddRequest 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(HttpMethod.Post, "shop", "order", "add")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/order/pay 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/pay_order.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopOrderPayAsync(this WechatApiClient client, Models.ShopOrderPayRequest 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(HttpMethod.Post, "shop", "order", "pay")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/order/get 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/get_order.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopOrderGetAsync(this WechatApiClient client, Models.ShopOrderGetRequest 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(HttpMethod.Post, "shop", "order", "get")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Delivery
+ ///
+ /// 异步调用 [POST] /shop/delivery/get_company_list 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/delivery/get_company_list.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopDeliveryGetCompanyListAsync(this WechatApiClient client, Models.ShopDeliveryGetCompanyListRequest 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(HttpMethod.Post, "shop", "delivery", "get_company_list")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/delivery/send 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/delivery/send.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopDeliverySendAsync(this WechatApiClient client, Models.ShopDeliverySendRequest 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(HttpMethod.Post, "shop", "delivery", "send")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/delivery/recieve 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/delivery/recieve.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopDeliveryReceiveAsync(this WechatApiClient client, Models.ShopDeliveryReceiveRequest 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(HttpMethod.Post, "shop", "delivery", "recieve")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Aftersale
+ ///
+ /// 异步调用 [POST] /shop/aftersale/add 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/aftersale/add.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAftersaleAddAsync(this WechatApiClient client, Models.ShopAftersaleAddRequest 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(HttpMethod.Post, "shop", "aftersale", "add")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/aftersale/update 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/aftersale/update.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAftersaleUpdateAsync(this WechatApiClient client, Models.ShopAftersaleUpdateRequest 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(HttpMethod.Post, "shop", "aftersale", "update")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /shop/aftersale/get 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/aftersale/get.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteShopAftersaleGetAsync(this WechatApiClient client, Models.ShopAftersaleGetRequest 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(HttpMethod.Post, "shop", "aftersale", "get")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetBrandListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetBrandListRequest.cs
new file mode 100644
index 00000000..0be3d1bc
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetBrandListRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/get_brand_list 接口的请求。
+ ///
+ public class ShopAccountGetBrandListRequest : WechatApiRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetBrandListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetBrandListResponse.cs
new file mode 100644
index 00000000..5d1e207c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetBrandListResponse.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/get_brand_list 接口的响应。
+ ///
+ public class ShopAccountGetBrandListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Brand
+ {
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public int BrandId { get; set; }
+
+ ///
+ /// 获取或设置品牌词。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_wording")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_wording")]
+ public string BrandWording { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置品牌列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public Types.Brand[] BrandList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetCategoryListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetCategoryListRequest.cs
new file mode 100644
index 00000000..91f8d232
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetCategoryListRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/get_category_list 接口的请求。
+ ///
+ public class ShopAccountGetCategoryListRequest : WechatApiRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetCategoryListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetCategoryListResponse.cs
new file mode 100644
index 00000000..0d97cb9c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetCategoryListResponse.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/get_category_list 接口的响应。
+ ///
+ public class ShopAccountGetCategoryListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Category : ShopCategoryGetResponse.Types.Category
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置类目列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public Types.Category[] CategoryList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetInfoRequest.cs
new file mode 100644
index 00000000..c5388a69
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetInfoRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/get_info 接口的请求。
+ ///
+ public class ShopAccountGetInfoRequest : WechatApiRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetInfoResponse.cs
new file mode 100644
index 00000000..f0ada0f5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountGetInfoResponse.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/get_info 接口的响应。
+ ///
+ public class ShopAccountGetInfoResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置客服页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_agent_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_agent_path")]
+ public string? ServiceAgentPagePath { get; set; }
+
+ ///
+ /// 获取或设置客服联系电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_agent_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_agent_phone")]
+ public string? ServiceAgentPhoneNumber { 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/Shop/Account/ShopAccountUpdateInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountUpdateInfoRequest.cs
new file mode 100644
index 00000000..45cdf808
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountUpdateInfoRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/update_info 接口的请求。
+ ///
+ public class ShopAccountUpdateInfoRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置客服页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_agent_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_agent_path")]
+ public string? ServiceAgentPagePath { get; set; }
+
+ ///
+ /// 获取或设置客服联系电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_agent_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_agent_phone")]
+ public string? ServiceAgentPhoneNumber { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountUpdateInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountUpdateInfoResponse.cs
new file mode 100644
index 00000000..e18436b0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Account/ShopAccountUpdateInfoResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/account/update_info 接口的响应。
+ ///
+ public class ShopAccountUpdateInfoResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleAddRequest.cs
new file mode 100644
index 00000000..7cebd83b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleAddRequest.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/aftersale/add 接口的请求。
+ ///
+ public class ShopAftersaleAddRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class Product
+ {
+ ///
+ /// 获取或设置商家自定义商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
+ public string OutProductId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家自定义 SKU ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_sku_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_sku_id")]
+ public string OutSKUId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置参与售后的商品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_cnt")]
+ public int? Count { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商家自定义订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家自定义售后单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_aftersale_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_aftersale_id")]
+ public string OutAftersaleOrderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置小程序该售后单的页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置售后类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置售后状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置发起申请时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置是否处理完成。
+ ///
+ [Newtonsoft.Json.JsonProperty("finish_all_aftersale")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumberTypedBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("finish_all_aftersale")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedBooleanConverter))]
+ public bool IsFinishAll { get; set; }
+
+ ///
+ /// 获取或设置商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_infos")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_infos")]
+ public IList ProductList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleAddResponse.cs
new file mode 100644
index 00000000..63330aa2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleAddResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/aftersale/add 接口的响应。
+ ///
+ public class ShopAftersaleAddResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleGetRequest.cs
new file mode 100644
index 00000000..436a9ee0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleGetRequest.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/aftersale/get 接口的请求。
+ ///
+ public class ShopAftersaleGetRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置订单 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long? OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string? OutOrderId { get; set; }
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleGetResponse.cs
new file mode 100644
index 00000000..8aeb959a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleGetResponse.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/aftersale/get 接口的响应。
+ ///
+ public class ShopAftersaleGetResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class AftersaleOrder
+ {
+ public static class Types
+ {
+ public class Product
+ {
+ ///
+ /// 获取或设置商家自定义商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
+ public string OutProductId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商家自定义 SKU ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_sku_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_sku_id")]
+ public string OutSKUId { get; set; } = default!;
+
+ ///
+ /// 获取或设置参与售后的商品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_cnt")]
+ public int? Count { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商家自定义售后单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_aftersale_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_aftersale_id")]
+ public string OutAftersaleOrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置小程序该售后单的页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置售后类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置售后状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置发起申请时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_infos")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_infos")]
+ public Types.Product[] ProductList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置售后单列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("aftersale_infos")]
+ [System.Text.Json.Serialization.JsonPropertyName("aftersale_infos")]
+ public Types.AftersaleOrder[] AftersaleOrderList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleUpdateRequest.cs
new file mode 100644
index 00000000..9dfaccf6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleUpdateRequest.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/aftersale/update 接口的请求。
+ ///
+ public class ShopAftersaleUpdateRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置商家自定义订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家自定义售后单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_aftersale_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_aftersale_id")]
+ public string OutAftersaleOrderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置售后状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置是否处理完成。
+ ///
+ [Newtonsoft.Json.JsonProperty("finish_all_aftersale")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumberTypedBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("finish_all_aftersale")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedBooleanConverter))]
+ public bool IsFinishAll { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleUpdateResponse.cs
new file mode 100644
index 00000000..815733a0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Aftersale/ShopAftersaleUpdateResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/aftersale/update 接口的响应。
+ ///
+ public class ShopAftersaleUpdateResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditBrandRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditBrandRequest.cs
new file mode 100644
index 00000000..72b2654a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditBrandRequest.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/audit_brand 接口的请求。
+ ///
+ public class ShopAuditAuditBrandRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class Audit
+ {
+ public static class Types
+ {
+ public class Brand
+ {
+ ///
+ /// 获取或设置认证审核类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_audit_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_audit_type")]
+ public int BrandAuditType { get; set; }
+
+ ///
+ /// 获取或设置品牌经营类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_management_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_management_type")]
+ public int BrandManagementType { get; set; }
+
+ ///
+ /// 获取或设置商标分类。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_type")]
+ public string TrademarkType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品产地类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("commodity_origin_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("commodity_origin_type")]
+ public int CommodityOriginType { get; set; }
+
+ ///
+ /// 获取或设置商标或品牌词。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_wording")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_wording")]
+ public string BrandWording { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置销售授权书图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("sale_authorization")]
+ [System.Text.Json.Serialization.JsonPropertyName("sale_authorization")]
+ public IList? SaleAuthorizationUrlList { get; set; }
+
+ ///
+ /// 获取或设置商标注册证书图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_registration_certificate")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_registration_certificate")]
+ public IList? TrademarkRegistrationCertificateUrlList { get; set; }
+
+ ///
+ /// 获取或设置商标变更证明图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_change_certificate")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_change_certificate")]
+ public IList? TrademarkChangeCertificateUrlList { get; set; }
+
+ ///
+ /// 获取或设置商标注册人姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_registrant")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_registrant")]
+ public string? TrademarkRegistrant { get; set; }
+
+ ///
+ /// 获取或设置商标注册号或申请号。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_registrant_nu")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_registrant_nu")]
+ public string? TrademarkRegistrantNumber { get; set; }
+
+ ///
+ /// 获取或设置商标有效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_authorization_period")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_authorization_period")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? TrademarkAuthorizationTime { get; set; }
+
+ ///
+ /// 获取或设置商标注册申请受理通知书图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_registration_application")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_registration_application")]
+ public IList? TrademarkRegistrationApplicationUrlList { get; set; }
+
+ ///
+ /// 获取或设置商标申请人姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_applicant")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_applicant")]
+ public string? TrademarkApplicant { get; set; }
+
+ ///
+ /// 获取或设置商标申请时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_application_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_application_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? TrademarkApplicationTime { get; set; }
+
+ ///
+ /// 获取或设置海关进口货物报关单图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("imported_goods_form")]
+ [System.Text.Json.Serialization.JsonPropertyName("imported_goods_form")]
+ public IList? ImportedGoodsFormUrlList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置营业执照或组织机构代码证图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("license")]
+ [System.Text.Json.Serialization.JsonPropertyName("license")]
+ public string LicenseUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_info")]
+ public Types.Brand Brand { get; set; } = new Types.Brand();
+ }
+ }
+
+ ///
+ /// 获取或设置审核单信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_req")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_req")]
+ public Types.Audit Audit { get; set; } = new Types.Audit();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditBrandResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditBrandResponse.cs
new file mode 100644
index 00000000..a5efe18d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditBrandResponse.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/audit_brand 接口的响应。
+ ///
+ public class ShopAuditAuditBrandResponse : WechatApiResponse
+ {
+ ///
+ /// 获取或设置审核单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_id")]
+ public string AuditId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditCategoryRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditCategoryRequest.cs
new file mode 100644
index 00000000..b9f49116
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditCategoryRequest.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/audit_category 接口的请求。
+ ///
+ public class ShopAuditAuditCategoryRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class Audit
+ {
+ public static class Types
+ {
+ public class Category
+ {
+ ///
+ /// 获取或设置一级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("level1")]
+ [System.Text.Json.Serialization.JsonPropertyName("level1")]
+ public int FirstCategoryId { get; set; }
+
+ ///
+ /// 获取或设置二级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("level2")]
+ [System.Text.Json.Serialization.JsonPropertyName("level2")]
+ public int SecondCategroyId { get; set; }
+
+ ///
+ /// 获取或设置三级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("level3")]
+ [System.Text.Json.Serialization.JsonPropertyName("level3")]
+ public int ThirdCategroyId { get; set; }
+
+ ///
+ /// 获取或设置资质材料图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("certificate")]
+ [System.Text.Json.Serialization.JsonPropertyName("certificate")]
+ public IList? QualificationUrlList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置营业执照或组织机构代码证图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("license")]
+ [System.Text.Json.Serialization.JsonPropertyName("license")]
+ public string LicenseUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置类目信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("category_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("category_info")]
+ public Types.Category Category { get; set; } = new Types.Category();
+ }
+ }
+
+ ///
+ /// 获取或设置审核单信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_req")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_req")]
+ public Types.Audit Audit { get; set; } = new Types.Audit();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditCategoryResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditCategoryResponse.cs
new file mode 100644
index 00000000..d1225240
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditAuditCategoryResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/audit_category 接口的响应。
+ ///
+ public class ShopAuditAuditCategoryResponse : ShopAuditAuditBrandResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditGetMiniAppCertificateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditGetMiniAppCertificateRequest.cs
new file mode 100644
index 00000000..630b284c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditGetMiniAppCertificateRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/get_miniapp_certificate 接口的请求。
+ ///
+ public class ShopAuditGetMiniAppCertificateRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置请求类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("req_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("req_type")]
+ public int RequestType { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditGetMiniAppCertificateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditGetMiniAppCertificateResponse.cs
new file mode 100644
index 00000000..2f6fa73f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditGetMiniAppCertificateResponse.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/get_miniapp_certificate 接口的响应。
+ ///
+ public class ShopAuditGetMiniAppCertificateResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Brand
+ {
+ ///
+ /// 获取或设置商标或品牌词。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_wording")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_wording")]
+ public string BrandWording { get; set; } = default!;
+
+ ///
+ /// 获取或设置销售授权书图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("sale_authorization")]
+ [System.Text.Json.Serialization.JsonPropertyName("sale_authorization")]
+ public string[]? SaleAuthorizationUrlList { get; set; }
+
+ ///
+ /// 获取或设置商标注册证书图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("trademark_registration_certificate")]
+ [System.Text.Json.Serialization.JsonPropertyName("trademark_registration_certificate")]
+ public string[]? TrademarkRegistrationCertificateUrlList { get; set; }
+ }
+
+ public class Category
+ {
+ ///
+ /// 获取或设置一级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("first_category_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("first_category_id")]
+ public int FirstCategoryId { get; set; }
+
+ ///
+ /// 获取或设置一级类目名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("first_category_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("first_category_name")]
+ public string FirstCategoryName { get; set; } = default!;
+
+ ///
+ /// 获取或设置二级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("second_category_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("second_category_id")]
+ public int SecondCategroyId { get; set; }
+
+ ///
+ /// 获取或设置二级类目名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("second_category_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("second_category_name")]
+ public string SecondCategoryName { get; set; } = default!;
+
+ ///
+ /// 获取或设置资质材料图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("certificate_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("certificate_url")]
+ public string[]? QualificationUrlList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置品牌信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_info")]
+ public Types.Brand? Brand { get; set; }
+
+ ///
+ /// 获取或设置分类列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("category_info_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("category_info_list")]
+ public Types.Category[]? CategoryList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditResultRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditResultRequest.cs
new file mode 100644
index 00000000..d746f718
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditResultRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/result 接口的请求。
+ ///
+ public class ShopAuditResultRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置审核单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_id")]
+ public string AuditId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditResultResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditResultResponse.cs
new file mode 100644
index 00000000..c506605f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Audit/ShopAuditResultResponse.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/audit/result 接口的响应。
+ ///
+ public class ShopAuditResultResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置审核状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public int? BrandId { get; set; }
+
+ ///
+ /// 获取或设置拒绝原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("reject_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
+ public string? RejectReason { 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/Shop/Category/ShopCategoryGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Category/ShopCategoryGetRequest.cs
new file mode 100644
index 00000000..58d946e6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Category/ShopCategoryGetRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/cat/get 接口的请求。
+ ///
+ public class ShopCategoryGetRequest : WechatApiRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Category/ShopCategoryGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Category/ShopCategoryGetResponse.cs
new file mode 100644
index 00000000..f95d9006
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Category/ShopCategoryGetResponse.cs
@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/cat/get 接口的响应。
+ ///
+ public class ShopCategoryGetResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Category
+ {
+ ///
+ /// 获取或设置一级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("first_cat_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("first_cat_id")]
+ public int FirstCategoryId { get; set; }
+
+ ///
+ /// 获取或设置一级类目 ID 名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("first_cat_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("first_cat_name")]
+ public string FirstCategoryName { get; set; } = default!;
+
+ ///
+ /// 获取或设置二级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("second_cat_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("second_cat_id")]
+ public int SecondCategoryId { get; set; }
+
+ ///
+ /// 获取或设置二级类目 ID 名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("second_cat_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("second_cat_name")]
+ public string SecondCategoryName { get; set; } = default!;
+
+ ///
+ /// 获取或设置三级类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_cat_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_cat_id")]
+ public int ThirdCategoryId { get; set; }
+
+ ///
+ /// 获取或设置三级类目 ID 名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_cat_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_cat_name")]
+ public string ThirdCategoryName { get; set; } = default!;
+
+ ///
+ /// 获取或设置类目资质类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("qualification_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("qualification_type")]
+ public int QualificationType { get; set; }
+
+ ///
+ /// 获取或设置类目资质。
+ ///
+ [Newtonsoft.Json.JsonProperty("qualification")]
+ [System.Text.Json.Serialization.JsonPropertyName("qualification")]
+ public string? Qualification { get; set; }
+
+ ///
+ /// 获取或设置商品资质类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_qualification_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_qualification_type")]
+ public int ProductQualificationType { get; set; }
+
+ ///
+ /// 获取或设置商品资质。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_qualification")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_qualification")]
+ public string? ProductQualification { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置类目列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_cat_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_cat_list")]
+ public Types.Category[] CategoryList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryGetCompanyListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryGetCompanyListRequest.cs
new file mode 100644
index 00000000..c78113e3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryGetCompanyListRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/delivery/get_company_list 接口的请求。
+ ///
+ public class ShopDeliveryGetCompanyListRequest : WechatApiRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryGetCompanyListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryGetCompanyListResponse.cs
new file mode 100644
index 00000000..aa637815
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryGetCompanyListResponse.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/delivery/get_company_list 接口的响应。
+ ///
+ public class ShopDeliveryGetCompanyListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class DeliveryCompanyList
+ {
+ ///
+ /// 获取或设置快递公司列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("company_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("company_list")]
+ public DeliveryCompanyItem[] Items { get; set; } = default!;
+ }
+
+ public class DeliveryCompanyItem
+ {
+ ///
+ /// 获取或设置快递公司 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_id")]
+ public string DeliveryId { get; set; } = default!;
+
+ ///
+ /// 获取或设置快递公司名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_name")]
+ public string DeliveryName { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置快递公司列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public Types.DeliveryCompanyList DeliveryCompanyList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryReceiveRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryReceiveRequest.cs
new file mode 100644
index 00000000..2ca9869f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryReceiveRequest.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/delivery/recieve 接口的请求。
+ ///
+ public class ShopDeliveryReceiveRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置订单 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long? OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string? OutOrderId { get; set; }
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryReceiveResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryReceiveResponse.cs
new file mode 100644
index 00000000..c535f78e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliveryReceiveResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/delivery/recieve 接口的响应。
+ ///
+ public class ShopDeliveryReceiveResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliverySendRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliverySendRequest.cs
new file mode 100644
index 00000000..72bc9fb8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliverySendRequest.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/delivery/send 接口的请求。
+ ///
+ public class ShopDeliverySendRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class Delivery
+ {
+ ///
+ /// 获取或设置快递公司 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_id")]
+ public string DeliveryId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置快递单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("waybill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("waybill_id")]
+ public string? WaybillId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long? OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string? OutOrderId { get; set; }
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否发货完成。
+ ///
+ [Newtonsoft.Json.JsonProperty("finish_all_delivery")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumberTypedBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("finish_all_delivery")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedBooleanConverter))]
+ public bool IsFinishAll { get; set; }
+
+ ///
+ /// 获取或设置快递列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_list")]
+ public IList DeliveryList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliverySendResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliverySendResponse.cs
new file mode 100644
index 00000000..cc936d7e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Delivery/ShopDeliverySendResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/delivery/send 接口的响应。
+ ///
+ public class ShopDeliverySendResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderAddRequest.cs
new file mode 100644
index 00000000..48b8db22
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderAddRequest.cs
@@ -0,0 +1,292 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/order/add 接口的请求。
+ ///
+ public class ShopOrderAddRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class OrderDetail
+ {
+ public static class Types
+ {
+ public class Product
+ {
+ ///
+ /// 获取或设置商家自定义商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
+ public string OutProductId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家自定义 SKU ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_sku_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_sku_id")]
+ public string OutSKUId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_cnt")]
+ public int Count { get; set; }
+
+ ///
+ /// 获取或设置商品售价(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("sale_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("sale_price")]
+ public int SalePrice { get; set; }
+
+ ///
+ /// 获取或设置小程序商品页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("title")]
+ [System.Text.Json.Serialization.JsonPropertyName("title")]
+ public string Title { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品头图 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("head_img")]
+ [System.Text.Json.Serialization.JsonPropertyName("head_img")]
+ public string HeadImageUrl { get; set; } = string.Empty;
+ }
+
+ public class Payment
+ {
+ ///
+ /// 获取或设置支付方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_method_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_method_type")]
+ public int PayType { get; set; }
+
+ ///
+ /// 获取或设置预支付单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("prepay_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("prepay_id")]
+ public string PrepayId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置预支付时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("prepay_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("prepay_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset PrepayTime { get; set; }
+ }
+
+ public class Amount
+ {
+ ///
+ /// 获取或设置订单金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_price")]
+ public int OrderFee { get; set; }
+
+ ///
+ /// 获取或设置运费(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("freight")]
+ [System.Text.Json.Serialization.JsonPropertyName("freight")]
+ public int FreightFee { get; set; }
+
+ ///
+ /// 获取或设置优惠金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("discounted_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("discounted_price")]
+ public int DiscountedFee { get; set; }
+
+ ///
+ /// 获取或设置附加金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("additional_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("additional_price")]
+ public int AdditionalPrice { get; set; }
+
+ ///
+ /// 获取或设置附加金额备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("additional_remarks")]
+ [System.Text.Json.Serialization.JsonPropertyName("additional_remarks")]
+ public string? AdditionalRemark { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_infos")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_infos")]
+ public IList ProductList { get; set; } = new List();
+
+ ///
+ /// 获取或设置支付信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_info")]
+ public Types.Payment Payment { get; set; } = new Types.Payment();
+
+ ///
+ /// 获取或设置金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("price_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("price_info")]
+ public Types.Amount Amount { get; set; } = new Types.Amount();
+ }
+
+ public class Delivery
+ {
+ ///
+ /// 获取或设置快递方式。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_type")]
+ public int DeliveryType { get; set; } = 1;
+ }
+
+ public class Address
+ {
+ ///
+ /// 获取或设置收件人姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("receiver_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("receiver_name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置国家。
+ ///
+ [Newtonsoft.Json.JsonProperty("country")]
+ [System.Text.Json.Serialization.JsonPropertyName("country")]
+ public string? Country { get; set; }
+
+ ///
+ /// 获取或设置省份。
+ ///
+ [Newtonsoft.Json.JsonProperty("province")]
+ [System.Text.Json.Serialization.JsonPropertyName("province")]
+ public string? Province { get; set; }
+
+ ///
+ /// 获取或设置城市。
+ ///
+ [Newtonsoft.Json.JsonProperty("city")]
+ [System.Text.Json.Serialization.JsonPropertyName("city")]
+ public string? City { get; set; }
+
+ ///
+ /// 获取或设置区县。
+ ///
+ [Newtonsoft.Json.JsonProperty("town")]
+ [System.Text.Json.Serialization.JsonPropertyName("town")]
+ public string? District { get; set; }
+
+ ///
+ /// 获取或设置详细地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("detailed_address")]
+ [System.Text.Json.Serialization.JsonPropertyName("detailed_address")]
+ public string Detail { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置联系电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("tel_number")]
+ [System.Text.Json.Serialization.JsonPropertyName("tel_number")]
+ public string TeleNumber { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置商家自定义订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家自定义用户标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_user_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_user_id")]
+ public string? OutUserId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置场景值。
+ ///
+ [Newtonsoft.Json.JsonProperty("scene")]
+ [System.Text.Json.Serialization.JsonPropertyName("scene")]
+ public int Scene { get; set; }
+
+ ///
+ /// 获取或设置小程序订单页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单详细信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_detail")]
+ public Types.OrderDetail OrderDetail { get; set; } = new Types.OrderDetail();
+
+ ///
+ /// 获取或设置快递信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_detail")]
+ public Types.Delivery Delivery { get; set; } = new Types.Delivery();
+
+ ///
+ /// 获取或设置地址信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("address_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("address_info")]
+ public Types.Address? Address { get; set; }
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderAddResponse.cs
new file mode 100644
index 00000000..28936419
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderAddResponse.cs
@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/order/add 接口的响应。
+ ///
+ public class ShopOrderAddResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置订单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置拉起收银台的票据。
+ ///
+ [Newtonsoft.Json.JsonProperty("ticket")]
+ [System.Text.Json.Serialization.JsonPropertyName("ticket")]
+ public string Ticket { get; set; } = default!;
+
+ ///
+ /// 获取或设置拉起收银台的票据有效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("ticket_expire_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("ticket_expire_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset TicketExpireTime { get; set; }
+
+ ///
+ /// 获取或设置订单最终价格(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("final_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("final_price")]
+ public int FinalFee { 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/Shop/Order/ShopOrderGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderGetRequest.cs
new file mode 100644
index 00000000..cc44f8b5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderGetRequest.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/order/get 接口的请求。
+ ///
+ public class ShopOrderGetRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置订单 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long? OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string? OutOrderId { get; set; }
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderGetResponse.cs
new file mode 100644
index 00000000..e1176002
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderGetResponse.cs
@@ -0,0 +1,292 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/order/get 接口的响应。
+ ///
+ public class ShopOrderGetResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Order
+ {
+ public static class Types
+ {
+ public class OrderDetail
+ {
+ public static class Types
+ {
+ public class Product
+ {
+ ///
+ /// 获取或设置商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ 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; } = default!;
+
+ ///
+ /// 获取或设置 SKU ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sku_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sku_id")]
+ 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!;
+
+ ///
+ /// 获取或设置商品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_cnt")]
+ public int Count { get; set; }
+
+ ///
+ /// 获取或设置商品售价(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("sale_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("sale_price")]
+ public int SalePrice { get; set; }
+ }
+
+ public class Payment
+ {
+ ///
+ /// 获取或设置支付方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_method")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_method")]
+ public string PayMethod { get; set; } = default!;
+
+ ///
+ /// 获取或设置预支付单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("prepay_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("prepay_id")]
+ public string PrepayId { get; set; } = default!;
+
+ ///
+ /// 获取或设置预支付时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("prepay_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("prepay_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset PrepayTime { get; set; }
+
+ ///
+ /// 获取或设置支付交易单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string? TransactionId { get; set; }
+
+ ///
+ /// 获取或设置付款时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? PayTime { get; set; }
+ }
+
+ public class Amount
+ {
+ ///
+ /// 获取或设置订单金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_price")]
+ public int OrderFee { get; set; }
+
+ ///
+ /// 获取或设置运费(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("freight")]
+ [System.Text.Json.Serialization.JsonPropertyName("freight")]
+ public int FreightFee { get; set; }
+
+ ///
+ /// 获取或设置优惠金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("discounted_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("discounted_price")]
+ public int DiscountedFee { get; set; }
+
+ ///
+ /// 获取或设置附加金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("additional_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("additional_price")]
+ public int AdditionalPrice { get; set; }
+
+ ///
+ /// 获取或设置附加金额备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("additional_remarks")]
+ [System.Text.Json.Serialization.JsonPropertyName("additional_remarks")]
+ public string? AdditionalRemark { get; set; }
+ }
+
+ public class Delivery
+ {
+ public static class Types
+ {
+ public class DeliveryDetail
+ {
+ ///
+ /// 获取或设置快递公司 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_id")]
+ public string DeliveryId { get; set; } = default!;
+
+ ///
+ /// 获取或设置快递单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("waybill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("waybill_id")]
+ public string WaybillId { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置快递方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_type")]
+ public int DeliveryType { get; set; }
+
+ ///
+ /// 获取或设置是否发货完成。
+ ///
+ [Newtonsoft.Json.JsonProperty("finish_all_delivery")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumberTypedBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("finish_all_delivery")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedBooleanConverter))]
+ public bool IsFinishAll { get; set; }
+
+ ///
+ /// 获取或设置快递详情列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_list")]
+ public Types.DeliveryDetail[]? DeliveryDetailList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_infos")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_infos")]
+ public Types.Product[] ProductList { get; set; } = default!;
+
+ ///
+ /// 获取或设置支付信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_info")]
+ public Types.Payment? Payment { get; set; }
+
+ ///
+ /// 获取或设置多支付信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("multi_pay_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("multi_pay_info")]
+ public Types.Payment[]? PaymentList { get; set; }
+
+ ///
+ /// 获取或设置金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("price_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("price_info")]
+ public Types.Amount Amount { get; set; } = default!;
+
+ ///
+ /// 获取或设置快递信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_detail")]
+ public Types.Delivery? Delivery { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置订单状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置小程序订单页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = default!;
+
+ ///
+ /// 获取或设置订单详细信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_detail")]
+ public Types.OrderDetail OrderDetail { get; set; } = default!;
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("update_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset UpdateTime { get; set; }
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order")]
+ [System.Text.Json.Serialization.JsonPropertyName("order")]
+ public Types.Order Order { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderPayRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderPayRequest.cs
new file mode 100644
index 00000000..df1319b3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderPayRequest.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/order/pay 接口的请求。
+ ///
+ public class ShopOrderPayRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置订单 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public long? OrderId { get; set; }
+
+ ///
+ /// 获取或设置商家自定义订单号。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string? OutOrderId { get; set; }
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("action_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("action_type")]
+ public int ActionType { get; set; }
+
+ ///
+ /// 获取或设置操作备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("action_remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("action_remark")]
+ public string? ActionRemark { get; set; }
+
+ ///
+ /// 获取或设置支付交易单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string? TransactionId { get; set; }
+
+ ///
+ /// 获取或设置付款时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? PayTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderPayResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderPayResponse.cs
new file mode 100644
index 00000000..be5be88b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopOrderPayResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/order/pay 接口的响应。
+ ///
+ public class ShopOrderPayResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopSceneCheckRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopSceneCheckRequest.cs
new file mode 100644
index 00000000..c95eb555
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopSceneCheckRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/scene/check 接口的请求。
+ ///
+ public class ShopSceneCheckRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置场景值。
+ ///
+ [Newtonsoft.Json.JsonProperty("scene")]
+ [System.Text.Json.Serialization.JsonPropertyName("scene")]
+ public int Scene { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopSceneCheckResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopSceneCheckResponse.cs
new file mode 100644
index 00000000..22c48ea1
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Order/ShopSceneCheckResponse.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/scene/check 接口的响应。
+ ///
+ public class ShopSceneCheckResponse : WechatApiResponse
+ {
+ ///
+ /// 获取或设置是否在支付校验范围内。
+ ///
+ [Newtonsoft.Json.JsonProperty("is_matched")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumberTypedBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("is_matched")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedBooleanConverter))]
+ public bool IsMatched { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterApplyRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterApplyRequest.cs
new file mode 100644
index 00000000..62dba145
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterApplyRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/register/apply 接口的请求。
+ ///
+ public class ShopRegisterApplyRequest : WechatApiRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterApplyResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterApplyResponse.cs
new file mode 100644
index 00000000..b05aa51e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterApplyResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/register/apply 接口的响应。
+ ///
+ public class ShopRegisterApplyResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterCheckRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterCheckRequest.cs
new file mode 100644
index 00000000..5ac03fbd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterCheckRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/register/check 接口的请求。
+ ///
+ public class ShopRegisterCheckRequest : WechatApiRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterCheckResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterCheckResponse.cs
new file mode 100644
index 00000000..dce1b03b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/Register/ShopRegisterCheckResponse.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/register/check 接口的响应。
+ ///
+ public class ShopRegisterCheckResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Access
+ {
+ ///
+ /// 获取或设置上传商品并审核成功状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("spu_audit_success")]
+ [System.Text.Json.Serialization.JsonPropertyName("spu_audit_success")]
+ public int SPUAuditStatus { get; set; }
+
+ ///
+ /// 获取或设置发起一笔订单并支付成功状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_order_success")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_order_success")]
+ public int PayOrderStatus { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置审核状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置接入相关信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("access_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("access_info")]
+ public Types.Access? Access { 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/Shop/SPU/ShopSPUAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUAddRequest.cs
new file mode 100644
index 00000000..d670f077
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUAddRequest.cs
@@ -0,0 +1,164 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/add 接口的请求。
+ ///
+ public class ShopSPUAddRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class Detail : ProductSPUAddRequest.Types.Detail
+ {
+ ///
+ /// 获取或设置商品描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string Description { get; set; } = string.Empty;
+ }
+
+ public class Attribute : ProductSPUAddRequest.Types.Attribute
+ {
+ }
+
+ public class SKU
+ {
+ ///
+ /// 获取或设置商家自定义商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
+ public string OutProductId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家自定义 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("barcode")]
+ [System.Text.Json.Serialization.JsonPropertyName("barcode")]
+ public string? BarCode { get; set; }
+
+ ///
+ /// 获取或设置商品属性列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("sku_attrs")]
+ [System.Text.Json.Serialization.JsonPropertyName("sku_attrs")]
+ public IList AttributeList { get; set; } = new List();
+ }
+ }
+
+ ///
+ /// 获取或设置商家自定义商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_id")]
+ public string OutProductId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("title")]
+ [System.Text.Json.Serialization.JsonPropertyName("title")]
+ public string Title { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置小程序商品页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置主图 Url 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("head_img")]
+ [System.Text.Json.Serialization.JsonPropertyName("head_img")]
+ public IList HeadImageUrlList { get; set; } = new List();
+
+ ///
+ /// 获取或设置商品资质图片 Url 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("qualification_pics")]
+ [System.Text.Json.Serialization.JsonPropertyName("qualification_pics")]
+ public IList? QualificationPictureUrlList { get; set; }
+
+ ///
+ /// 获取或设置商品详情信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc_info")]
+ public Types.Detail? Detail { get; set; }
+
+ ///
+ /// 获取或设置类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_cat_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_cat_id")]
+ public int CategoryId { get; set; }
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public int BrandId { get; set; }
+
+ ///
+ /// 获取或设置版本控制。
+ ///
+ [Newtonsoft.Json.JsonProperty("info_version")]
+ [System.Text.Json.Serialization.JsonPropertyName("info_version")]
+ public string? InfoVersion { get; set; }
+
+ ///
+ /// 获取或设置 SKU 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("skus")]
+ [System.Text.Json.Serialization.JsonPropertyName("skus")]
+ public IList SKUList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUAddResponse.cs
new file mode 100644
index 00000000..b45a762d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUAddResponse.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/add 接口的响应。
+ ///
+ public class ShopSPUAddResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Data : ProductSPUAddResponse.Types.Data
+ {
+ public static class Types
+ {
+ public class SKU
+ {
+ ///
+ /// 获取或设置 SKU ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sku_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sku_id")]
+ 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!;
+ }
+ }
+
+ ///
+ /// 获取或设置 SKU 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("skus")]
+ [System.Text.Json.Serialization.JsonPropertyName("skus")]
+ public Types.SKU[] SKUList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置返回数据。
+ ///
+ [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/Shop/SPU/ShopSPUDeleteAuditRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteAuditRequest.cs
new file mode 100644
index 00000000..c319b36e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteAuditRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/del_audit 接口的请求。
+ ///
+ public class ShopSPUDeleteAuditRequest : ShopSPUDeleteRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteAuditResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteAuditResponse.cs
new file mode 100644
index 00000000..405d4e21
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteAuditResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/del_audit 接口的响应。
+ ///
+ public class ShopSPUDeleteAuditResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteRequest.cs
new file mode 100644
index 00000000..6c448076
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/del 接口的请求。
+ ///
+ public class ShopSPUDeleteRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置商品 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ 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; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteResponse.cs
new file mode 100644
index 00000000..eb070c53
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDeleteResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/del 接口的响应。
+ ///
+ public class ShopSPUDeleteResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDelistingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDelistingRequest.cs
new file mode 100644
index 00000000..d19386dd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDelistingRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/delisting 接口的请求。
+ ///
+ public class ShopSPUDelistingRequest : ShopSPUListingRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDelistingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDelistingResponse.cs
new file mode 100644
index 00000000..4bdec0db
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUDelistingResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/delisting 接口的响应。
+ ///
+ public class ShopSPUDelistingResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetListRequest.cs
new file mode 100644
index 00000000..ce6c0cde
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetListRequest.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/get_list 接口的请求。
+ ///
+ public class ShopSPUGetListRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置指定创建时间的开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("start_create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? StartCreateTime { get; set; }
+
+ ///
+ /// 获取或设置指定创建时间的结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("end_create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? EndCreateTime { get; set; }
+
+ ///
+ /// 获取或设置指定更新时间的开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_update_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("start_update_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? StartUpdateTime { get; set; }
+
+ ///
+ /// 获取或设置指定更新时间的结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_update_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("end_update_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? EndUpdateTime { get; set; }
+
+ ///
+ /// 获取或设置指定商品上线状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int ListingStatus { get; set; }
+
+ ///
+ /// 获取或设置分页页数(从 1 开始)。
+ ///
+ [Newtonsoft.Json.JsonProperty("page")]
+ [System.Text.Json.Serialization.JsonPropertyName("page")]
+ public int Page { get; set; } = 1;
+
+ ///
+ /// 获取或设置分页每页数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; } = 10;
+
+ ///
+ /// 获取或设置是否获取草稿数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_edit_spu")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumberTypedNullableBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("need_edit_spu")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedNullableBooleanConverter))]
+ public bool? RequireEdittingSPU { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetListResponse.cs
new file mode 100644
index 00000000..6a574bb7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetListResponse.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/get_list 接口的响应。
+ ///
+ public class ShopSPUGetListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class SPU : ShopSPUGetResponse.Types.SPU
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置 SPU 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("spus")]
+ [System.Text.Json.Serialization.JsonPropertyName("spus")]
+ public Types.SPU[] SPUList { get; set; } = default!;
+
+ ///
+ /// 获取或设置 SPU 总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_num")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_num")]
+ public int Total { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetRequest.cs
new file mode 100644
index 00000000..8f97761c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetRequest.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/get 接口的请求。
+ ///
+ public class ShopSPUGetRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置商品 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ 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("need_edit_spu")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumberTypedNullableBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("need_edit_spu")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedNullableBooleanConverter))]
+ public bool? RequireEdittingSPU { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetResponse.cs
new file mode 100644
index 00000000..a85451ff
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUGetResponse.cs
@@ -0,0 +1,278 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/get 接口的响应。
+ ///
+ public class ShopSPUGetResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class SPU
+ {
+ public static class Types
+ {
+ public class Detail
+ {
+ ///
+ /// 获取或设置商品描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string Description { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品详情图片 Url 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("imgs")]
+ [System.Text.Json.Serialization.JsonPropertyName("imgs")]
+ public string[] ImageUrlList { get; set; } = default!;
+ }
+
+ public class Audit
+ {
+ ///
+ /// 获取或设置审核单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_id")]
+ public string AuditId { get; set; } = default!;
+
+ ///
+ /// 获取或设置提交时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset SubmitTime { get; set; }
+
+ ///
+ /// 获取或设置审核时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonNullableDateTimeOffsetConverter))]
+ public DateTimeOffset? AuditTime { get; set; }
+
+ ///
+ /// 获取或设置拒绝原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("reject_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
+ public string? RejectReason { 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 SKU
+ {
+ ///
+ /// 获取或设置 SKU ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sku_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sku_id")]
+ 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("barcode")]
+ [System.Text.Json.Serialization.JsonPropertyName("barcode")]
+ public string? BarCode { get; set; }
+
+ ///
+ /// 获取或设置商品属性列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("sku_attrs")]
+ [System.Text.Json.Serialization.JsonPropertyName("sku_attrs")]
+ public Attribute[] AttributeList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ 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; } = default!;
+
+ ///
+ /// 获取或设置商品标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("title")]
+ [System.Text.Json.Serialization.JsonPropertyName("title")]
+ public string Title { get; set; } = default!;
+
+ ///
+ /// 获取或设置小程序商品页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = default!;
+
+ ///
+ /// 获取或设置主图 Url 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("head_img")]
+ [System.Text.Json.Serialization.JsonPropertyName("head_img")]
+ public string[] HeadImageUrlList { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品资质图片 Url 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("qualification_pics")]
+ [System.Text.Json.Serialization.JsonPropertyName("qualification_pics")]
+ public string[]? QualificationPictureUrlList { get; set; }
+
+ ///
+ /// 获取或设置商品详情信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc_info")]
+ public Types.Detail Detail { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品审核信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("audit_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("audit_info")]
+ public Types.Audit Audit { get; set; } = default!;
+
+ ///
+ /// 获取或设置类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_cat_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_cat_id")]
+ public int CategoryId { get; set; }
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public int BrandId { get; set; }
+
+ ///
+ /// 获取或设置版本控制。
+ ///
+ [Newtonsoft.Json.JsonProperty("info_version")]
+ [System.Text.Json.Serialization.JsonPropertyName("info_version")]
+ public string? InfoVersion { get; set; }
+
+ ///
+ /// 获取或设置商品上线状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int ListingStatus { get; set; }
+
+ ///
+ /// 获取或设置商品草稿状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("edit_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("edit_status")]
+ public int EditingStatus { get; set; }
+
+ ///
+ /// 获取或设置 SKU 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("skus")]
+ [System.Text.Json.Serialization.JsonPropertyName("skus")]
+ public Types.SKU[]? SKUList { get; set; }
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("update_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset UpdateTime { get; set; }
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置 SPU 信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("spu")]
+ [System.Text.Json.Serialization.JsonPropertyName("spu")]
+ public Types.SPU SPU { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUListingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUListingRequest.cs
new file mode 100644
index 00000000..b6dbb3fd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUListingRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/listing 接口的请求。
+ ///
+ public class ShopSPUListingRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置商品 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ 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; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUListingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUListingResponse.cs
new file mode 100644
index 00000000..00aa0691
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUListingResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/listing 接口的响应。
+ ///
+ public class ShopSPUListingResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUUpdateRequest.cs
new file mode 100644
index 00000000..c6a73dba
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUUpdateRequest.cs
@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/update 接口的请求。
+ ///
+ public class ShopSPUUpdateRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class Detail : ShopSPUAddRequest.Types.Detail
+ {
+ }
+
+ public class Attribute : ShopSPUAddRequest.Types.Attribute
+ {
+ }
+
+ public class SKU : ShopSPUAddRequest.Types.SKU
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商品 ID。与字段 二选一。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ 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; } = string.Empty;
+
+ ///
+ /// 获取或设置小程序商品页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置主图 Url 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("head_img")]
+ [System.Text.Json.Serialization.JsonPropertyName("head_img")]
+ public IList HeadImageUrlList { get; set; } = new List();
+
+ ///
+ /// 获取或设置商品资质图片 Url 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("qualification_pics")]
+ [System.Text.Json.Serialization.JsonPropertyName("qualification_pics")]
+ public IList? QualificationPictureUrlList { get; set; }
+
+ ///
+ /// 获取或设置商品详情信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc_info")]
+ public Types.Detail? Detail { get; set; }
+
+ ///
+ /// 获取或设置类目 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_cat_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_cat_id")]
+ public int CategoryId { get; set; }
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public int BrandId { get; set; }
+
+ ///
+ /// 获取或设置版本控制。
+ ///
+ [Newtonsoft.Json.JsonProperty("info_version")]
+ [System.Text.Json.Serialization.JsonPropertyName("info_version")]
+ public string? InfoVersion { get; set; }
+
+ ///
+ /// 获取或设置 SKU 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("skus")]
+ [System.Text.Json.Serialization.JsonPropertyName("skus")]
+ public IList SKUList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUUpdateResponse.cs
new file mode 100644
index 00000000..be263557
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/SPU/ShopSPUUpdateResponse.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/spu/update 接口的响应。
+ ///
+ public class ShopSPUUpdateResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Data : ProductSPUUpdateResponse.Types.Data
+ {
+ public static class Types
+ {
+ public class SKU : ShopSPUAddResponse.Types.Data.Types.SKU
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置 SKU 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("skus")]
+ [System.Text.Json.Serialization.JsonPropertyName("skus")]
+ public Types.SKU[] SKUList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置返回数据。
+ ///
+ [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/Shop/ShopImageUploadRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/ShopImageUploadRequest.cs
new file mode 100644
index 00000000..bedd6b57
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/ShopImageUploadRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/img/upload 接口的请求。
+ ///
+ public class ShopImageUploadRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置图片文件字节数组。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public byte[] ImageFileBytes { get; set; } = new byte[0];
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/ShopImageUploadResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/ShopImageUploadResponse.cs
new file mode 100644
index 00000000..99fb1d4e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Shop/ShopImageUploadResponse.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /shop/img/upload 接口的响应。
+ ///
+ public class ShopImageUploadResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Image
+ {
+ ///
+ /// 获取或设置 MediaId。
+ ///
+ [Newtonsoft.Json.JsonProperty("media_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("media_id")]
+ public string MediaId { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置图片信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("img_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("img_info")]
+ public Types.Image Image { get; set; } = default!;
+ }
+}