Xbase++
Xbase++
ETrade Renew Access Token
See more ETrade Examples
Renews an ETrade OAuth access token.Chilkat Xbase++ Downloads
LOCAL nSuccess
LOCAL oHttp
LOCAL oJsonToken
LOCAL oResp
LOCAL oSbRespBody
LOCAL oHashTab
LOCAL cAccessToken
LOCAL cAccessTokenSecret
LOCAL oJson
LOCAL oFac
nSuccess := 0
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
oHttp := CreateObject("Chilkat.Http")
oHttp:OAuth1 := 1
oHttp:OAuthVerifier := ""
oHttp:OAuthConsumerKey := "ETRADE_CONSUMER_KEY"
oHttp:OAuthConsumerSecret := "ETRADE_CONSUMER_SECRET"
// Load the access token previously obtained via the OAuth1 Authorization
oJsonToken := CreateObject("Chilkat.JsonObject")
nSuccess := oJsonToken:LoadFile("qa_data/tokens/etrade.json")
IF (nSuccess != 1)
? "Failed to load OAuth1 token"
oHttp:destroy()
oJsonToken:destroy()
RETURN
ENDIF
oHttp:OAuthToken := oJsonToken:StringOf("oauth_token")
oHttp:OAuthTokenSecret := oJsonToken:StringOf("oauth_token_secret")
oResp := CreateObject("Chilkat.HttpResponse")
nSuccess := oHttp:HttpNoBody("GET", "https://api.etrade.com/oauth/renew_access_token", oResp)
IF (nSuccess == 0)
? oHttp:LastErrorText
oHttp:destroy()
oJsonToken:destroy()
oResp:destroy()
RETURN
ENDIF
// Make sure a successful response was received.
IF (oResp:StatusCode != 200)
? oResp:StatusLine
? oResp:Header
? oResp:BodyStr
oHttp:destroy()
oJsonToken:destroy()
oResp:destroy()
RETURN
ENDIF
// If successful, the resp.BodyStr contains something like this:
// oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D
? oResp:BodyStr
oSbRespBody := CreateObject("Chilkat.StringBuilder")
oResp:GetBodySb(oSbRespBody)
IF (oSbRespBody:ContentsEqual("Access Token has been renewed", 0))
// 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"
? "Keeping the same access token, but it's renewed..."
oHttp:destroy()
oJsonToken:destroy()
oResp:destroy()
oSbRespBody:destroy()
RETURN
ENDIF
oHashTab := CreateObject("Chilkat.Hashtable")
oHashTab:AddQueryParams(oResp:BodyStr)
cAccessToken := oHashTab:LookupStr("oauth_token")
cAccessTokenSecret := oHashTab:LookupStr("oauth_token_secret")
// The access token + secret is what should be saved and used for
// subsequent REST API calls.
? "Access Token = " + cAccessToken
? "Access Token Secret = " + cAccessTokenSecret
// Save this access token for future calls.
// Just in case we need user_id and screen_name, save those also..
oJson := CreateObject("Chilkat.JsonObject")
oJson:AppendString("oauth_token", cAccessToken)
oJson:AppendString("oauth_token_secret", cAccessTokenSecret)
oFac := CreateObject("Chilkat.FileAccess")
oFac:WriteEntireTextFile("qa_data/tokens/etrade.json", oJson:Emit(), "utf-8", 0)
? "Success."
oHttp:destroy()
oJsonToken:destroy()
oResp:destroy()
oSbRespBody:destroy()
oHashTab:destroy()
oJson:destroy()
oFac:destroy()