Chuyển tới nội dung chính

Tích hợp Java SDK

Làm theo hướng dẫn để cài đặt Java SDK vào dự án của bạn và thực hiện lệnh gọi API đầu tiên bằng SDK. API thường dùng Search Products được dùng làm ví dụ.

Điều kiện tiên quyết

Trước khi tích hợp TikTok Shop API SDK vào dự án và thực hiện lệnh gọi API đầu tiên bằng SDK, bạn phải tạo một tài khoản người bán thử nghiệm.

Sau khi tài khoản được tạo, hãy truy cập tài khoản của bạn, đồng ý chia sẻ dữ liệu với TikTok Shop App thử nghiệm, và lấy authorization code trong URL trả về mà bạn đã chỉ định khi tạo TikTok Shop App thử nghiệm. Để được hướng dẫn, hãy tham khảo Tạo một access token thử nghiệm.

Môi trường

Đảm bảo dự án của bạn đáp ứng tất cả các điều kiện sau:

  • Java 1.8+
  • Maven (3.8.3+)/Gradle (7.2+)

Cài đặt

Dành cho người dùng Maven

Làm theo các bước để cài đặt SDK vào dự án Java hiện có của bạn:

  1. Giải nén gói đã tải xuống để lấy mã nguồn.
  2. Biên dịch mã nguồn cục bộ bằng cách thực thi mvn clean install. Nếu không có lỗi, quá trình biên dịch đã thành công.
  3. Thêm dependency này vào file POM của dự án và thay thế 1.0.0 bằng số phiên bản của SDK bạn đã tải xuống.

XMLWord Wrap

<dependency>  
<groupId>com.tiktokshop</groupId>
<artifactId>open-sdk-java</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
  1. Thực thi mvn clean install trong dự án của bạn để đưa SDK dependency vào.

Dành cho người dùng Gradle

Thêm dependency sau vào build.gradle của bạn và thay thế 1.0.0 bằng số phiên bản của SDK bạn đã tải xuống.

GROOVYWord Wrap

repositories {  
mavenCentral() // Needed if the 'open-sdk-java' jar has been published to maven central.
mavenLocal() // Needed if the 'open-sdk-java' jar has been published to the local maven repo.
}

dependencies {
implementation "com.tiktokshop:open-sdk-java:1.0.0"
}

Dành cho các trường hợp khác

Tạo JAR bằng cách thực thi: mvn clean package.

Cài đặt thủ công các JAR sau:

  • target/open-sdk-java-1.0.0.jar
  • target/lib/*.jar

Thay thế 1.0.0 bằng số phiên bản của SDK bạn đã tải xuống.

Lấy Access Token

Hiện tại, SDK không triển khai phương thức để lấy Access Token, và bạn phải tự khởi tạo một yêu cầu để lấy Access Token. Để biết chi tiết, hãy tham khảo Tạo một Access Token thử nghiệm.

Lấy Shop Cipher

shop_cipher là một tham số trong query của yêu cầu API Search Products. Bạn sẽ cần dùng thuộc tính này để truyền thông tin shop khi yêu cầu tìm kiếm sản phẩm.

Để lấy shop_cipher, bạn sẽ cần gọi API Get Authorized Shops, API này cũng được tích hợp trong SDK dưới dạng một hàm.

JAVAWord Wrap

AuthorizationV202309Api authAPIInstance = new AuthorizationV202309Api(defaultClient);  
try {
GetAuthorizedShopsResponse shopsResponse = authAPIInstance.authorization202309ShopsGet(accessToken, contentType);
System.out.println(shopsResponse);
for (GetAuthorizedShopsResponseDataShops shop : shopsResponse.getData().getShops()) {
System.out.println("shop_id: " + shop.getId() + ", shop_cipher: " + shop.getCipher());
}
} catch (ApiException e) {
System.err.println("Exception when calling AuthorizationV202309Api#authorization202309ShopsGet");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}

Search Products

Với Access Token và Shop Cipher, bạn có thể gọi API để lấy danh sách các sản phẩm đáp ứng các điều kiện đã chỉ định. Mỗi khi bạn thực hiện một yêu cầu API, TikTok Shop sẽ gửi lại cho bạn một phản hồi. Hãy truy cập phản hồi và xử lý các lỗi có thể xảy ra.

JAVAWord Wrap

String accessToken = "ROW_VHM8dXS3r90w3wd67339r84k59v873nd73nf73JF3JKcaY"; // String |  
String contentType = "application/json"; // String | Allowed type: application/json
String shopCipher = "TTP_Pse393kj92728jv9";
ApiClient defaultClient = Configuration.getDefaultApiClient()
.setAppkey("wiwiow594")
.setSecret("825cahe7h404u04j49dj80wc3d777759c")
.setBasePath("https://open-api.tiktokglobalshop.com");
ProductV202502Api apiInstance = new ProductV202502Api(defaultClient);
SearchProductsRequestBody searchProductsRequestBody = new SearchProductsRequestBody();
searchProductsRequestBody.setStatus("ALL");
try {
SearchProductsResponse result = apiInstance.product202502ProductsSearchPost(1, accessToken, contentType, null, shopCipher, searchProductsRequestBody);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ProductV202502Api#product202502ProductsSearchPost");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}

Nếu yêu cầu API thành công, bạn sẽ nhận được kết quả tương tự như nội dung sau:

JSONWord Wrap

{  
"code": 0,
"data": {
"next_page_token": "b2Zmc2V0PTAK",
"products": [
{
"audit": {
"status": "AUDITING"
},
"create_time": 1234567890,
"id": "1729592969712207008",
"integrated_platform_statuses": [
{
"platform": "TOKOPEDIA",
"status": "PLATFORM_DEACTIVATED"
}
/* ... */
}

