Sample code for 30+ languages & platforms
Objective-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 Objective-C Downloads

Objective-C
#import <CkoHttp.h>
#import <CkoJsonObject.h>
#import <CkoDateTime.h>
#import <NSString.h>
#import <CkoStringBuilder.h>
#import <CkoCrypt2.h>
#import <CkoHttpResponse.h>

BOOL success = NO;

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

CkoHttp *http = [[CkoHttp alloc] init];

// 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
CkoJsonObject *jsonToken = [[CkoJsonObject alloc] init];
success = [jsonToken LoadFile: @"qa_data/tokens/tiktok-shops.json"];
if (success != YES) {
    NSLog(@"%@",@"Failed to load tiktok-shops.json");
    return;
}

// Replace values in all caps with your specific values.
// SHOP_CIPHER and SHOP_ID are returned from this example: Get Authorized Shops
CkoJsonObject *queryParams = [[CkoJsonObject alloc] init];
[queryParams UpdateString: @"app_key" value: @"APP_KEY"];
[queryParams UpdateString: @"shop_cipher" value: @"SHOP_CIPHER"];
[queryParams UpdateString: @"shop_id" value: @"SHOP_ID"];
CkoDateTime *dt = [[CkoDateTime alloc] init];
[queryParams UpdateString: @"timestamp" value: [dt GetAsUnixTimeStr: NO]];
[queryParams UpdateInt: @"version" value: [NSNumber numberWithInt: 202309]];

// Sort the JSON members by member name, in ascending order (A-Z), case sensitive..
BOOL ascending = YES;
BOOL caseSensitive = YES;
[queryParams Sort: ascending caseSensitive: caseSensitive];

NSString *appSecret = @"APP_SECRET";
NSString *path = @"/product/202309/categories";

// Build the StringToSign
CkoStringBuilder *sb = [[CkoStringBuilder alloc] init];
[sb Append: appSecret];
[sb Append: path];
int numParams = [queryParams.Size intValue];
int i = 0;
while (i < numParams) {
    [sb Append: [queryParams NameAt: [NSNumber numberWithInt: i]]];
    [sb Append: [queryParams StringAt: [NSNumber numberWithInt: i]]];
    i = i + 1;
}

[sb Append: appSecret];

CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init];
crypt.HashAlgorithm = @"SHA256";
crypt.MacAlgorithm = @"HMAC";
crypt.EncodingMode = @"hex_lower";
[crypt SetMacKeyString: appSecret];

NSString *sig = [crypt MacStringENC: [sb GetAsString]];

[queryParams UpdateString: @"access_token" value: [jsonToken StringOf: @"data.access_token"]];
[queryParams UpdateString: @"sign" value: sig];

[http SetRequestHeader: @"x-tts-access-token" value: [jsonToken StringOf: @"data.access_token"]];
[http SetRequestHeader: @"content-type" value: @"application/json"];

CkoHttpResponse *resp = [[CkoHttpResponse alloc] init];
success = [http HttpParams: @"GET" url: @"https://open-api.tiktokglobalshop.com/product/202309/categories" json: queryParams response: resp];
if (success == NO) {
    NSLog(@"%@",http.LastErrorText);
    return;
}

CkoJsonObject *json = [[CkoJsonObject alloc] init];
[resp GetBodyJson: json];

NSLog(@"%d",[resp.StatusCode intValue]);

NSString *id = 0;
BOOL is_leaf;
NSString *local_name = 0;
NSString *parent_id = 0;
int j;
int count_j;
NSString *strVal = 0;

int code = [[json IntOf: @"code"] intValue];
NSString *message = [json StringOf: @"message"];
NSString *request_id = [json StringOf: @"request_id"];
i = 0;
int count_i = [[json SizeOfArray: @"data.categories"] intValue];
while (i < count_i) {
    json.I = [NSNumber numberWithInt: i];
    id = [json StringOf: @"data.categories[i].id"];
    is_leaf = [json BoolOf: @"data.categories[i].is_leaf"];
    local_name = [json StringOf: @"data.categories[i].local_name"];
    NSLog(@"%@%@",@"local_name: ",local_name);
    parent_id = [json StringOf: @"data.categories[i].parent_id"];
    j = 0;
    count_j = [[json SizeOfArray: @"data.categories[i].permission_statuses"] intValue];
    while (j < count_j) {
        json.J = [NSNumber numberWithInt: j];
        strVal = [json StringOf: @"data.categories[i].permission_statuses[j]"];
        j = j + 1;
    }

    i = i + 1;
}