PureBasic
PureBasic
ETrade OAuth1 Authorization (3-legged) Step 1
See more ETrade Examples
Demonstrates the first step in 3-legged OAuth1 authorization for the ETrade REST API. This example sends an HTTP request to the "request token URL" to get a request token that begins the OAuth1 process. (See https://apisb.etrade.com/docs/api/authorization/request_token.html )This example uses the sandbox request token URL. The live request token URL would be "https://api.etrade.com/oauth/request_token".
Chilkat PureBasic Downloads
IncludeFile "CkJsonObject.pb"
IncludeFile "CkOAuth2.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkFileAccess.pb"
IncludeFile "CkHashtable.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkHttpResponse.pb"
Procedure ChilkatExample()
success.i = 0
; This requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
consumerKey.s = "ETRADE_CONSUMER_KEY"
consumerSecret.s = "ETRADE_CONSUMER_SECRET"
; Note: This example uses the sandbox request token URL.
; The live Get Request Token Request URL is:
; https://api.etrade.com/oauth/request_token
; This example will use the Sandbox Token Request URL:
requestTokenUrl.s = "https://apisb.etrade.com/oauth/request_token"
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = 1
CkHttp::setCkOAuth1(http, 1)
CkHttp::setCkOAuthConsumerKey(http, consumerKey)
CkHttp::setCkOAuthConsumerSecret(http, consumerSecret)
CkHttp::setCkOAuthCallback(http, "oob")
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpNoBody(http,"GET",requestTokenUrl,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
; If successful, the resp.BodyStr contains something like this:
; oauth_token=-Wa_KwAAAAAAxfEPAAABV8Qar4Q&oauth_token_secret=OfHY4tZBX2HK4f7yIw76WYdvnl99MVGB&oauth_callback_confirmed=true
Debug CkHttpResponse::ckBodyStr(resp)
hashTab.i = CkHashtable::ckCreate()
If hashTab.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHashtable::ckAddQueryParams(hashTab,CkHttpResponse::ckBodyStr(resp))
requestToken.s = CkHashtable::ckLookupStr(hashTab,"oauth_token")
requestTokenSecret.s = CkHashtable::ckLookupStr(hashTab,"oauth_token_secret")
CkHttp::setCkOAuthTokenSecret(http, requestTokenSecret)
Debug "oauth_token = " + requestToken
Debug "oauth_token_secret = " + requestTokenSecret
; Save this request token for the next step..
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckAppendString(json,"oauth_token",requestToken)
CkJsonObject::ckAppendString(json,"oauth_token_secret",requestTokenSecret)
fac.i = CkFileAccess::ckCreate()
If fac.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkFileAccess::ckWriteEntireTextFile(fac,"qa_data/tokens/etrade_request_token.json",CkJsonObject::ckEmit(json),"utf-8",0)
; ---------------------------------------------------------------------------
; The next step is to form a URL to send to the authorizeUrl
; This is an HTTP GET that we load into a popup browser.
authorizeUrl.s = "https://us.etrade.com/e/t/etws/authorize"
sbUrlForBrowser.i = CkStringBuilder::ckCreate()
If sbUrlForBrowser.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbUrlForBrowser,authorizeUrl)
CkStringBuilder::ckAppend(sbUrlForBrowser,"?key=")
CkStringBuilder::ckAppend(sbUrlForBrowser,consumerKey)
CkStringBuilder::ckAppend(sbUrlForBrowser,"&token=")
CkStringBuilder::ckAppend(sbUrlForBrowser,requestToken)
url.s = CkStringBuilder::ckGetAsString(sbUrlForBrowser)
; Launch the system's default browser navigated to the URL.
oauth2.i = CkOAuth2::ckCreate()
If oauth2.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkOAuth2::ckLaunchBrowser(oauth2,url)
If success = 0
Debug CkOAuth2::ckLastErrorText(oauth2)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
CkHashtable::ckDispose(hashTab)
CkJsonObject::ckDispose(json)
CkFileAccess::ckDispose(fac)
CkStringBuilder::ckDispose(sbUrlForBrowser)
CkOAuth2::ckDispose(oauth2)
ProcedureReturn
EndIf
; The ETrade account owner will login and grant access to the application.
; A short verifier code will be displayed (as shown below), and this must be copy-and-pasted
; into the next step to Complete the 3-legged OAuth1 Authorization
; Note: The browser will NOT automatically direct you to the next page.
; You should copy the verifier code, close the browser, and then paste the verifier
; code into your application.
;
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
CkHashtable::ckDispose(hashTab)
CkJsonObject::ckDispose(json)
CkFileAccess::ckDispose(fac)
CkStringBuilder::ckDispose(sbUrlForBrowser)
CkOAuth2::ckDispose(oauth2)
ProcedureReturn
EndProcedure