diff --git a/docs/WechatApi/Basic_ModelDefinition.md b/docs/WechatApi/Basic_ModelDefinition.md
index 35d953c3..8ddb0522 100644
--- a/docs/WechatApi/Basic_ModelDefinition.md
+++ b/docs/WechatApi/Basic_ModelDefinition.md
@@ -64,49 +64,49 @@
[展开查看]
-| | 微信 API | 平台能力 | 备注 |
-| :-: | :-----------------------------------: | :------: | :------------------: |
-| √ | 接口调用凭证 | | |
-| √ | OpenAPI 管理 | | |
-| √ | 小程序登录 | | |
-| √ | 用户信息 | | |
-| √ | 小程序码于与小程序链接 | | |
-| √ | 小程序客服 | | |
-| √ | 消息相关 | | |
-| √ | 小程序安全 | | |
-| √ | 数据分析 | | |
-| √ | 硬件设备 | | |
-| √ | 运维中心 | | |
-| √ | 插件管理 | | |
-| √ | 云开发 | | |
-| √ | 附近小程序 | | |
-| √ | 图像处理与文字识别 | | |
-| √ | 微信红包封面 | | |
-| √ | 即时配送 | | |
-| √ | 物流助手 | | |
-| √ | 微信服务市场 | | |
-| √ | 生物认证 | | |
-| √ | 微信客服 | | |
-| × | 广告 | | 异构协议,需独立模块 |
-| √ | 小程序评价 | 行业能力 | |
-| √ | 小程序评价 | 行业能力 | |
-| √ | 微信学生身份快速验证 | 行业能力 | |
-| √ | 微信物流服务 | 行业能力 | |
-| × | 乘车码 | 行业能力 | _开发中_ |
-| √ | 小程序 B2B 门店助手 | 行业能力 | |
-| √ | 短剧小程序 | 行业能力 | |
-| × | 小说小程序 | 行业能力 | _开发中_ |
-| √ | 购物订单 | 商业能力 | |
-| √ | 交易保障 | 商业能力 | |
-| √ | 小程序推广员 | 商业能力 | |
-| √ | 交易组件 | 商业能力 | |
-| √ | 卡券 | 商业能力 | |
-| √ | 小程序支付管理服务 | 商业能力 | |
-| √ | 小程序发货信息管理服务 | 商业能力 | |
-| × | 微信小店合作账号小程序接口 | 商业能力 | _开发中_ |
-| √ | 多端能力 | 多端能力 | |
-| √ | 服务市场 | 服务市场 | |
-| √ | 城市服务 | 城市服务 | |
+| | 微信 API | 平台能力 | 备注 |
+| :-: | :------------------------: | :------: | :------------------: |
+| √ | 接口调用凭证 | | |
+| √ | OpenAPI 管理 | | |
+| √ | 小程序登录 | | |
+| √ | 用户信息 | | |
+| √ | 小程序码于与小程序链接 | | |
+| √ | 小程序客服 | | |
+| √ | 消息相关 | | |
+| √ | 小程序安全 | | |
+| √ | 数据分析 | | |
+| √ | 硬件设备 | | |
+| √ | 运维中心 | | |
+| √ | 插件管理 | | |
+| √ | 云开发 | | |
+| √ | 附近小程序 | | |
+| √ | 图像处理与文字识别 | | |
+| √ | 微信红包封面 | | |
+| √ | 即时配送 | | |
+| √ | 物流助手 | | |
+| √ | 微信服务市场 | | |
+| √ | 生物认证 | | |
+| √ | 微信客服 | | |
+| × | 广告 | | 异构协议,需独立模块 |
+| √ | 小程序评价 | 行业能力 | |
+| √ | 小程序评价 | 行业能力 | |
+| √ | 微信学生身份快速验证 | 行业能力 | |
+| √ | 微信物流服务 | 行业能力 | |
+| × | 乘车码 | 行业能力 | _开发中_ |
+| √ | 小程序 B2B 门店助手 | 行业能力 | |
+| √ | 短剧小程序 | 行业能力 | |
+| × | 小说小程序 | 行业能力 | _开发中_ |
+| √ | 购物订单 | 商业能力 | |
+| √ | 交易保障 | 商业能力 | |
+| √ | 小程序推广员 | 商业能力 | |
+| √ | 交易组件 | 商业能力 | |
+| √ | 卡券 | 商业能力 | |
+| √ | 小程序支付管理服务 | 商业能力 | |
+| √ | 小程序发货信息管理服务 | 商业能力 | |
+| √ | 微信小店合作账号小程序接口 | 商业能力 | |
+| √ | 多端能力 | 多端能力 | |
+| √ | 服务市场 | 服务市场 | |
+| √ | 城市服务 | 城市服务 | |
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/Channels/Cooperation/CooperationShopOrderEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/Channels/Cooperation/CooperationShopOrderEvent.cs
new file mode 100644
index 00000000..fc7ddd28
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/Channels/Cooperation/CooperationShopOrderEvent.cs
@@ -0,0 +1,42 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 EVENT.cooperation_shop_order 事件的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class CooperationShopOrderEvent : WechatApiEvent
+ {
+ public static class Types
+ {
+ public class EventData
+ {
+ ///
+ /// 获取或设置店铺 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("shop_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
+ [System.Xml.Serialization.XmlElement("shop_appid")]
+ public string ShopAppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置订单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ [System.Xml.Serialization.XmlElement("order_id")]
+ public string OrderId { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置事件参数。
+ ///
+ [Newtonsoft.Json.JsonProperty("EventData")]
+ [System.Text.Json.Serialization.JsonPropertyName("EventData")]
+ [System.Xml.Serialization.XmlElement("EventData")]
+ public Types.EventData EventData { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs
index 0c8fb92b..6b9e2de1 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs
@@ -1060,6 +1060,100 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
}
#endregion
+ #region ECCooperation
+ ///
+ /// 异步调用 [POST] /channels/ec/cooperation/shop/list 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteChannelsECCooperationShopListAsync(this WechatApiClient client, Models.ChannelsECCooperationShopListRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "channels", "ec", "cooperation", "shop", "list")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /channels/ec/cooperation/product/list 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteChannelsECCooperationProductListAsync(this WechatApiClient client, Models.ChannelsECCooperationProductListRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "channels", "ec", "cooperation", "product", "list")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /channels/ec/cooperation/product/get 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteChannelsECCooperationProductGetAsync(this WechatApiClient client, Models.ChannelsECCooperationProductGetRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "channels", "ec", "cooperation", "product", "get")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /channels/ec/cooperation/order/get 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteChannelsECCooperationOrderGetAsync(this WechatApiClient client, Models.ChannelsECCooperationOrderGetRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "channels", "ec", "cooperation", "order", "get")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
#region ECCoupon
///
/// 异步调用 [POST] /channels/ec/coupon/create 接口。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationOrderGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationOrderGetRequest.cs
new file mode 100644
index 00000000..95cff76c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationOrderGetRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/order/get 接口的请求。
+ ///
+ public class ChannelsECCooperationOrderGetRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置店铺 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("shop_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
+ public string ShopAppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string OrderId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationOrderGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationOrderGetResponse.cs
new file mode 100644
index 00000000..d3a0d53e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationOrderGetResponse.cs
@@ -0,0 +1,73 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/order/get 接口的响应。
+ ///
+ public class ChannelsECCooperationOrderGetResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Order
+ {
+ public static class Types
+ {
+ public class OrderDetail
+ {
+ public static class Types
+ {
+ public class Product : ChannelsECOrderGetResponse.Types.Order.Types.OrderDetail.Types.Product
+ {
+ }
+
+ public class Amount : ChannelsECOrderGetResponse.Types.Order.Types.OrderDetail.Types.Amount
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_infos")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_infos")]
+ public Types.Product[] ProductList { get; set; } = default!;
+
+ ///
+ /// 获取或设置金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("price_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("price_info")]
+ public Types.Amount Amount { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置订单详细信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_detail")]
+ public Types.OrderDetail OrderDetail { get; set; } = default!;
+
+ ///
+ /// 获取或设置下单用户 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置下单用户 UnionId。
+ ///
+ [Newtonsoft.Json.JsonProperty("unionid")]
+ [System.Text.Json.Serialization.JsonPropertyName("unionid")]
+ public string? UnionId { 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/Channels/ECCooperation/ChannelsECCooperationProductGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductGetRequest.cs
new file mode 100644
index 00000000..cdbd6522
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductGetRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/product/get 接口的请求。
+ ///
+ public class ChannelsECCooperationProductGetRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置店铺 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("shop_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
+ public string ShopAppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ public long ProductId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductGetResponse.cs
new file mode 100644
index 00000000..8820f4e1
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductGetResponse.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/product/get 接口的响应。
+ ///
+ public class ChannelsECCooperationProductGetResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Product
+ {
+ ///
+ /// 获取或设置商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ public long ProductId { get; set; }
+
+ ///
+ /// 获取或设置商品标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("title")]
+ [System.Text.Json.Serialization.JsonPropertyName("title")]
+ public string Title { get; set; } = default!;
+
+ ///
+ /// 获取或设置图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("img_urls")]
+ [System.Text.Json.Serialization.JsonPropertyName("img_urls")]
+ public string[] ImageUrlList { get; set; } = default!;
+
+ ///
+ /// 获取或设置最低价格(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("min_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("min_price")]
+ public int MinPrice { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("product")]
+ [System.Text.Json.Serialization.JsonPropertyName("product")]
+ public Types.Product Product { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductListRequest.cs
new file mode 100644
index 00000000..9d912cfa
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductListRequest.cs
@@ -0,0 +1,30 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/product/list 接口的请求。
+ ///
+ public class ChannelsECCooperationProductListRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置店铺 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("shop_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
+ public string ShopAppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置分页每页页数。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; } = 10;
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_key")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductListResponse.cs
new file mode 100644
index 00000000..ac616381
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationProductListResponse.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/product/list 接口的响应。
+ ///
+ public class ChannelsECCooperationProductListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Product
+ {
+ ///
+ /// 获取或设置商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_id")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ public long ProductId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("products")]
+ [System.Text.Json.Serialization.JsonPropertyName("products")]
+ public Types.Product[] ProductList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_num")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_num")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_key")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationShopListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationShopListRequest.cs
new file mode 100644
index 00000000..eff5b1be
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationShopListRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/shop/list 接口的请求。
+ ///
+ public class ChannelsECCooperationShopListRequest : WechatApiRequest, IInferable
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationShopListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationShopListResponse.cs
new file mode 100644
index 00000000..a3d8d42f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECCooperation/ChannelsECCooperationShopListResponse.cs
@@ -0,0 +1,63 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/ec/cooperation/shop/list 接口的响应。
+ ///
+ public class ChannelsECCooperationShopListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Shop
+ {
+ ///
+ /// 获取或设置店铺 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置店铺名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("nickname")]
+ [System.Text.Json.Serialization.JsonPropertyName("nickname")]
+ public string Nickname { get; set; } = default!;
+
+ ///
+ /// 获取或设置绑定状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置绑定时间毫秒级时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("bind_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("bind_time")]
+ public long? BindTimeMilliseconds { get; set; }
+
+ ///
+ /// 获取或设置解绑时间毫秒级时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("unbind_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("unbind_time")]
+ public long? UnbindTimeMilliseconds { get; set; }
+
+ ///
+ /// 获取或设置取消时间毫秒级时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_time")]
+ public long? CancelTimeMilliseconds { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置店铺列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("shop_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("shop_list")]
+ public Types.Shop[] ShopList { get; set; } = default!;
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/Channels/Cooperation/CooperationShopOrderEvent.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/Channels/Cooperation/CooperationShopOrderEvent.json
new file mode 100644
index 00000000..7b4352e0
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/Channels/Cooperation/CooperationShopOrderEvent.json
@@ -0,0 +1,11 @@
+{
+ "ToUserName": "gh_2defbb026678",
+ "FromUserName": "OPENID",
+ "CreateTime": 1706518830,
+ "MsgType": "event",
+ "Event": "cooperation_shop_order",
+ "EventData": {
+ "order_id": "order_id_xxx",
+ "shop_appid": "店铺appid"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationOrderGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationOrderGetRequest.json
new file mode 100644
index 00000000..a49f29df
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationOrderGetRequest.json
@@ -0,0 +1,4 @@
+{
+ "shop_appid": "SHOP_APPID",
+ "order_id": "ORDER_ID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationOrderGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationOrderGetResponse.json
new file mode 100644
index 00000000..e3dbb389
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationOrderGetResponse.json
@@ -0,0 +1,55 @@
+{
+ "order": {
+ "openid": "OPENID",
+ "order_detail": {
+ "product_infos": [
+ {
+ "product_id": 234245,
+ "sku_id": 23424,
+ "sku_cnt": 10,
+ "title": "健身环",
+ "thumb_img": "https://mmecimage.cn/p/wx37f38d59298839c3/HJE9eJaEc5bJk-eaArVdILSB7MMaHgdK2-JIn51nMQ",
+ "sale_price": 2000,
+ "market_price": 2000,
+ "sku_attrs": [
+ {
+ "attr_key": "产地",
+ "attr_value": "四川成都"
+ },
+ {
+ "attr_key": "材质",
+ "attr_value": "玻璃"
+ },
+ {
+ "attr_key": "适用人群",
+ "attr_value": "青年;中年"
+ },
+ {
+ "attr_key": "数量",
+ "attr_value": "33"
+ },
+ {
+ "attr_key": "精度",
+ "attr_value": "3.001"
+ },
+ {
+ "attr_key": "重量",
+ "attr_value": "38 mg"
+ },
+ {
+ "attr_key": "毛重",
+ "attr_value": "380 kg"
+ }
+ ]
+ }
+ ],
+ "price_info": {
+ "product_price": 20000,
+ "order_price": 10500,
+ "freight": 500,
+ "discounted_price": 10000,
+ "is_discounted": true
+ }
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductGetRequest.json
new file mode 100644
index 00000000..6dd63d9a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductGetRequest.json
@@ -0,0 +1,4 @@
+{
+ "shop_appid": "wx2b255582a7b4bfd0",
+ "product_id": 10000157022254
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductGetResponse.json
new file mode 100644
index 00000000..8d51ad85
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductGetResponse.json
@@ -0,0 +1,13 @@
+{
+ "product": {
+ "product_id": 10000157022254,
+ "title": "测试商品",
+ "img_urls": [
+ "IMG_URL0",
+ "IMG_URL1"
+ ],
+ "min_price": 2800
+ },
+ "errcode": 0,
+ "errmsg": "ok"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductListRequest.json
new file mode 100644
index 00000000..1299c646
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductListRequest.json
@@ -0,0 +1,4 @@
+{
+ "shop_appid": "wx***************0",
+ "page_size": 2
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductListResponse.json
new file mode 100644
index 00000000..8e3c780e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationProductListResponse.json
@@ -0,0 +1,14 @@
+{
+ "products": [
+ {
+ "product_id": 10000157022254
+ },
+ {
+ "product_id": 10000157016507
+ }
+ ],
+ "total_num": 124,
+ "next_key": "EhgIi/2/voWjAhCjzK24BhjAhZCBgICAgAI=",
+ "errcode": 0,
+ "errmsg": "ok"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationShopListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationShopListResponse.json
new file mode 100644
index 00000000..af045738
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/ECCooperation/ChannelsECCooperationShopListResponse.json
@@ -0,0 +1,14 @@
+{
+ "shop_list": [
+ {
+ "appid": "wx***************0",
+ "nickname": "测试店",
+ "status": 1,
+ "bind_time": 1728979333943,
+ "unbind_time": 0,
+ "cancel_time": 0
+ }
+ ],
+ "errcode": 0,
+ "errmsg": "ok"
+}