Delphi DLL
Delphi DLL
TikTok Shop Get Categories
See more TikTok Shop Examples
An example showing how to use a TikTok Shops access token in an API call.Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, CkDateTime, HttpResponse, StringBuilder, JsonObject, Crypt2;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
http: HCkHttp;
jsonToken: HCkJsonObject;
queryParams: HCkJsonObject;
dt: HCkDateTime;
ascending: Boolean;
caseSensitive: Boolean;
appSecret: PWideChar;
path: PWideChar;
sb: HCkStringBuilder;
numParams: Integer;
i: Integer;
crypt: HCkCrypt2;
sig: PWideChar;
resp: HCkHttpResponse;
json: HCkJsonObject;
id: PWideChar;
is_leaf: Boolean;
local_name: PWideChar;
parent_id: PWideChar;
j: Integer;
count_j: Integer;
strVal: PWideChar;
code: Integer;
message: PWideChar;
request_id: PWideChar;
count_i: Integer;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
http := CkHttp_Create();
// It is assumed we previously obtained an OAuth2 access token.
// This example loads the JSON access token file
// saved by this example: Get TikTok Shop OAuth2 Access Token
// or refrehsed by this example: Get TikTok Shop Refresh OAuth2 Access Token
jsonToken := CkJsonObject_Create();
success := CkJsonObject_LoadFile(jsonToken,'qa_data/tokens/tiktok-shops.json');
if (success <> True) then
begin
Memo1.Lines.Add('Failed to load tiktok-shops.json');
Exit;
end;
// Replace values in all caps with your specific values.
// SHOP_CIPHER and SHOP_ID are returned from this example: Get Authorized Shops
queryParams := CkJsonObject_Create();
CkJsonObject_UpdateString(queryParams,'app_key','APP_KEY');
CkJsonObject_UpdateString(queryParams,'shop_cipher','SHOP_CIPHER');
CkJsonObject_UpdateString(queryParams,'shop_id','SHOP_ID');
dt := CkDateTime_Create();
CkJsonObject_UpdateString(queryParams,'timestamp',CkDateTime__getAsUnixTimeStr(dt,False));
CkJsonObject_UpdateInt(queryParams,'version',202309);
// Sort the JSON members by member name, in ascending order (A-Z), case sensitive..
ascending := True;
caseSensitive := True;
CkJsonObject_Sort(queryParams,ascending,caseSensitive);
appSecret := 'APP_SECRET';
path := '/product/202309/categories';
// Build the StringToSign
sb := CkStringBuilder_Create();
CkStringBuilder_Append(sb,appSecret);
CkStringBuilder_Append(sb,path);
numParams := CkJsonObject_getSize(queryParams);
i := 0;
while i < numParams do
begin
CkStringBuilder_Append(sb,CkJsonObject__nameAt(queryParams,i));
CkStringBuilder_Append(sb,CkJsonObject__stringAt(queryParams,i));
i := i + 1;
end;
CkStringBuilder_Append(sb,appSecret);
crypt := CkCrypt2_Create();
CkCrypt2_putHashAlgorithm(crypt,'SHA256');
CkCrypt2_putMacAlgorithm(crypt,'HMAC');
CkCrypt2_putEncodingMode(crypt,'hex_lower');
CkCrypt2_SetMacKeyString(crypt,appSecret);
sig := CkCrypt2__macStringENC(crypt,CkStringBuilder__getAsString(sb));
CkJsonObject_UpdateString(queryParams,'access_token',CkJsonObject__stringOf(jsonToken,'data.access_token'));
CkJsonObject_UpdateString(queryParams,'sign',sig);
CkHttp_SetRequestHeader(http,'x-tts-access-token',CkJsonObject__stringOf(jsonToken,'data.access_token'));
CkHttp_SetRequestHeader(http,'content-type','application/json');
resp := CkHttpResponse_Create();
success := CkHttp_HttpParams(http,'GET','https://open-api.tiktokglobalshop.com/product/202309/categories',queryParams,resp);
if (success = False) then
begin
Memo1.Lines.Add(CkHttp__lastErrorText(http));
Exit;
end;
json := CkJsonObject_Create();
CkHttpResponse_GetBodyJson(resp,json);
Memo1.Lines.Add(IntToStr(CkHttpResponse_getStatusCode(resp)));
code := CkJsonObject_IntOf(json,'code');
message := CkJsonObject__stringOf(json,'message');
request_id := CkJsonObject__stringOf(json,'request_id');
i := 0;
count_i := CkJsonObject_SizeOfArray(json,'data.categories');
while i < count_i do
begin
CkJsonObject_putI(json,i);
id := CkJsonObject__stringOf(json,'data.categories[i].id');
is_leaf := CkJsonObject_BoolOf(json,'data.categories[i].is_leaf');
local_name := CkJsonObject__stringOf(json,'data.categories[i].local_name');
Memo1.Lines.Add('local_name: ' + local_name);
parent_id := CkJsonObject__stringOf(json,'data.categories[i].parent_id');
j := 0;
count_j := CkJsonObject_SizeOfArray(json,'data.categories[i].permission_statuses');
while j < count_j do
begin
CkJsonObject_putJ(json,j);
strVal := CkJsonObject__stringOf(json,'data.categories[i].permission_statuses[j]');
j := j + 1;
end;
i := i + 1;
end;
CkHttp_Dispose(http);
CkJsonObject_Dispose(jsonToken);
CkJsonObject_Dispose(queryParams);
CkDateTime_Dispose(dt);
CkStringBuilder_Dispose(sb);
CkCrypt2_Dispose(crypt);
CkHttpResponse_Dispose(resp);
CkJsonObject_Dispose(json);
end;