Lianja
Lianja
ETrade Renew Access Token
See more ETrade Examples
Renews an ETrade OAuth access token.Chilkat Lianja Downloads
llSuccess = .F.
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loHttp = createobject("CkHttp")
loHttp.OAuth1 = .T.
loHttp.OAuthVerifier = ""
loHttp.OAuthConsumerKey = "ETRADE_CONSUMER_KEY"
loHttp.OAuthConsumerSecret = "ETRADE_CONSUMER_SECRET"
// Load the access token previously obtained via the OAuth1 Authorization
loJsonToken = createobject("CkJsonObject")
llSuccess = loJsonToken.LoadFile("qa_data/tokens/etrade.json")
if (llSuccess <> .T.) then
? "Failed to load OAuth1 token"
release loHttp
release loJsonToken
return
endif
loHttp.OAuthToken = loJsonToken.StringOf("oauth_token")
loHttp.OAuthTokenSecret = loJsonToken.StringOf("oauth_token_secret")
loResp = createobject("CkHttpResponse")
llSuccess = loHttp.HttpNoBody("GET","https://api.etrade.com/oauth/renew_access_token",loResp)
if (llSuccess = .F.) then
? loHttp.LastErrorText
release loHttp
release loJsonToken
release loResp
return
endif
// Make sure a successful response was received.
if (loResp.StatusCode <> 200) then
? loResp.StatusLine
? loResp.Header
? loResp.BodyStr
release loHttp
release loJsonToken
release loResp
return
endif
// If successful, the resp.BodyStr contains something like this:
// oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D
? loResp.BodyStr
loSbRespBody = createobject("CkStringBuilder")
loResp.GetBodySb(loSbRespBody)
if (loSbRespBody.ContentsEqual("Access Token has been renewed",.F.)) 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"
? "Keeping the same access token, but it's renewed..."
release loHttp
release loJsonToken
release loResp
release loSbRespBody
return
endif
loHashTab = createobject("CkHashtable")
loHashTab.AddQueryParams(loResp.BodyStr)
lcAccessToken = loHashTab.LookupStr("oauth_token")
lcAccessTokenSecret = loHashTab.LookupStr("oauth_token_secret")
// The access token + secret is what should be saved and used for
// subsequent REST API calls.
? "Access Token = " + lcAccessToken
? "Access Token Secret = " + lcAccessTokenSecret
// Save this access token for future calls.
// Just in case we need user_id and screen_name, save those also..
loJson = createobject("CkJsonObject")
loJson.AppendString("oauth_token",lcAccessToken)
loJson.AppendString("oauth_token_secret",lcAccessTokenSecret)
loFac = createobject("CkFileAccess")
loFac.WriteEntireTextFile("qa_data/tokens/etrade.json",loJson.Emit(),"utf-8",.F.)
? "Success."
release loHttp
release loJsonToken
release loResp
release loSbRespBody
release loHashTab
release loJson
release loFac