Xbase++ Requires Chilkat v11.0.0+
Xbase++
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 Xbase++ Downloads
LOCAL nSuccess
LOCAL oHttp
LOCAL oJsonToken
LOCAL oQueryParams
LOCAL oDt
LOCAL nAscending
LOCAL nCaseSensitive
LOCAL cAppSecret
LOCAL cPath
LOCAL oSb
LOCAL nNumParams
LOCAL i
LOCAL oCrypt
LOCAL cSig
LOCAL oResp
LOCAL oJson
LOCAL cId
LOCAL nIs_leaf
LOCAL cLocal_name
LOCAL cParent_id
LOCAL j
LOCAL nCount_j
LOCAL cStrVal
LOCAL nCode
LOCAL cMessage
LOCAL cRequest_id
LOCAL nCount_i
nSuccess := 0
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
oHttp := CreateObject("Chilkat.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
oJsonToken := CreateObject("Chilkat.JsonObject")
nSuccess := oJsonToken:LoadFile("qa_data/tokens/tiktok-shops.json")
IF (nSuccess != 1)
? "Failed to load tiktok-shops.json"
oHttp:destroy()
oJsonToken:destroy()
RETURN
ENDIF
// Replace values in all caps with your specific values.
// SHOP_CIPHER and SHOP_ID are returned from this example: Get Authorized Shops
oQueryParams := CreateObject("Chilkat.JsonObject")
oQueryParams:UpdateString("app_key", "APP_KEY")
oQueryParams:UpdateString("shop_cipher", "SHOP_CIPHER")
oQueryParams:UpdateString("shop_id", "SHOP_ID")
oDt := CreateObject("Chilkat.CkDateTime")
oQueryParams:UpdateString("timestamp", oDt:GetAsUnixTimeStr(0))
oQueryParams:UpdateInt("version", 202309)
// Sort the JSON members by member name, in ascending order (A-Z), case sensitive..
nAscending := 1
nCaseSensitive := 1
oQueryParams:Sort(nAscending, nCaseSensitive)
cAppSecret := "APP_SECRET"
cPath := "/product/202309/categories"
// Build the StringToSign
oSb := CreateObject("Chilkat.StringBuilder")
oSb:Append(cAppSecret)
oSb:Append(cPath)
nNumParams := oQueryParams:Size
i := 0
DO WHILE i < nNumParams
oSb:Append(oQueryParams:NameAt(i))
oSb:Append(oQueryParams:StringAt(i))
i := i + 1
ENDDO
oSb:Append(cAppSecret)
oCrypt := CreateObject("Chilkat.Crypt2")
oCrypt:HashAlgorithm := "SHA256"
oCrypt:MacAlgorithm := "HMAC"
oCrypt:EncodingMode := "hex_lower"
oCrypt:SetMacKeyString(cAppSecret)
cSig := oCrypt:MacStringENC(oSb:GetAsString())
oQueryParams:UpdateString("access_token", oJsonToken:StringOf("data.access_token"))
oQueryParams:UpdateString("sign", cSig)
oHttp:SetRequestHeader("x-tts-access-token", oJsonToken:StringOf("data.access_token"))
oHttp:SetRequestHeader("content-type", "application/json")
oResp := CreateObject("Chilkat.HttpResponse")
nSuccess := oHttp:HttpParams("GET", "https://open-api.tiktokglobalshop.com/product/202309/categories", oQueryParams, oResp)
IF (nSuccess == 0)
? oHttp:LastErrorText
oHttp:destroy()
oJsonToken:destroy()
oQueryParams:destroy()
oDt:destroy()
oSb:destroy()
oCrypt:destroy()
oResp:destroy()
RETURN
ENDIF
oJson := CreateObject("Chilkat.JsonObject")
oResp:GetBodyJson(oJson)
? Str(oResp:StatusCode)
nCode := oJson:IntOf("code")
cMessage := oJson:StringOf("message")
cRequest_id := oJson:StringOf("request_id")
i := 0
nCount_i := oJson:SizeOfArray("data.categories")
DO WHILE i < nCount_i
oJson:I := i
cId := oJson:StringOf("data.categories[i].id")
nIs_leaf := oJson:BoolOf("data.categories[i].is_leaf")
cLocal_name := oJson:StringOf("data.categories[i].local_name")
? "local_name: " + cLocal_name
cParent_id := oJson:StringOf("data.categories[i].parent_id")
j := 0
nCount_j := oJson:SizeOfArray("data.categories[i].permission_statuses")
DO WHILE j < nCount_j
oJson:J := j
cStrVal := oJson:StringOf("data.categories[i].permission_statuses[j]")
j := j + 1
ENDDO
i := i + 1
ENDDO
oHttp:destroy()
oJsonToken:destroy()
oQueryParams:destroy()
oDt:destroy()
oSb:destroy()
oCrypt:destroy()
oResp:destroy()
oJson:destroy()