C
C
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 C Downloads
#include <C_CkHttp.h>
#include <C_CkJsonObject.h>
#include <C_CkDateTime.h>
#include <C_CkStringBuilder.h>
#include <C_CkCrypt2.h>
#include <C_CkHttpResponse.h>
void ChilkatSample(void)
{
BOOL success;
HCkHttp http;
HCkJsonObject jsonToken;
HCkJsonObject queryParams;
HCkDateTime dt;
BOOL ascending;
BOOL caseSensitive;
const char *appSecret;
const char *path;
HCkStringBuilder sb;
int numParams;
int i;
HCkCrypt2 crypt;
const char *sig;
HCkHttpResponse resp;
HCkJsonObject json;
const char *id;
BOOL is_leaf;
const char *local_name;
const char *parent_id;
int j;
int count_j;
const char *strVal;
int code;
const char *message;
const char *request_id;
int count_i;
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) {
printf("Failed to load tiktok-shops.json\n");
CkHttp_Dispose(http);
CkJsonObject_Dispose(jsonToken);
return;
}
// 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) {
CkStringBuilder_Append(sb,CkJsonObject_nameAt(queryParams,i));
CkStringBuilder_Append(sb,CkJsonObject_stringAt(queryParams,i));
i = i + 1;
}
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) {
printf("%s\n",CkHttp_lastErrorText(http));
CkHttp_Dispose(http);
CkJsonObject_Dispose(jsonToken);
CkJsonObject_Dispose(queryParams);
CkDateTime_Dispose(dt);
CkStringBuilder_Dispose(sb);
CkCrypt2_Dispose(crypt);
CkHttpResponse_Dispose(resp);
return;
}
json = CkJsonObject_Create();
CkHttpResponse_GetBodyJson(resp,json);
printf("%d\n",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) {
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");
printf("local_name: %s\n",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) {
CkJsonObject_putJ(json,j);
strVal = CkJsonObject_stringOf(json,"data.categories[i].permission_statuses[j]");
j = j + 1;
}
i = i + 1;
}
CkHttp_Dispose(http);
CkJsonObject_Dispose(jsonToken);
CkJsonObject_Dispose(queryParams);
CkDateTime_Dispose(dt);
CkStringBuilder_Dispose(sb);
CkCrypt2_Dispose(crypt);
CkHttpResponse_Dispose(resp);
CkJsonObject_Dispose(json);
}