PowerBuilder
PowerBuilder
ETrade Renew Access Token
See more ETrade Examples
Renews an ETrade OAuth access token.Chilkat PowerBuilder Downloads
integer li_rc
integer li_Success
oleobject loo_Http
oleobject loo_JsonToken
oleobject loo_Resp
oleobject loo_SbRespBody
oleobject loo_HashTab
string ls_AccessToken
string ls_AccessTokenSecret
oleobject loo_Json
oleobject loo_Fac
li_Success = 0
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")
if li_rc < 0 then
destroy loo_Http
MessageBox("Error","Connecting to COM object failed")
return
end if
loo_Http.OAuth1 = 1
loo_Http.OAuthVerifier = ""
loo_Http.OAuthConsumerKey = "ETRADE_CONSUMER_KEY"
loo_Http.OAuthConsumerSecret = "ETRADE_CONSUMER_SECRET"
// Load the access token previously obtained via the OAuth1 Authorization
loo_JsonToken = create oleobject
li_rc = loo_JsonToken.ConnectToNewObject("Chilkat.JsonObject")
li_Success = loo_JsonToken.LoadFile("qa_data/tokens/etrade.json")
if li_Success <> 1 then
Write-Debug "Failed to load OAuth1 token"
destroy loo_Http
destroy loo_JsonToken
return
end if
loo_Http.OAuthToken = loo_JsonToken.StringOf("oauth_token")
loo_Http.OAuthTokenSecret = loo_JsonToken.StringOf("oauth_token_secret")
loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")
li_Success = loo_Http.HttpNoBody("GET","https://api.etrade.com/oauth/renew_access_token",loo_Resp)
if li_Success = 0 then
Write-Debug loo_Http.LastErrorText
destroy loo_Http
destroy loo_JsonToken
destroy loo_Resp
return
end if
// Make sure a successful response was received.
if loo_Resp.StatusCode <> 200 then
Write-Debug loo_Resp.StatusLine
Write-Debug loo_Resp.Header
Write-Debug loo_Resp.BodyStr
destroy loo_Http
destroy loo_JsonToken
destroy loo_Resp
return
end if
// If successful, the resp.BodyStr contains something like this:
// oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D
Write-Debug loo_Resp.BodyStr
loo_SbRespBody = create oleobject
li_rc = loo_SbRespBody.ConnectToNewObject("Chilkat.StringBuilder")
loo_Resp.GetBodySb(loo_SbRespBody)
if loo_SbRespBody.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"
Write-Debug "Keeping the same access token, but it's renewed..."
destroy loo_Http
destroy loo_JsonToken
destroy loo_Resp
destroy loo_SbRespBody
return
end if
loo_HashTab = create oleobject
li_rc = loo_HashTab.ConnectToNewObject("Chilkat.Hashtable")
loo_HashTab.AddQueryParams(loo_Resp.BodyStr)
ls_AccessToken = loo_HashTab.LookupStr("oauth_token")
ls_AccessTokenSecret = loo_HashTab.LookupStr("oauth_token_secret")
// The access token + secret is what should be saved and used for
// subsequent REST API calls.
Write-Debug "Access Token = " + ls_AccessToken
Write-Debug "Access Token Secret = " + ls_AccessTokenSecret
// Save this access token for future calls.
// Just in case we need user_id and screen_name, save those also..
loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")
loo_Json.AppendString("oauth_token",ls_AccessToken)
loo_Json.AppendString("oauth_token_secret",ls_AccessTokenSecret)
loo_Fac = create oleobject
li_rc = loo_Fac.ConnectToNewObject("Chilkat.FileAccess")
loo_Fac.WriteEntireTextFile("qa_data/tokens/etrade.json",loo_Json.Emit(),"utf-8",0)
Write-Debug "Success."
destroy loo_Http
destroy loo_JsonToken
destroy loo_Resp
destroy loo_SbRespBody
destroy loo_HashTab
destroy loo_Json
destroy loo_Fac