Visual FoxPro
Visual FoxPro
ETrade Renew Access Token
See more ETrade Examples
Renews an ETrade OAuth access token.Chilkat Visual FoxPro Downloads
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