Tcl
Tcl
Zoom API - Create JWT to Authenticate API Requests
See more Zoom Examples
Creates a JWT for the Zoom API.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
# Use your API key and secret here...
set apiKey "o9rw6Gq0RnqlkfaSqtCMOA"
set apiSecret "UslmE23Kjh7at9z3If1xAHEyLmPDNxvxQrjR"
# Create a JWT to authenticate Zoom API requests.
set jwt [new_CkJwt]
set jose [new_CkJsonObject]
set success [CkJsonObject_UpdateString $jose "alg" "HS256"]
set success [CkJsonObject_UpdateString $jose "typ" "JWT"]
# Build claims to look like this:
# {"aud":null,"iss":"o9rw6Gq0RnqlkfaSqtCMOA","exp":1627651762,"iat":1627646363}
set claims [new_CkJsonObject]
set success [CkJsonObject_UpdateString $claims "iss" $apiKey]
set success [CkJsonObject_UpdateNull $claims "aud"]
# Set the timestamp of when the JWT was created to now.
set curDateTime [CkJwt_GenNumericDate $jwt 0]
set success [CkJsonObject_AddIntAt $claims -1 "iat" $curDateTime]
# Set the timestamp defining an expiration time (end time) for the token
# to be now + 1 month(3600 * 24 * 30 seconds)
set oneMonth [expr 3600 * [expr 24 * 30]]
set success [CkJsonObject_AddIntAt $claims -1 "exp" [expr $curDateTime + $oneMonth]]
# Produce the smallest possible JWT:
CkJwt_put_AutoCompact $jwt 1
set strJwt [CkJwt_createJwt $jwt [CkJsonObject_emit $jose] [CkJsonObject_emit $claims] $apiSecret]
puts "$strJwt"
# Let's test the JWT to by sending the following request:
# curl --request GET \
# --url 'https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1' \
# --header 'authorization: Bearer { your_token }' \
# --header 'content-type: application/json
set http [new_CkHttp]
# Implements the following CURL command:
# curl --request GET \
# --url 'https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1' \
# --header 'authorization: Bearer { your_token }' \
# --header 'content-type: application/json
# Use the following online tool to generate HTTP code from a CURL command
# Convert a cURL Command to HTTP Source Code
CkHttp_SetRequestHeader $http "content-type" "application/json"
# Adds the "Authorization: Bearer { your_token }" header.
CkHttp_put_AuthToken $http $strJwt
set sbResponseBody [new_CkStringBuilder]
set success [CkHttp_QuickGetSb $http "https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1" $sbResponseBody]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkJwt $jwt
delete_CkJsonObject $jose
delete_CkJsonObject $claims
delete_CkHttp $http
delete_CkStringBuilder $sbResponseBody
exit
}
set jResp [new_CkJsonObject]
CkJsonObject_LoadSb $jResp $sbResponseBody
CkJsonObject_put_EmitCompact $jResp 0
puts "Response Body:"
puts [CkJsonObject_emit $jResp]
set respStatusCode [CkHttp_get_LastStatus $http]
puts "Response Status Code = $respStatusCode"
if {$respStatusCode >= 400} then {
puts "Response Header:"
puts [CkHttp_lastHeader $http]
puts "Failed."
delete_CkJwt $jwt
delete_CkJsonObject $jose
delete_CkJsonObject $claims
delete_CkHttp $http
delete_CkStringBuilder $sbResponseBody
delete_CkJsonObject $jResp
exit
}
# Sample output:
# {
# "page_count": 1,
# "page_number": 1,
# "page_size": 30,
# "total_records": 1,
# "users": [
# {
# "id": "s8uAiMJiRmS_-eu1yOhKlg",
# "first_name": "Joe",
# "last_name": "Example",
# "email": "joe@example.com",
# "type": 1,
# "pmi": 5224934114,
# "timezone": "America/Chicago",
# "verified": 1,
# "created_at": "2021-07-30T11:56:37Z",
# "last_login_time": "2021-07-30T11:56:37Z",
# "language": "en-US",
# "phone_number": "",
# "status": "active",
# "role_id": "0"
# }
# ]
# }
# Sample code for parsing the JSON response...
# Use the following online tool to generate parsing code from sample JSON:
# Generate Parsing Code from JSON
set page_count [CkJsonObject_IntOf $jResp "page_count"]
set page_number [CkJsonObject_IntOf $jResp "page_number"]
set page_size [CkJsonObject_IntOf $jResp "page_size"]
set total_records [CkJsonObject_IntOf $jResp "total_records"]
set i 0
set count_i [CkJsonObject_SizeOfArray $jResp "users"]
while {$i < $count_i} {
CkJsonObject_put_I $jResp $i
set id [CkJsonObject_stringOf $jResp "users[i].id"]
set first_name [CkJsonObject_stringOf $jResp "users[i].first_name"]
set last_name [CkJsonObject_stringOf $jResp "users[i].last_name"]
set email [CkJsonObject_stringOf $jResp "users[i].email"]
set v_type [CkJsonObject_IntOf $jResp "users[i].type"]
set pmi [CkJsonObject_IntOf $jResp "users[i].pmi"]
set timezone [CkJsonObject_stringOf $jResp "users[i].timezone"]
set verified [CkJsonObject_IntOf $jResp "users[i].verified"]
set created_at [CkJsonObject_stringOf $jResp "users[i].created_at"]
set last_login_time [CkJsonObject_stringOf $jResp "users[i].last_login_time"]
set language [CkJsonObject_stringOf $jResp "users[i].language"]
set phone_number [CkJsonObject_stringOf $jResp "users[i].phone_number"]
set status [CkJsonObject_stringOf $jResp "users[i].status"]
set role_id [CkJsonObject_stringOf $jResp "users[i].role_id"]
set i [expr $i + 1]
}
delete_CkJwt $jwt
delete_CkJsonObject $jose
delete_CkJsonObject $claims
delete_CkHttp $http
delete_CkStringBuilder $sbResponseBody
delete_CkJsonObject $jResp