Sample code for 30+ languages & platforms
Xbase++

ETrade Renew Access Token

See more ETrade Examples

Renews an ETrade OAuth access token.

Chilkat Xbase++ Downloads

Xbase++
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()