Sample code for 30+ languages & platforms
Visual FoxPro

ETrade Renew Access Token

See more ETrade Examples

Renews an ETrade OAuth access token.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL loJsonToken
LOCAL loResp
LOCAL loSbRespBody
LOCAL loHashTab
LOCAL lcAccessToken
LOCAL lcAccessTokenSecret
LOCAL loJson
LOCAL loFac

lnSuccess = 0

* This requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loHttp = CreateObject('Chilkat.Http')

loHttp.OAuth1 = 1
loHttp.OAuthVerifier = ""
loHttp.OAuthConsumerKey = "ETRADE_CONSUMER_KEY"
loHttp.OAuthConsumerSecret = "ETRADE_CONSUMER_SECRET"

* Load the access token previously obtained via the OAuth1 Authorization
loJsonToken = CreateObject('Chilkat.JsonObject')
lnSuccess = loJsonToken.LoadFile("qa_data/tokens/etrade.json")
IF (lnSuccess <> 1) THEN
    ? "Failed to load OAuth1 token"
    RELEASE loHttp
    RELEASE loJsonToken
    CANCEL
ENDIF

loHttp.OAuthToken = loJsonToken.StringOf("oauth_token")
loHttp.OAuthTokenSecret = loJsonToken.StringOf("oauth_token_secret")

loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpNoBody("GET","https://api.etrade.com/oauth/renew_access_token",loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loJsonToken
    RELEASE loResp
    CANCEL
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
    CANCEL
ENDIF

* If successful, the resp.BodyStr contains something like this:
* oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D
? loResp.BodyStr

loSbRespBody = CreateObject('Chilkat.StringBuilder')
loResp.GetBodySb(loSbRespBody)
IF (loSbRespBody.ContentsEqual("Access Token has been renewed",0)) 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
    CANCEL
ENDIF

loHashTab = CreateObject('Chilkat.Hashtable')
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('Chilkat.JsonObject')
loJson.AppendString("oauth_token",lcAccessToken)
loJson.AppendString("oauth_token_secret",lcAccessTokenSecret)

loFac = CreateObject('Chilkat.FileAccess')
loFac.WriteEntireTextFile("qa_data/tokens/etrade.json",loJson.Emit(),"utf-8",0)

? "Success."

RELEASE loHttp
RELEASE loJsonToken
RELEASE loResp
RELEASE loSbRespBody
RELEASE loHashTab
RELEASE loJson
RELEASE loFac