Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) ETrade Renew Access TokenRenews an ETrade OAuth access token. For more information, see https://apisb.etrade.com/docs/api/authorization/renew_access_token.html
IncludeFile "CkJsonObject.pb" IncludeFile "CkHttp.pb" IncludeFile "CkFileAccess.pb" IncludeFile "CkHashtable.pb" IncludeFile "CkStringBuilder.pb" IncludeFile "CkHttpResponse.pb" Procedure ChilkatExample() ; This requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHttp::setCkOAuth1(http, 1) CkHttp::setCkOAuthVerifier(http, "") CkHttp::setCkOAuthConsumerKey(http, "ETRADE_CONSUMER_KEY") CkHttp::setCkOAuthConsumerSecret(http, "ETRADE_CONSUMER_SECRET") ; Load the access token previously obtained via the OAuth1 Authorization jsonToken.i = CkJsonObject::ckCreate() If jsonToken.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/etrade.json") If success <> 1 Debug "Failed to load OAuth1 token" CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) ProcedureReturn EndIf CkHttp::setCkOAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"oauth_token")) CkHttp::setCkOAuthTokenSecret(http, CkJsonObject::ckStringOf(jsonToken,"oauth_token_secret")) resp.i = CkHttp::ckQuickGetObj(http,"https://api.etrade.com/oauth/renew_access_token") If CkHttp::ckLastMethodSuccess(http) <> 1 Debug CkHttp::ckLastErrorText(http) CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) ProcedureReturn EndIf ; Make sure a successful response was received. If CkHttpResponse::ckStatusCode(resp) <> 200 Debug CkHttpResponse::ckStatusLine(resp) Debug CkHttpResponse::ckHeader(resp) Debug CkHttpResponse::ckBodyStr(resp) CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) ProcedureReturn EndIf ; If successful, the resp.BodyStr contains something like this: ; oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D Debug CkHttpResponse::ckBodyStr(resp) sbRespBody.i = CkStringBuilder::ckCreate() If sbRespBody.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHttpResponse::ckGetBodySb(resp,sbRespBody) If CkStringBuilder::ckContentsEqual(sbRespBody,"Access Token has been renewed",0) ; 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" Debug "Keeping the same access token, but it's renewed..." CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) CkStringBuilder::ckDispose(sbRespBody) ProcedureReturn EndIf hashTab.i = CkHashtable::ckCreate() If hashTab.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHashtable::ckAddQueryParams(hashTab,CkHttpResponse::ckBodyStr(resp)) accessToken.s = CkHashtable::ckLookupStr(hashTab,"oauth_token") accessTokenSecret.s = CkHashtable::ckLookupStr(hashTab,"oauth_token_secret") CkHttpResponse::ckDispose(resp) ; The access token + secret is what should be saved and used for ; subsequent REST API calls. Debug "Access Token = " + accessToken Debug "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.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckAppendString(json,"oauth_token",accessToken) CkJsonObject::ckAppendString(json,"oauth_token_secret",accessTokenSecret) fac.i = CkFileAccess::ckCreate() If fac.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkFileAccess::ckWriteEntireTextFile(fac,"qa_data/tokens/etrade.json",CkJsonObject::ckEmit(json),"utf-8",0) Debug "Success." CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) CkStringBuilder::ckDispose(sbRespBody) CkHashtable::ckDispose(hashTab) CkJsonObject::ckDispose(json) CkFileAccess::ckDispose(fac) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.