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" + } +}