Tcl
Tcl
ETrade Renew Access Token
See more ETrade Examples
Renews an ETrade OAuth access token.Chilkat Tcl Downloads
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