Sample code for 30+ languages & platforms
Lianja

ETrade Renew Access Token

See more ETrade Examples

Renews an ETrade OAuth access token.

Chilkat Lianja Downloads

Lianja
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