Delphi DLL
Delphi DLL
ETrade Renew Access Token
See more ETrade Examples
Renews an ETrade OAuth access token.Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Hashtable, FileAccess, HttpResponse, StringBuilder, JsonObject, Http;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
http: HCkHttp;
jsonToken: HCkJsonObject;
resp: HCkHttpResponse;
sbRespBody: HCkStringBuilder;
hashTab: HCkHashtable;
accessToken: PWideChar;
accessTokenSecret: PWideChar;
json: HCkJsonObject;
fac: HCkFileAccess;
begin
success := False;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
http := CkHttp_Create();
CkHttp_putOAuth1(http,True);
CkHttp_putOAuthVerifier(http,'');
CkHttp_putOAuthConsumerKey(http,'ETRADE_CONSUMER_KEY');
CkHttp_putOAuthConsumerSecret(http,'ETRADE_CONSUMER_SECRET');
// Load the access token previously obtained via the OAuth1 Authorization
jsonToken := CkJsonObject_Create();
success := CkJsonObject_LoadFile(jsonToken,'qa_data/tokens/etrade.json');
if (success <> True) then
begin
Memo1.Lines.Add('Failed to load OAuth1 token');
Exit;
end;
CkHttp_putOAuthToken(http,CkJsonObject__stringOf(jsonToken,'oauth_token'));
CkHttp_putOAuthTokenSecret(http,CkJsonObject__stringOf(jsonToken,'oauth_token_secret'));
resp := CkHttpResponse_Create();
success := CkHttp_HttpNoBody(http,'GET','https://api.etrade.com/oauth/renew_access_token',resp);
if (success = False) then
begin
Memo1.Lines.Add(CkHttp__lastErrorText(http));
Exit;
end;
// Make sure a successful response was received.
if (CkHttpResponse_getStatusCode(resp) <> 200) then
begin
Memo1.Lines.Add(CkHttpResponse__statusLine(resp));
Memo1.Lines.Add(CkHttpResponse__header(resp));
Memo1.Lines.Add(CkHttpResponse__bodyStr(resp));
Exit;
end;
// If successful, the resp.BodyStr contains something like this:
// oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D
Memo1.Lines.Add(CkHttpResponse__bodyStr(resp));
sbRespBody := CkStringBuilder_Create();
CkHttpResponse_GetBodySb(resp,sbRespBody);
if (CkStringBuilder_ContentsEqual(sbRespBody,'Access Token has been renewed',False)) then
begin
// 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"
Memo1.Lines.Add('Keeping the same access token, but it''s renewed...');
Exit;
end;
hashTab := CkHashtable_Create();
CkHashtable_AddQueryParams(hashTab,CkHttpResponse__bodyStr(resp));
accessToken := CkHashtable__lookupStr(hashTab,'oauth_token');
accessTokenSecret := CkHashtable__lookupStr(hashTab,'oauth_token_secret');
// The access token + secret is what should be saved and used for
// subsequent REST API calls.
Memo1.Lines.Add('Access Token = ' + accessToken);
Memo1.Lines.Add('Access Token Secret = ' + accessTokenSecret);
// Save this access token for future calls.
// Just in case we need user_id and screen_name, save those also..
json := CkJsonObject_Create();
CkJsonObject_AppendString(json,'oauth_token',accessToken);
CkJsonObject_AppendString(json,'oauth_token_secret',accessTokenSecret);
fac := CkFileAccess_Create();
CkFileAccess_WriteEntireTextFile(fac,'qa_data/tokens/etrade.json',CkJsonObject__emit(json),'utf-8',False);
Memo1.Lines.Add('Success.');
CkHttp_Dispose(http);
CkJsonObject_Dispose(jsonToken);
CkHttpResponse_Dispose(resp);
CkStringBuilder_Dispose(sbRespBody);
CkHashtable_Dispose(hashTab);
CkJsonObject_Dispose(json);
CkFileAccess_Dispose(fac);
end;