Sample code for 30+ languages & platforms
Tcl

ETrade Renew Access Token

See more ETrade Examples

Renews an ETrade OAuth access token.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set http [new_CkHttp]

CkHttp_put_OAuth1 $http 1
CkHttp_put_OAuthVerifier $http ""
CkHttp_put_OAuthConsumerKey $http "ETRADE_CONSUMER_KEY"
CkHttp_put_OAuthConsumerSecret $http "ETRADE_CONSUMER_SECRET"

# Load the access token previously obtained via the OAuth1 Authorization
set jsonToken [new_CkJsonObject]

set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/etrade.json"]
if {$success != 1} then {
    puts "Failed to load OAuth1 token"
    delete_CkHttp $http
    delete_CkJsonObject $jsonToken
    exit
}

CkHttp_put_OAuthToken $http [CkJsonObject_stringOf $jsonToken "oauth_token"]
CkHttp_put_OAuthTokenSecret $http [CkJsonObject_stringOf $jsonToken "oauth_token_secret"]

set resp [new_CkHttpResponse]

set success [CkHttp_HttpNoBody $http "GET" "https://api.etrade.com/oauth/renew_access_token" $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkJsonObject $jsonToken
    delete_CkHttpResponse $resp
    exit
}

# Make sure a successful response was received.
if {[CkHttpResponse_get_StatusCode $resp] != 200} then {
    puts [CkHttpResponse_statusLine $resp]
    puts [CkHttpResponse_header $resp]
    puts [CkHttpResponse_bodyStr $resp]
    delete_CkHttp $http
    delete_CkJsonObject $jsonToken
    delete_CkHttpResponse $resp
    exit
}

# If successful, the resp.BodyStr contains something like this:
# oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D
puts [CkHttpResponse_bodyStr $resp]

set sbRespBody [new_CkStringBuilder]

CkHttpResponse_GetBodySb $resp $sbRespBody
if {D]CkStringBuilder_ContentsEqual $sbRespBody "Access Token has been renewed" 0[/L} then {
    # The documentation at https://apisb.etrade.com/docs/api/authorization/renew_access_token.html
    # indicates that the response should be as described above.  However, the response received when
    # trying to refresh a non-expired token was "Access Token has been renewed"
    puts "Keeping the same access token, but it's renewed..."
    delete_CkHttp $http
    delete_CkJsonObject $jsonToken
    delete_CkHttpResponse $resp
    delete_CkStringBuilder $sbRespBody
    exit
}

set hashTab [new_CkHashtable]

CkHashtable_AddQueryParams $hashTab [CkHttpResponse_bodyStr $resp]

set accessToken [CkHashtable_lookupStr $hashTab "oauth_token"]
set accessTokenSecret [CkHashtable_lookupStr $hashTab "oauth_token_secret"]

# The access token + secret is what should be saved and used for
# subsequent REST API calls.
puts "Access Token = $accessToken"
puts "Access Token Secret = $accessTokenSecret"

# Save this access token for future calls.
# Just in case we need user_id and screen_name, save those also..
set json [new_CkJsonObject]

CkJsonObject_AppendString $json "oauth_token" $accessToken
CkJsonObject_AppendString $json "oauth_token_secret" $accessTokenSecret

set fac [new_CkFileAccess]

CkFileAccess_WriteEntireTextFile $fac "qa_data/tokens/etrade.json" [CkJsonObject_emit $json] "utf-8" 0

puts "Success."

delete_CkHttp $http
delete_CkJsonObject $jsonToken
delete_CkHttpResponse $resp
delete_CkStringBuilder $sbRespBody
delete_CkHashtable $hashTab
delete_CkJsonObject $json
delete_CkFileAccess $fac