C
C
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 C Downloads
#include <C_CkHttp.h>
#include <C_CkHttpResponse.h>
#include <C_CkHashtable.h>
#include <C_CkJsonObject.h>
#include <C_CkFileAccess.h>
#include <C_CkStringBuilder.h>
#include <C_CkOAuth2.h>
void ChilkatSample(void)
{
BOOL success;
const char *consumerKey;
const char *consumerSecret;
const char *requestTokenUrl;
HCkHttp http;
HCkHttpResponse resp;
HCkHashtable hashTab;
const char *requestToken;
const char *requestTokenSecret;
HCkJsonObject json;
HCkFileAccess fac;
const char *authorizeUrl;
HCkStringBuilder sbUrlForBrowser;
const char *url;
HCkOAuth2 oauth2;
success = FALSE;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
consumerKey = "ETRADE_CONSUMER_KEY";
consumerSecret = "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 = "https://apisb.etrade.com/oauth/request_token";
http = CkHttp_Create();
success = TRUE;
CkHttp_putOAuth1(http,TRUE);
CkHttp_putOAuthConsumerKey(http,consumerKey);
CkHttp_putOAuthConsumerSecret(http,consumerSecret);
CkHttp_putOAuthCallback(http,"oob");
resp = CkHttpResponse_Create();
success = CkHttp_HttpNoBody(http,"GET",requestTokenUrl,resp);
if (success == FALSE) {
printf("%s\n",CkHttp_lastErrorText(http));
CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);
return;
}
// If successful, the resp.BodyStr contains something like this:
// oauth_token=-Wa_KwAAAAAAxfEPAAABV8Qar4Q&oauth_token_secret=OfHY4tZBX2HK4f7yIw76WYdvnl99MVGB&oauth_callback_confirmed=true
printf("%s\n",CkHttpResponse_bodyStr(resp));
hashTab = CkHashtable_Create();
CkHashtable_AddQueryParams(hashTab,CkHttpResponse_bodyStr(resp));
requestToken = CkHashtable_lookupStr(hashTab,"oauth_token");
requestTokenSecret = CkHashtable_lookupStr(hashTab,"oauth_token_secret");
CkHttp_putOAuthTokenSecret(http,requestTokenSecret);
printf("oauth_token = %s\n",requestToken);
printf("oauth_token_secret = %s\n",requestTokenSecret);
// Save this request token for the next step..
json = CkJsonObject_Create();
CkJsonObject_AppendString(json,"oauth_token",requestToken);
CkJsonObject_AppendString(json,"oauth_token_secret",requestTokenSecret);
fac = CkFileAccess_Create();
CkFileAccess_WriteEntireTextFile(fac,"qa_data/tokens/etrade_request_token.json",CkJsonObject_emit(json),"utf-8",FALSE);
// ---------------------------------------------------------------------------
// 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 = "https://us.etrade.com/e/t/etws/authorize";
sbUrlForBrowser = CkStringBuilder_Create();
CkStringBuilder_Append(sbUrlForBrowser,authorizeUrl);
CkStringBuilder_Append(sbUrlForBrowser,"?key=");
CkStringBuilder_Append(sbUrlForBrowser,consumerKey);
CkStringBuilder_Append(sbUrlForBrowser,"&token=");
CkStringBuilder_Append(sbUrlForBrowser,requestToken);
url = CkStringBuilder_getAsString(sbUrlForBrowser);
// Launch the system's default browser navigated to the URL.
oauth2 = CkOAuth2_Create();
success = CkOAuth2_LaunchBrowser(oauth2,url);
if (success == FALSE) {
printf("%s\n",CkOAuth2_lastErrorText(oauth2));
CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);
CkHashtable_Dispose(hashTab);
CkJsonObject_Dispose(json);
CkFileAccess_Dispose(fac);
CkStringBuilder_Dispose(sbUrlForBrowser);
CkOAuth2_Dispose(oauth2);
return;
}
// 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_Dispose(http);
CkHttpResponse_Dispose(resp);
CkHashtable_Dispose(hashTab);
CkJsonObject_Dispose(json);
CkFileAccess_Dispose(fac);
CkStringBuilder_Dispose(sbUrlForBrowser);
CkOAuth2_Dispose(oauth2);
}