Sample code for 30+ languages & platforms
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

PureBasic
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.

    ; image


    CkHttp::ckDispose(http)
    CkHttpResponse::ckDispose(resp)
    CkHashtable::ckDispose(hashTab)
    CkJsonObject::ckDispose(json)
    CkFileAccess::ckDispose(fac)
    CkStringBuilder::ckDispose(sbUrlForBrowser)
    CkOAuth2::ckDispose(oauth2)


    ProcedureReturn
EndProcedure