Sample code for 30+ languages & platforms
PowerBuilder

ETrade Renew Access Token

See more ETrade Examples

Renews an ETrade OAuth access token.

Chilkat PowerBuilder Downloads

PowerBuilder
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