Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL loJsonToken
LOCAL loQueryParams
LOCAL loDt
LOCAL lnAscending
LOCAL lnCaseSensitive
LOCAL lcAppSecret
LOCAL lcPath
LOCAL loSb
LOCAL lnNumParams
LOCAL i
LOCAL loCrypt
LOCAL lcSig
LOCAL loResp
LOCAL loJson
LOCAL lcId
LOCAL lnIs_leaf
LOCAL lcLocal_name
LOCAL lcParent_id
LOCAL j
LOCAL lnCount_j
LOCAL lcStrVal
LOCAL lnCode
LOCAL lcMessage
LOCAL lcRequest_id
LOCAL lnCount_i

lnSuccess = 0

* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loHttp = 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
loJsonToken = CreateObject('Chilkat.JsonObject')
lnSuccess = loJsonToken.LoadFile("qa_data/tokens/tiktok-shops.json")
IF (lnSuccess <> 1) THEN
    ? "Failed to load tiktok-shops.json"
    RELEASE loHttp
    RELEASE loJsonToken
    CANCEL
ENDIF

* Replace values in all caps with your specific values.
* SHOP_CIPHER and SHOP_ID are returned from this example: Get Authorized Shops
loQueryParams = CreateObject('Chilkat.JsonObject')
loQueryParams.UpdateString("app_key","APP_KEY")
loQueryParams.UpdateString("shop_cipher","SHOP_CIPHER")
loQueryParams.UpdateString("shop_id","SHOP_ID")
loDt = CreateObject('Chilkat.CkDateTime')
loQueryParams.UpdateString("timestamp",loDt.GetAsUnixTimeStr(0))
loQueryParams.UpdateInt("version",202309)

* Sort the JSON members by member name, in ascending order (A-Z), case sensitive..
lnAscending = 1
lnCaseSensitive = 1
loQueryParams.Sort(lnAscending,lnCaseSensitive)

lcAppSecret = "APP_SECRET"
lcPath = "/product/202309/categories"

* Build the StringToSign
loSb = CreateObject('Chilkat.StringBuilder')
loSb.Append(lcAppSecret)
loSb.Append(lcPath)
lnNumParams = loQueryParams.Size
i = 0
DO WHILE i < lnNumParams
    loSb.Append(loQueryParams.NameAt(i))
    loSb.Append(loQueryParams.StringAt(i))
    i = i + 1
ENDDO
loSb.Append(lcAppSecret)

loCrypt = CreateObject('Chilkat.Crypt2')
loCrypt.HashAlgorithm = "SHA256"
loCrypt.MacAlgorithm = "HMAC"
loCrypt.EncodingMode = "hex_lower"
loCrypt.SetMacKeyString(lcAppSecret)

lcSig = loCrypt.MacStringENC(loSb.GetAsString())

loQueryParams.UpdateString("access_token",loJsonToken.StringOf("data.access_token"))
loQueryParams.UpdateString("sign",lcSig)

loHttp.SetRequestHeader("x-tts-access-token",loJsonToken.StringOf("data.access_token"))
loHttp.SetRequestHeader("content-type","application/json")

loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpParams("GET","https://open-api.tiktokglobalshop.com/product/202309/categories",loQueryParams,loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loJsonToken
    RELEASE loQueryParams
    RELEASE loDt
    RELEASE loSb
    RELEASE loCrypt
    RELEASE loResp
    CANCEL
ENDIF

loJson = CreateObject('Chilkat.JsonObject')
loResp.GetBodyJson(loJson)

? STR(loResp.StatusCode)

lnCode = loJson.IntOf("code")
lcMessage = loJson.StringOf("message")
lcRequest_id = loJson.StringOf("request_id")
i = 0
lnCount_i = loJson.SizeOfArray("data.categories")
DO WHILE i < lnCount_i
    loJson.I = i
    lcId = loJson.StringOf("data.categories[i].id")
    lnIs_leaf = loJson.BoolOf("data.categories[i].is_leaf")
    lcLocal_name = loJson.StringOf("data.categories[i].local_name")
    ? "local_name: " + lcLocal_name
    lcParent_id = loJson.StringOf("data.categories[i].parent_id")
    j = 0
    lnCount_j = loJson.SizeOfArray("data.categories[i].permission_statuses")
    DO WHILE j < lnCount_j
        loJson.J = j
        lcStrVal = loJson.StringOf("data.categories[i].permission_statuses[j]")
        j = j + 1
    ENDDO
    i = i + 1
ENDDO

RELEASE loHttp
RELEASE loJsonToken
RELEASE loQueryParams
RELEASE loDt
RELEASE loSb
RELEASE loCrypt
RELEASE loResp
RELEASE loJson