Unicode C++
Unicode 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 Unicode C++ Downloads
#include <CkHttpW.h>
#include <CkJsonObjectW.h>
#include <CkDateTimeW.h>
#include <CkStringBuilderW.h>
#include <CkCrypt2W.h>
#include <CkHttpResponseW.h>
void ChilkatSample(void)
{
bool success = false;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
CkHttpW http;
// 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
CkJsonObjectW jsonToken;
success = jsonToken.LoadFile(L"qa_data/tokens/tiktok-shops.json");
if (success != true) {
wprintf(L"Failed to load tiktok-shops.json\n");
return;
}
// Replace values in all caps with your specific values.
// SHOP_CIPHER and SHOP_ID are returned from this example: Get Authorized Shops
CkJsonObjectW queryParams;
queryParams.UpdateString(L"app_key",L"APP_KEY");
queryParams.UpdateString(L"shop_cipher",L"SHOP_CIPHER");
queryParams.UpdateString(L"shop_id",L"SHOP_ID");
CkDateTimeW dt;
queryParams.UpdateString(L"timestamp",dt.getAsUnixTimeStr(false));
queryParams.UpdateInt(L"version",202309);
// Sort the JSON members by member name, in ascending order (A-Z), case sensitive..
bool ascending = true;
bool caseSensitive = true;
queryParams.Sort(ascending,caseSensitive);
const wchar_t *appSecret = L"APP_SECRET";
const wchar_t *path = L"/product/202309/categories";
// Build the StringToSign
CkStringBuilderW sb;
sb.Append(appSecret);
sb.Append(path);
int numParams = queryParams.get_Size();
int i = 0;
while (i < numParams) {
sb.Append(queryParams.nameAt(i));
sb.Append(queryParams.stringAt(i));
i = i + 1;
}
sb.Append(appSecret);
CkCrypt2W crypt;
crypt.put_HashAlgorithm(L"SHA256");
crypt.put_MacAlgorithm(L"HMAC");
crypt.put_EncodingMode(L"hex_lower");
crypt.SetMacKeyString(appSecret);
const wchar_t *sig = crypt.macStringENC(sb.getAsString());
queryParams.UpdateString(L"access_token",jsonToken.stringOf(L"data.access_token"));
queryParams.UpdateString(L"sign",sig);
http.SetRequestHeader(L"x-tts-access-token",jsonToken.stringOf(L"data.access_token"));
http.SetRequestHeader(L"content-type",L"application/json");
CkHttpResponseW resp;
success = http.HttpParams(L"GET",L"https://open-api.tiktokglobalshop.com/product/202309/categories",queryParams,resp);
if (success == false) {
wprintf(L"%s\n",http.lastErrorText());
return;
}
CkJsonObjectW json;
resp.GetBodyJson(json);
wprintf(L"%d\n",resp.get_StatusCode());
const wchar_t *id = 0;
bool is_leaf;
const wchar_t *local_name = 0;
const wchar_t *parent_id = 0;
int j;
int count_j;
const wchar_t *strVal = 0;
int code = json.IntOf(L"code");
const wchar_t *message = json.stringOf(L"message");
const wchar_t *request_id = json.stringOf(L"request_id");
i = 0;
int count_i = json.SizeOfArray(L"data.categories");
while (i < count_i) {
json.put_I(i);
id = json.stringOf(L"data.categories[i].id");
is_leaf = json.BoolOf(L"data.categories[i].is_leaf");
local_name = json.stringOf(L"data.categories[i].local_name");
wprintf(L"local_name: %s\n",local_name);
parent_id = json.stringOf(L"data.categories[i].parent_id");
j = 0;
count_j = json.SizeOfArray(L"data.categories[i].permission_statuses");
while (j < count_j) {
json.put_J(j);
strVal = json.stringOf(L"data.categories[i].permission_statuses[j]");
j = j + 1;
}
i = i + 1;
}
}