Skip to content

Commit 8290570

Browse files
committed
feat(tiktokshop): 新增外部订单相关接口
1 parent ccdc348 commit 8290570

15 files changed

Lines changed: 1010 additions & 0 deletions

docs/TikTokGlobalShop/Basic_ModelDefinition.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ Notes: The following catalog is consistent with the catalog structure of [TikTok
8383
- Orders
8484
- Get Order List: `OrderSearchOrders`
8585
- Get Order Detail: `OrderBatchGetOrderDetail`
86+
- Get Price Detail: `OrderGetOrderPriceDetail`
87+
- Add External Order References: `OrderCreateExternalOrder`
88+
- Get External Order References: `OrderGetExternalOrders`
89+
- Search Order By External Order Reference: `OrderSearchExternalOrders`
8690
- Fulfillment
8791
- Get Order Split Attributes: `FulfillmentGetOrderSplitAttributes`
8892
- Split Orders: `FulfillmentSplitOrder`

src/SKIT.FlurlHttpClient.ByteDance.TikTokGlobalShop/Extensions/TikTokShopClientExecuteOrderExtensions.cs

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,98 @@ public static class TikTokShopClientExecuteOrderExtensions
5656

5757
return await client.SendFlurlRequesAsJsontAsync<Models.OrderBatchGetOrderDetailResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
5858
}
59+
60+
/// <summary>
61+
/// <para>异步调用 [GET] /order/{version}/orders/{order_id}/price_detail 接口。</para>
62+
/// <para>
63+
/// REF: <br/>
64+
/// <![CDATA[ https://partner.tiktokshop.com/docv2/page/66ce16cadefa5102ffda9c6b ]]>
65+
/// </para>
66+
/// </summary>
67+
/// <param name="client"></param>
68+
/// <param name="request"></param>
69+
/// <param name="cancellationToken"></param>
70+
/// <returns></returns>
71+
public static async Task<Models.OrderGetOrderPriceDetailResponse> ExecuteOrderGetOrderPriceDetailAsync(this TikTokShopClient client, Models.OrderGetOrderPriceDetailRequest request, CancellationToken cancellationToken = default)
72+
{
73+
if (client is null) throw new ArgumentNullException(nameof(client));
74+
if (request is null) throw new ArgumentNullException(nameof(request));
75+
76+
IFlurlRequest flurlReq = client
77+
.CreateFlurlRequest(request, HttpMethod.Get, "order", request.ApiVersion, "orders", request.OrderId, "price_detail");
78+
79+
return await client.SendFlurlRequesAsJsontAsync<Models.OrderGetOrderPriceDetailResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
80+
}
81+
82+
#region ExternalOrder
83+
/// <summary>
84+
/// <para>异步调用 [POST] /order/{version}/orders/external_orders 接口。</para>
85+
/// <para>
86+
/// REF: <br/>
87+
/// <![CDATA[ https://partner.tiktokshop.com/docv2/page/668cf073a6a5e002e69d4a28 ]]>
88+
/// </para>
89+
/// </summary>
90+
/// <param name="client"></param>
91+
/// <param name="request"></param>
92+
/// <param name="cancellationToken"></param>
93+
/// <returns></returns>
94+
public static async Task<Models.OrderCreateExternalOrderResponse> ExecuteOrderCreateExternalOrderAsync(this TikTokShopClient client, Models.OrderCreateExternalOrderRequest request, CancellationToken cancellationToken = default)
95+
{
96+
if (client is null) throw new ArgumentNullException(nameof(client));
97+
if (request is null) throw new ArgumentNullException(nameof(request));
98+
99+
IFlurlRequest flurlReq = client
100+
.CreateFlurlRequest(request, HttpMethod.Post, "order", request.ApiVersion, "orders", "external_orders");
101+
102+
return await client.SendFlurlRequesAsJsontAsync<Models.OrderCreateExternalOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
103+
}
104+
105+
/// <summary>
106+
/// <para>异步调用 [GET] /order/{version}/orders/{order_id}/external_orders 接口。</para>
107+
/// <para>
108+
/// REF: <br/>
109+
/// <![CDATA[ https://partner.tiktokshop.com/docv2/page/668cf073115ebe02f8050b0a ]]>
110+
/// </para>
111+
/// </summary>
112+
/// <param name="client"></param>
113+
/// <param name="request"></param>
114+
/// <param name="cancellationToken"></param>
115+
/// <returns></returns>
116+
public static async Task<Models.OrderGetExternalOrdersResponse> ExecuteOrderGetExternalOrdersAsync(this TikTokShopClient client, Models.OrderGetExternalOrdersRequest request, CancellationToken cancellationToken = default)
117+
{
118+
if (client is null) throw new ArgumentNullException(nameof(client));
119+
if (request is null) throw new ArgumentNullException(nameof(request));
120+
121+
IFlurlRequest flurlReq = client
122+
.CreateFlurlRequest(request, HttpMethod.Get, "order", request.ApiVersion, "orders", request.OrderId, "external_orders")
123+
.SetQueryParam("platform", request.Platform);
124+
125+
return await client.SendFlurlRequesAsJsontAsync<Models.OrderGetExternalOrdersResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
126+
}
127+
128+
/// <summary>
129+
/// <para>异步调用 [POST] /order/{version}/orders/external_order_search 接口。</para>
130+
/// <para>
131+
/// REF: <br/>
132+
/// <![CDATA[ https://partner.tiktokshop.com/docv2/page/668cf073737c3702ef051a27 ]]>
133+
/// </para>
134+
/// </summary>
135+
/// <param name="client"></param>
136+
/// <param name="request"></param>
137+
/// <param name="cancellationToken"></param>
138+
/// <returns></returns>
139+
public static async Task<Models.OrderSearchExternalOrdersResponse> ExecuteOrderSearchExternalOrdersAsync(this TikTokShopClient client, Models.OrderSearchExternalOrdersRequest request, CancellationToken cancellationToken = default)
140+
{
141+
if (client is null) throw new ArgumentNullException(nameof(client));
142+
if (request is null) throw new ArgumentNullException(nameof(request));
143+
144+
IFlurlRequest flurlReq = client
145+
.CreateFlurlRequest(request, HttpMethod.Post, "order", request.ApiVersion, "orders", "external_order_search")
146+
.SetQueryParam("external_order_id", request.ExternalOrderId)
147+
.SetQueryParam("platform", request.Platform);
148+
149+
return await client.SendFlurlRequesAsJsontAsync<Models.OrderSearchExternalOrdersResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
150+
}
151+
#endregion
59152
}
60153
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using System.Collections.Generic;
2+
3+
namespace SKIT.FlurlHttpClient.ByteDance.TikTokGlobalShop.Models
4+
{
5+
/// <summary>
6+
/// <para>表示 [POST] /order/{version}/orders/external_orders 接口的请求。</para>
7+
/// </summary>
8+
public class OrderCreateExternalOrderRequest : TikTokShopRequest
9+
{
10+
public static class Types
11+
{
12+
public class Order
13+
{
14+
public static class Types
15+
{
16+
public class ExternalOrder
17+
{
18+
public static class Types
19+
{
20+
public class LineItem
21+
{
22+
/// <summary>
23+
/// 获取或设置订单行 ID。
24+
/// </summary>
25+
[Newtonsoft.Json.JsonProperty("origin_id")]
26+
[System.Text.Json.Serialization.JsonPropertyName("origin_id")]
27+
public string LineItemId { get; set; } = string.Empty;
28+
29+
/// <summary>
30+
/// 获取或设置外部订单行 ID。
31+
/// </summary>
32+
[Newtonsoft.Json.JsonProperty("id")]
33+
[System.Text.Json.Serialization.JsonPropertyName("id")]
34+
public string ExternalLineItemId { get; set; } = string.Empty;
35+
}
36+
}
37+
38+
/// <summary>
39+
/// 获取或设置外部订单 ID。
40+
/// </summary>
41+
[Newtonsoft.Json.JsonProperty("id")]
42+
[System.Text.Json.Serialization.JsonPropertyName("id")]
43+
public string ExternalOrderId { get; set; } = string.Empty;
44+
45+
/// <summary>
46+
/// 获取或设置来源平台。
47+
/// </summary>
48+
[Newtonsoft.Json.JsonProperty("platform")]
49+
[System.Text.Json.Serialization.JsonPropertyName("platform")]
50+
public string Platform { get; set; } = string.Empty;
51+
52+
/// <summary>
53+
/// 获取或设置订单行列表。
54+
/// </summary>
55+
[Newtonsoft.Json.JsonProperty("line_items")]
56+
[System.Text.Json.Serialization.JsonPropertyName("line_items")]
57+
public IList<Types.LineItem> LineItemList { get; set; } = new List<Types.LineItem>();
58+
}
59+
}
60+
61+
/// <summary>
62+
/// 获取或设置订单 ID。
63+
/// </summary>
64+
[Newtonsoft.Json.JsonProperty("id")]
65+
[System.Text.Json.Serialization.JsonPropertyName("id")]
66+
public string OrderId { get; set; } = string.Empty;
67+
68+
/// <summary>
69+
/// 获取或设置外部订单信息。
70+
/// </summary>
71+
[Newtonsoft.Json.JsonProperty("external_order")]
72+
[System.Text.Json.Serialization.JsonPropertyName("external_order")]
73+
public Types.ExternalOrder ExternalOrder { get; set; } = new Types.ExternalOrder();
74+
}
75+
}
76+
77+
/// <summary>
78+
/// 获取或设置 API 版本号。
79+
/// <para>默认值:202406</para>
80+
/// </summary>
81+
[Newtonsoft.Json.JsonIgnore]
82+
[System.Text.Json.Serialization.JsonIgnore]
83+
public override int ApiVersion { get; set; } = 202406;
84+
85+
/// <summary>
86+
/// 获取或设置订单列表。
87+
/// </summary>
88+
[Newtonsoft.Json.JsonProperty("orders")]
89+
[System.Text.Json.Serialization.JsonPropertyName("orders")]
90+
public IList<Types.Order> OrderList { get; set; } = new List<Types.Order>();
91+
}
92+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
namespace SKIT.FlurlHttpClient.ByteDance.TikTokGlobalShop.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /order/{version}/orders/external_orders 接口的响应。</para>
5+
/// </summary>
6+
public class OrderCreateExternalOrderResponse : TikTokShopResponse<OrderCreateExternalOrderResponse.Types.Data>
7+
{
8+
public static class Types
9+
{
10+
public class Data
11+
{
12+
public static class Types
13+
{
14+
public class Error
15+
{
16+
public static class Types
17+
{
18+
public class Detail
19+
{
20+
public static class Types
21+
{
22+
public class ExternalOrder
23+
{
24+
/// <summary>
25+
/// 获取或设置外部订单 ID。
26+
/// </summary>
27+
[Newtonsoft.Json.JsonProperty("id")]
28+
[System.Text.Json.Serialization.JsonPropertyName("id")]
29+
public string ExternalOrderId { get; set; } = default!;
30+
31+
/// <summary>
32+
/// 获取或设置来源平台。
33+
/// </summary>
34+
[Newtonsoft.Json.JsonProperty("platform")]
35+
[System.Text.Json.Serialization.JsonPropertyName("platform")]
36+
public string Platform { get; set; } = default!;
37+
}
38+
}
39+
40+
/// <summary>
41+
/// 获取或设置订单 ID。
42+
/// </summary>
43+
[Newtonsoft.Json.JsonProperty("order_id")]
44+
[System.Text.Json.Serialization.JsonPropertyName("order_id")]
45+
public string OrderId { get; set; } = default!;
46+
47+
/// <summary>
48+
/// 获取或设置外部订单信息。
49+
/// </summary>
50+
[Newtonsoft.Json.JsonProperty("external_order")]
51+
[System.Text.Json.Serialization.JsonPropertyName("external_order")]
52+
public Types.ExternalOrder ExternalOrder { get; set; } = default!;
53+
}
54+
}
55+
56+
/// <summary>
57+
/// 获取或设置错误码。
58+
/// </summary>
59+
[Newtonsoft.Json.JsonProperty("code")]
60+
[System.Text.Json.Serialization.JsonPropertyName("code")]
61+
public int Code { get; set; }
62+
63+
/// <summary>
64+
/// 获取或设置错误信息。
65+
/// </summary>
66+
[Newtonsoft.Json.JsonProperty("message")]
67+
[System.Text.Json.Serialization.JsonPropertyName("message")]
68+
public string Message { get; set; } = default!;
69+
70+
/// <summary>
71+
/// 获取或设置详细信息。
72+
/// </summary>
73+
[Newtonsoft.Json.JsonProperty("detail")]
74+
[System.Text.Json.Serialization.JsonPropertyName("detail")]
75+
public Types.Detail Detail { get; set; } = default!;
76+
}
77+
}
78+
79+
/// <summary>
80+
/// 获取或设置错误列表。
81+
/// </summary>
82+
[Newtonsoft.Json.JsonProperty("errors")]
83+
[System.Text.Json.Serialization.JsonPropertyName("errors")]
84+
public Types.Error[]? ErrorList { get; set; } = default!;
85+
}
86+
}
87+
}
88+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace SKIT.FlurlHttpClient.ByteDance.TikTokGlobalShop.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [GET] /order/{version}/orders/{order_id}/external_orders 接口的请求。</para>
5+
/// </summary>
6+
public class OrderGetExternalOrdersRequest : TikTokShopRequest
7+
{
8+
/// <summary>
9+
/// 获取或设置 API 版本号。
10+
/// <para>默认值:202406</para>
11+
/// </summary>
12+
[Newtonsoft.Json.JsonIgnore]
13+
[System.Text.Json.Serialization.JsonIgnore]
14+
public override int ApiVersion { get; set; } = 202406;
15+
16+
/// <summary>
17+
/// 获取或设置订单 ID。
18+
/// </summary>
19+
[Newtonsoft.Json.JsonIgnore]
20+
[System.Text.Json.Serialization.JsonIgnore]
21+
public string OrderId { get; set; } = string.Empty;
22+
23+
/// <summary>
24+
/// 获取或设置来源平台。
25+
/// </summary>
26+
[Newtonsoft.Json.JsonIgnore]
27+
[System.Text.Json.Serialization.JsonIgnore]
28+
public string? Platform { get; set; }
29+
}
30+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
namespace SKIT.FlurlHttpClient.ByteDance.TikTokGlobalShop.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [GET] /order/{version}/orders/{order_id}/external_orders 接口的响应。</para>
5+
/// </summary>
6+
public class OrderGetExternalOrdersResponse : TikTokShopResponse<OrderGetExternalOrdersResponse.Types.Data>
7+
{
8+
public static class Types
9+
{
10+
public class Data
11+
{
12+
public static class Types
13+
{
14+
public class ExternalOrder
15+
{
16+
public static class Types
17+
{
18+
public class LineItem
19+
{
20+
/// <summary>
21+
/// 获取或设置订单行 ID。
22+
/// </summary>
23+
[Newtonsoft.Json.JsonProperty("origin_id")]
24+
[System.Text.Json.Serialization.JsonPropertyName("origin_id")]
25+
public string LineItemId { get; set; } = default!;
26+
27+
/// <summary>
28+
/// 获取或设置外部订单行 ID。
29+
/// </summary>
30+
[Newtonsoft.Json.JsonProperty("id")]
31+
[System.Text.Json.Serialization.JsonPropertyName("id")]
32+
public string ExternalLineItemId { get; set; } = default!;
33+
}
34+
}
35+
36+
/// <summary>
37+
/// 获取或设置外部订单 ID。
38+
/// </summary>
39+
[Newtonsoft.Json.JsonProperty("id")]
40+
[System.Text.Json.Serialization.JsonPropertyName("id")]
41+
public string ExternalOrderId { get; set; } = default!;
42+
43+
/// <summary>
44+
/// 获取或设置来源平台。
45+
/// </summary>
46+
[Newtonsoft.Json.JsonProperty("platform")]
47+
[System.Text.Json.Serialization.JsonPropertyName("platform")]
48+
public string Platform { get; set; } = default!;
49+
50+
/// <summary>
51+
/// 获取或设置订单行列表。
52+
/// </summary>
53+
[Newtonsoft.Json.JsonProperty("line_items")]
54+
[System.Text.Json.Serialization.JsonPropertyName("line_items")]
55+
public Types.LineItem[] LineItemList { get; set; } = default!;
56+
}
57+
}
58+
59+
/// <summary>
60+
/// 获取或设置外部订单列表。
61+
/// </summary>
62+
[Newtonsoft.Json.JsonProperty("external_orders")]
63+
[System.Text.Json.Serialization.JsonPropertyName("external_orders")]
64+
public Types.ExternalOrder[] ExternalOrderList { get; set; } = default!;
65+
}
66+
}
67+
}
68+
}

0 commit comments

Comments
 (0)