Code Demo

JAVAWord Wrap

import tiktokshop.open.sdk_java.api.ProductV202502Api;    
import tiktokshop.open.sdk_java.invoke.ApiClient;
import tiktokshop.open.sdk_java.invoke.ApiException;
import tiktokshop.open.sdk_java.invoke.Configuration;
import tiktokshop.open.sdk_java.model.Product.V202502.SearchProductsRequestBody;
import tiktokshop.open.sdk_java.model.Product.V202502.SearchProductsResponse;

public class Example {
public static void main(String[] args) throws Exception {
String appKey = "6fki53g8uldu4";
String appSecret = "7a6028ce703044dd798aa297333ad2b19dfb4e39";
String accessToken = "ROW_yuz9UgAAAAA7n0AT3oGJiYa5j5m45lv_rWWk-KqNdcCNYaB0Q51Whbrh24aCYM1DbbONA6SGPZSky4eFJ1xrIx9UWf_C-HSjb2G3aQv-gyhE6QOG8JgP2ECcDQmTwuHdNQh5QjOF0eY";

String contentType = "application/json";
String shopCipher = "ROW_jKz9TQAAAABBmX6PM8wgVqtjkfVwkwvl";

// 1. get access token
AccessTokenAPI accessTokenAPI = new AccessTokenAPI(appKey, appSecret);
ResponseInfo getTokenResponse = accessTokenAPI.getToken("ROW_8KPJXgAAAABl9RnFLTHz0mJlo-SXeRCklBr0FykbOOvxCFCMHe4TAAxY0xf5n3tLe-eoN6aCr1WWlLBw1pVAd1CET8ngjFHr4Pj6vMuzIE0bBX7UNFMmZlgH64y7nhuYM-frjWnnHxI");
System.out.println("AccessTokenAPI getToken response: " + getTokenResponse);
accessToken = getTokenResponse.getData().getAccessToken();

// refresh token (needed when access token is expired)
// ResponseInfo refreshTokenResponse = accessTokenAPI.refreshToken(getTokenResponse.getData().getRefreshToken());
// System.out.println("AccessTokenAPI refreshToken response: " + refreshTokenResponse);

// 2. get shop_cipher
ApiClient defaultClient = Configuration.getDefaultApiClient()
.setAppkey(appKey)
.setSecret(appSecret)
.setBasePath("https://open-api.tikTokglobalshop.com");
AuthorizationV202309Api authAPIInstance = new AuthorizationV202309Api(defaultClient);
try {
GetAuthorizedShopsResponse shopsResponse = authAPIInstance.authorization202309ShopsGet(accessToken, contentType);
System.out.println(shopsResponse);
for (GetAuthorizedShopsResponseDataShops shop : shopsResponse.getData().getShops()) {
System.out.println("shop_id: " + shop.getId() + ", shop_cipher: " + shop.getCipher());
}
} catch (ApiException e) {
System.err.println("Exception when calling AuthorizationV202309Api#authorization202309ShopsGet");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}

// 3. search products
ProductV202502Api apiInstance = new ProductV202502Api(defaultClient);
SearchProductsRequestBody searchProductsRequestBody = new SearchProductsRequestBody();
searchProductsRequestBody.setStatus("ALL");
try {
SearchProductsResponse result = apiInstance.product202502ProductsSearchPost(1, accessToken, contentType, null, shopCipher, searchProductsRequestBody);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ProductV202502Api#product202502ProductsSearchPost");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
}
}