Sample code for 30+ languages & platforms
Tcl

GeoOp Exchange Refresh Token for New Access Token

See more GeoOp Examples

Demonstrates how to use the /oauth2/token endpoint to exchange it for a new access token once the current access token has expired.

Note: This example requires Chilkat v9.5.0.65 or greater.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

# This example also assumes that OAuth2 access and refresh tokens were previously fetched.
# and saved in a JSON file.  

# First get our previously obtained refresh token.
# { .... "refresh_token":"e6dqdG....mzjpT04w==", .... }
set jsonToken [new_CkJsonObject]

set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/geoop.json"]

set rest [new_CkRest]

# Connect to GeoOp...
set bAutoReconnect 1
set success [CkRest_Connect $rest "login.geoop.com" 443 1 $bAutoReconnect]
if {$success != 1} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkJsonObject $jsonToken
    delete_CkRest $rest
    exit
}

# Set the X-Version header.
CkRest_AddHeader $rest "X-Version" "1.0"

# Provide the required form params to get the new access token
puts "refresh_token = [CkJsonObject_stringOf $jsonToken refresh_token]"
CkRest_AddQueryParam $rest "refresh_token" [CkJsonObject_stringOf $jsonToken "refresh_token"]
CkRest_AddQueryParam $rest "grant_type" "refresh_token"
CkRest_AddQueryParam $rest "client_id" "GEOOP-CLIENT-ID"
CkRest_AddQueryParam $rest "client_secret" "GEOOP-CLIENT-SECRET"

set responseBody [CkRest_fullRequestFormUrlEncoded $rest "POST" "/oauth2/token"]
if {[CkRest_get_LastMethodSuccess $rest] != 1} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkJsonObject $jsonToken
    delete_CkRest $rest
    exit
}

# If the response status code did not indicate success, then see what happened..
if {[CkRest_get_ResponseStatusCode $rest] != 200} then {
    puts "Request Header: "
    puts [CkRest_lastRequestHeader $rest]
    puts "----"
    puts "Response StatusCode = [CkRest_get_ResponseStatusCode $rest]"
    puts "Response StatusLine: [CkRest_responseStatusText $rest]"
    puts "Response Header:"
    puts [CkRest_responseHeader $rest]
    puts "$responseBody"
    delete_CkJsonObject $jsonToken
    delete_CkRest $rest
    exit
}

set json [new_CkJsonObject]

CkJsonObject_put_EmitCompact $json 0
CkJsonObject_Load $json $responseBody

# Show the full JSON response.  It should contain the new access token...
puts [CkJsonObject_emit $json]

delete_CkJsonObject $jsonToken
delete_CkRest $rest
delete_CkJsonObject $json