diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUserOrderExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUserOrderExtensions.cs
new file mode 100644
index 00000000..25909c2a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUserOrderExtensions.cs
@@ -0,0 +1,112 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api
+{
+ public static class WechatApiClientExecuteUserOrderExtensions
+ {
+ ///
+ /// 异步调用 [POST] /user-order/orders 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/shopping-order/normal-shopping-detail/uploadShoppingInfo.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUserOrderOrdersAsync(this WechatApiClient client, Models.UserOrderOrdersRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "user-order", "orders")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /user-order/orders/shippings 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/shopping-order/normal-shopping-detail/uploadShippingInfo.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUserOrderOrdersShippingsAsync(this WechatApiClient client, Models.UserOrderOrdersShippingsRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "user-order", "orders", "shippings")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /user-order/combine-orders 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/shopping-order/shopping-detail/uploadCombinedShoppingInfo.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUserOrderCombineOrdersAsync(this WechatApiClient client, Models.UserOrderCombineOrdersRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "user-order", "combine-orders")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /user-order/combine-orders/shippings 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/shopping-order/shopping-detail/uploadCombinedShippingInfo.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUserOrderCombineOrdersShippingsAsync(this WechatApiClient client, Models.UserOrderCombineOrdersShippingsRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "user-order", "combine-orders", "shippings")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /user-order/shoppinginfo/verify 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/shopping-order/upload-result/ShoppingInfoVerifyUploadResult.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUserOrderShoppingInfoVerifyAsync(this WechatApiClient client, Models.UserOrderShoppingInfoVerifyRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "user-order", "shoppinginfo", "verify")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersRequest.cs
new file mode 100644
index 00000000..744238dc
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersRequest.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/combine-orders 接口的请求。
+ ///
+ public class UserOrderCombineOrdersRequest : WechatApiRequest, IInferable
+ {
+ public static class Types
+ {
+ public class OrderKey : UserOrderOrdersRequest.Types.OrderKey
+ {
+ }
+
+ public class SubOrder
+ {
+ public static class Types
+ {
+ public class JumpLink : UserOrderOrdersRequest.Types.Order.Types.JumpLink
+ {
+ }
+
+ public class Item : UserOrderOrdersRequest.Types.Order.Types.Item
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置子订单标识信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_key")]
+ public OrderKey OrderKey { get; set; } = new OrderKey();
+
+ ///
+ /// 获取或设置商户交易订单编号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_order_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_order_no")]
+ public string MerchantOrderNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户交易订单详情页链接信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_detail_jump_link")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_detail_jump_link")]
+ public Types.JumpLink? OrderDetailJumpLink { get; set; }
+
+ ///
+ /// 获取或设置订单购买的商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("item_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("item_list")]
+ public IList ItemList { get; set; } = new List();
+
+ ///
+ /// 获取或设置物流形式。
+ ///
+ [Newtonsoft.Json.JsonProperty("logistics_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("logistics_type")]
+ public string? LogisticsType { get; set; }
+ }
+
+ public class Payer : UserOrderOrdersRequest.Types.Payer
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置合单订单标识信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_key")]
+ public Types.OrderKey OrderKey { get; set; } = new Types.OrderKey();
+
+ ///
+ /// 获取或设置子单购物详情列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_orders")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_orders")]
+ public IList SubOrderList { get; set; } = new List();
+
+ ///
+ /// 获取或设置支付者信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer")]
+ public Types.Payer Payer { get; set; } = new Types.Payer();
+
+ ///
+ /// 获取或设置上传时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("upload_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("upload_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ public DateTimeOffset UploadTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersResponse.cs
new file mode 100644
index 00000000..1c25cd1c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/combine-orders 接口的响应。
+ ///
+ public class UserOrderCombineOrdersResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersShippingsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersShippingsRequest.cs
new file mode 100644
index 00000000..ca1d9999
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersShippingsRequest.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/combine-orders/shippings 接口的请求。
+ ///
+ public class UserOrderCombineOrdersShippingsRequest : WechatApiRequest, IInferable
+ {
+ public static class Types
+ {
+ public class OrderKey : UserOrderOrdersShippingsRequest.Types.OrderKey
+ {
+ }
+
+ public class SubOrder
+ {
+ public static class Types
+ {
+ public class Shipping : UserOrderOrdersShippingsRequest.Types.Shipping
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置子订单标识信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_key")]
+ public OrderKey OrderKey { get; set; } = new OrderKey();
+
+ ///
+ /// 获取或设置物流信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("shipping_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("shipping_list")]
+ public IList ShippingList { get; set; } = new List();
+
+ ///
+ /// 获取或设置发货模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_mode")]
+ public string DeliveryMode { get; set; } = string.Empty;
+ }
+
+ public class Payer : UserOrderOrdersShippingsRequest.Types.Payer
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置合单订单标识信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_key")]
+ public Types.OrderKey OrderKey { get; set; } = new Types.OrderKey();
+
+ ///
+ /// 获取或设置子单购物详情列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_orders")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_orders")]
+ public IList SubOrderList { get; set; } = new List();
+
+ ///
+ /// 获取或设置支付者信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer")]
+ public Types.Payer Payer { get; set; } = new Types.Payer();
+
+ ///
+ /// 获取或设置上传时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("upload_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("upload_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ public DateTimeOffset UploadTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersShippingsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersShippingsResponse.cs
new file mode 100644
index 00000000..7a7f9616
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderCombineOrdersShippingsResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/combine-orders/shippings 接口的响应。
+ ///
+ public class UserOrderCombineOrdersShippingsResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersRequest.cs
new file mode 100644
index 00000000..0441ca65
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersRequest.cs
@@ -0,0 +1,202 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/orders 接口的请求。
+ ///
+ public class UserOrderOrdersRequest : WechatApiRequest, IInferable
+ {
+ public static class Types
+ {
+ public class OrderKey
+ {
+ ///
+ /// 获取或设置订单单号类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_number_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_number_type")]
+ public string OrderNumberType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置支付下单商户的商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string? MerchantId { get; set; }
+
+ ///
+ /// 获取或设置原支付交易的商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string? OutTradeNumber { get; set; }
+
+ ///
+ /// 获取或设置原支付交易的微信订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string? TransactionId { get; set; }
+ }
+
+ public class Order
+ {
+ public static class Types
+ {
+ public class JumpLink
+ {
+ ///
+ /// 获取或设置链接类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string? AppId { get; set; }
+
+ ///
+ /// 获取或设置小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string? PagePath { get; set; }
+
+ ///
+ /// 获取或设置链接地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("url")]
+ [System.Text.Json.Serialization.JsonPropertyName("url")]
+ public string? Url { get; set; }
+ }
+
+ public class Item
+ {
+ ///
+ /// 获取或设置商户侧商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_item_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_item_id")]
+ public string MerchantItemId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("description")]
+ [System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string? Description { get; set; }
+
+ ///
+ /// 获取或设置商品单价(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("unit_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("unit_price")]
+ public int UnitPrice { get; set; }
+
+ ///
+ /// 获取或设置购买数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("quantity")]
+ public int Quantity { get; set; }
+
+ ///
+ /// 获取或设置商品图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("image_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("image_url")]
+ public IList ImageUrlList { get; set; } = new List();
+
+ ///
+ /// 获取或设置商户交易商品详情页链接信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("item_detail_jump_link")]
+ [System.Text.Json.Serialization.JsonPropertyName("item_detail_jump_link")]
+ public JumpLink? ItemDetailJumpLink { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商户交易订单编号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_order_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_order_no")]
+ public string MerchantOrderNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户交易订单详情页链接信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_detail_jump_link")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_detail_jump_link")]
+ public Types.JumpLink? OrderDetailJumpLink { get; set; }
+
+ ///
+ /// 获取或设置订单购买的商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("item_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("item_list")]
+ public IList ItemList { get; set; } = new List();
+ }
+
+ public class Payer
+ {
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置订单标识信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_key")]
+ public Types.OrderKey OrderKey { get; set; } = new Types.OrderKey();
+
+ ///
+ /// 获取或设置购物详情列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_list")]
+ public IList OrderList { get; set; } = new List();
+
+ ///
+ /// 获取或设置支付者信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer")]
+ public Types.Payer Payer { get; set; } = new Types.Payer();
+
+ ///
+ /// 获取或设置物流形式。
+ ///
+ [Newtonsoft.Json.JsonProperty("logistics_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("logistics_type")]
+ public string? LogisticsType { get; set; }
+
+ ///
+ /// 获取或设置上传时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("upload_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("upload_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ public DateTimeOffset UploadTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersResponse.cs
new file mode 100644
index 00000000..1247e303
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/orders 接口的响应。
+ ///
+ public class UserOrderOrdersResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersShippingsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersShippingsRequest.cs
new file mode 100644
index 00000000..70dabd5c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersShippingsRequest.cs
@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/orders/shippings 接口的请求。
+ ///
+ public class UserOrderOrdersShippingsRequest : WechatApiRequest, IInferable
+ {
+ public static class Types
+ {
+ public class OrderKey : UserOrderOrdersRequest.Types.OrderKey
+ {
+ }
+
+ public class Shipping
+ {
+ public static class Types
+ {
+ public class Contact
+ {
+ ///
+ /// 获取或设置寄件人联系方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("consignor_contact")]
+ [System.Text.Json.Serialization.JsonPropertyName("consignor_contact")]
+ public string? ConsignorContact { get; set; }
+
+ ///
+ /// 获取或设置收件人联系方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("receiver_contact")]
+ [System.Text.Json.Serialization.JsonPropertyName("receiver_contact")]
+ public string? ReceiverContact { get; set; }
+ }
+
+ public class Item
+ {
+ ///
+ /// 获取或设置商户侧商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_item_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_item_id")]
+ public string MerchantItemId { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置物流公司编码。
+ ///
+ [Newtonsoft.Json.JsonProperty("express_company")]
+ [System.Text.Json.Serialization.JsonPropertyName("express_company")]
+ public string ExpressCompanyCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置物流单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("tracking_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("tracking_no")]
+ public string TrackingNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置联系方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("contact")]
+ [System.Text.Json.Serialization.JsonPropertyName("contact")]
+ public Types.Contact? Contact { get; set; }
+
+ ///
+ /// 获取或设置订单购买的商品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("item_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("item_list")]
+ public IList? ItemList { get; set; }
+ }
+
+ public class Payer : UserOrderOrdersRequest.Types.Payer
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置订单标识信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_key")]
+ public Types.OrderKey OrderKey { get; set; } = new Types.OrderKey();
+
+ ///
+ /// 获取或设置物流信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("shipping_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("shipping_list")]
+ public IList ShippingList { get; set; } = new List();
+
+ ///
+ /// 获取或设置支付者信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer")]
+ public Types.Payer Payer { get; set; } = new Types.Payer();
+
+ ///
+ /// 获取或设置发货模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("delivery_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("delivery_mode")]
+ public string DeliveryMode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置上传时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("upload_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("upload_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ public DateTimeOffset UploadTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersShippingsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersShippingsResponse.cs
new file mode 100644
index 00000000..8b43aba9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderOrdersShippingsResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/orders/shippings 接口的响应。
+ ///
+ public class UserOrderOrdersShippingsResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderShoppingInfoVerifyRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderShoppingInfoVerifyRequest.cs
new file mode 100644
index 00000000..20ac7529
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderShoppingInfoVerifyRequest.cs
@@ -0,0 +1,33 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/shoppinginfo/verify 接口的请求。
+ ///
+ public class UserOrderShoppingInfoVerifyRequest : WechatApiRequest, IInferable
+ {
+ public static class Types
+ {
+ public class OrderKey : UserOrderOrdersRequest.Types.OrderKey
+ {
+ }
+
+ public class Payer : UserOrderOrdersRequest.Types.Payer
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置订单标识信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_key")]
+ public Types.OrderKey OrderKey { get; set; } = new Types.OrderKey();
+
+ ///
+ /// 获取或设置支付者信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer")]
+ public Types.Payer Payer { get; set; } = new Types.Payer();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderShoppingInfoVerifyResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderShoppingInfoVerifyResponse.cs
new file mode 100644
index 00000000..9e3fc2d4
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UserOrder/UserOrderShoppingInfoVerifyResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /user-order/shoppinginfo/verify 接口的响应。
+ ///
+ public class UserOrderShoppingInfoVerifyResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderCombineOrdersRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderCombineOrdersRequest.json
new file mode 100644
index 00000000..043500a1
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderCombineOrdersRequest.json
@@ -0,0 +1,196 @@
+{
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "0unu3",
+ "mchid": "idgsc",
+ "out_trade_no": "e8zef"
+ },
+ "sub_orders": [
+ {
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "zlt49",
+ "mchid": "uqlxl",
+ "out_trade_no": "pzlfp"
+ },
+ "merchant_order_no": "2343454667633",
+ "order_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ },
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ }
+ ],
+ "logistics_type": "LOCATION_BASED_LOGISTICS"
+ },
+ {
+ "order_key": {
+ "order_number_type": "WXPAY_TRADE_NUMBER",
+ "transaction_id": "27kd6",
+ "mchid": "44anx",
+ "out_trade_no": "pj396"
+ },
+ "merchant_order_no": "2343454667633",
+ "order_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ },
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ }
+ ],
+ "logistics_type": "LOCATION_BASED_LOGISTICS"
+ },
+ {
+ "order_key": {
+ "order_number_type": "WXPAY_TRADE_NUMBER",
+ "transaction_id": "0jo3k",
+ "mchid": "6rcmv",
+ "out_trade_no": "yld2x"
+ },
+ "merchant_order_no": "2343454667633",
+ "order_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ },
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ }
+ ],
+ "logistics_type": "LOCATION_BASED_LOGISTICS"
+ }
+ ],
+ "payer": {
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
+ },
+ "upload_time": "2022-05-20T13:29:35.120"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderCombineOrdersShippingsRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderCombineOrdersShippingsRequest.json
new file mode 100644
index 00000000..332a85ed
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderCombineOrdersShippingsRequest.json
@@ -0,0 +1,146 @@
+{
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "0unu3",
+ "mchid": "idgsc",
+ "out_trade_no": "e8zef"
+ },
+ "sub_orders": [
+ {
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "6r6m0",
+ "mchid": "kzwri",
+ "out_trade_no": "v1rsd"
+ },
+ "delivery_mode": "SPLIT_DELIVERY",
+ "shipping_list": [
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "****1234",
+ "receiver_contact": "189****1234"
+ }
+ },
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "****1234",
+ "receiver_contact": "0**2-******23-10"
+ }
+ }
+ ]
+ },
+ {
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "2m08y",
+ "mchid": "fr2db",
+ "out_trade_no": "m2dok"
+ },
+ "delivery_mode": "UNIFIED_DELIVERY",
+ "shipping_list": [
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "0**2-***1234",
+ "receiver_contact": "****123-8008"
+ }
+ },
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "0**2-***1234",
+ "receiver_contact": "189****1234"
+ }
+ }
+ ]
+ },
+ {
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "dxy5d",
+ "mchid": "w5acd",
+ "out_trade_no": "tqbik"
+ },
+ "delivery_mode": "UNIFIED_DELIVERY",
+ "shipping_list": [
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "****123-8008",
+ "receiver_contact": "****1234"
+ }
+ },
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "****123-8008",
+ "receiver_contact": "0**2-***1234"
+ }
+ }
+ ]
+ }
+ ],
+ "payer": {
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
+ },
+ "upload_time": "2022-05-20T13:29:35.120"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderOrdersRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderOrdersRequest.json
new file mode 100644
index 00000000..eb851175
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderOrdersRequest.json
@@ -0,0 +1,176 @@
+{
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "0unu3",
+ "mchid": "idgsc",
+ "out_trade_no": "e8zef"
+ },
+ "order_list": [
+ {
+ "merchant_order_no": "232457563423",
+ "order_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ },
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ }
+ }
+ ]
+ },
+ {
+ "merchant_order_no": "232457563423",
+ "order_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ },
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ }
+ }
+ ]
+ },
+ {
+ "merchant_order_no": "232457563423",
+ "order_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ },
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": [
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx",
+ "https://qpic.cn/xxx"
+ ],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "URL"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ },
+ {
+ "merchant_item_id": "1246464644",
+ "name": "iPhoneX 256G",
+ "description": "Image形象店 - 深圳腾大 -QQ 公仔",
+ "unit_price": 828800,
+ "quantity": 2,
+ "image_url": ["https://qpic.cn/xxx", "https://qpic.cn/xxx"],
+ "item_detail_jump_link": {
+ "url": "https://www.weixin.qq.com/wxpay/pay.php",
+ "appid": "wxd678efh567hg6787",
+ "path": "/path/index/index",
+ "type": "MINI_PROGRAM"
+ }
+ }
+ ]
+ }
+ ],
+ "payer": {
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
+ },
+ "logistics_type": "LOCATION_BASED_LOGISTICS",
+ "upload_time": "2022-05-20T13:29:35.120"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderOrdersShippingsRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderOrdersShippingsRequest.json
new file mode 100644
index 00000000..6ec4d535
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderOrdersShippingsRequest.json
@@ -0,0 +1,53 @@
+{
+ "order_key": {
+ "order_number_type": "MERCHANT_TRADE_NUMBER",
+ "transaction_id": "nep9a",
+ "mchid": "8wu3m",
+ "out_trade_no": "x5mr9"
+ },
+ "delivery_mode": "UNIFIED_DELIVERY",
+ "shipping_list": [
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "0**2-******23-10",
+ "receiver_contact": "****123-8008"
+ }
+ },
+ {
+ "tracking_no": "323244567777",
+ "express_company": "DHL",
+ "item_list": [
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ },
+ {
+ "merchant_item_id": "1246464644"
+ }
+ ],
+ "contact": {
+ "consignor_contact": "0**2-***1234",
+ "receiver_contact": "0**2-******23-10"
+ }
+ }
+ ],
+ "upload_time": "2021-05-20T13:29:35.12",
+ "payer": {
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderShoppingInfoVerifyRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderShoppingInfoVerifyRequest.json
new file mode 100644
index 00000000..6d3ec9b7
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UserOrder/UserOrderShoppingInfoVerifyRequest.json
@@ -0,0 +1,11 @@
+{
+ "order_key": {
+ "order_number_type": "WXPAY_TRADE_NUMBER",
+ "transaction_id": "g2frh",
+ "mchid": "2qf8n",
+ "out_trade_no": "t6htn"
+ },
+ "payer": {
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
+ }
+}