![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Get eBay Application TokenThis example shows how to request an eBay Application token. Note: This example requires Chilkat v11.0.0 or greater.
IncludeFile "CkJsonObject.pb" IncludeFile "CkDateTime.pb" IncludeFile "CkHttp.pb" IncludeFile "CkFileAccess.pb" IncludeFile "CkHttpRequest.pb" IncludeFile "CkHttpResponse.pb" Procedure ChilkatExample() success.i = 0 ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ; See the Ebay documentation about Access token types ; Also see the Ebay documentation about client credentials grant flow http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; If using the sandbox, the target endpoint will be: ; POST https://api.sandbox.ebay.com/identity/v1/oauth2/token ; If using the production (live) system, the target endpoint will be: ; POST https://api.ebay.com/identity/v1/oauth2/token ; The eBay client_id and client_secret needs to be sent ; in a Basic Authorization request header, which has this format: ; Authorization: Basic <B64_encoded_oauth_credentials> ; Chilkat takes care of it. You only need to set the Login = client_id, ; and password = client_secret, and indicate you want "Basic" HTTP Authorization. CkHttp::setCkLogin(http, "EBAY_CLIENT_ID") CkHttp::setCkPassword(http, "EBAY_CLIENT_SECRET") CkHttp::setCkBasicAuth(http, 1) ; Let's do the following POST: ; HTTP method: POST ; URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token ; ; HTTP headers: ; Content-Type = application/x-www-form-urlencoded ; Authorization = Basic <B64-encoded-oauth-credentials> ; ; Request body (wrapped for readability): ; grant_type=client_credentials& ; redirect_uri=<RuName-value>& ; scope=<SPACE separated list of scopes> ; ; Create an HttpRequest object to hold the request params. req.i = CkHttpRequest::ckCreate() If req.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHttpRequest::setCkHttpVerb(req, "POST") CkHttpRequest::ckAddParam(req,"grant_type","client_credentials") ; The scope query param indicates the access to be provided by the token. ; Multiple scopes can be specified by separating each with a SPACE char. ; See the Ebay OAuth scopes documentation CkHttpRequest::ckAddParam(req,"scope","https://api.ebay.com/oauth/api_scope") endPoint.s = "https://api.sandbox.ebay.com/identity/v1/oauth2/token" CkHttpRequest::setCkContentType(req, "application/x-www-form-urlencoded") resp.i = CkHttpResponse::ckCreate() If resp.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkHttp::ckHttpReq(http,endPoint,req,resp) If success = 0 Debug CkHttp::ckLastErrorText(http) CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) CkHttpResponse::ckDispose(resp) ProcedureReturn EndIf ; The response is JSON.. json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp)) CkJsonObject::setCkEmitCompact(json, 0) ; If the response status code is not 200, then it failed. Debug "Response status code = " + Str(CkHttpResponse::ckStatusCode(resp)) If CkHttpResponse::ckStatusCode(resp) <> 200 Debug CkJsonObject::ckEmit(json) Debug "Failed." CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) CkHttpResponse::ckDispose(resp) CkJsonObject::ckDispose(json) ProcedureReturn EndIf ; We successfully retrieved an eBay access token. ; The actual access token string can be parsed from the JSON like this: accessToken.s = CkJsonObject::ckStringOf(json,"access_token") ; This application token is only valid for 7200 seconds (2 hours). We'll want to refresh ; it before it expires. (There is an online example for that..) ; For now, let's save the JSON to a file for our application to use. ; But before doing that, let's add to the JSON an expiration timestamp ; so we know when to refresh the token. dtExpire.i = CkDateTime::ckCreate() If dtExpire.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkDateTime::ckSetFromCurrentSystemTime(dtExpire) CkDateTime::ckAddSeconds(dtExpire,CkJsonObject::ckIntOf(json,"expires_in")) CkJsonObject::ckAppendString(json,"expire_time",CkDateTime::ckGetAsTimestamp(dtExpire,0)) ; Persist the JSON to a file. fac.i = CkFileAccess::ckCreate() If fac.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkFileAccess::ckWriteEntireTextFile(fac,"qa_data/tokens/ebay.json",CkJsonObject::ckEmit(json),"utf-8",0) If success <> 1 Debug CkFileAccess::ckLastErrorText(fac) Debug "Failed to save eBay Application token to file." CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) CkHttpResponse::ckDispose(resp) CkJsonObject::ckDispose(json) CkDateTime::ckDispose(dtExpire) CkFileAccess::ckDispose(fac) ProcedureReturn EndIf Debug CkJsonObject::ckEmit(json) Debug "Success." ; The output of this example is: ; { ; "access_token": "v^1.1#i^1#p^1#I^3#r^0# ... Ajp1BQhJDgAA", ; "token_type": "Application Access Token", ; "expires_in": 7200, ; "refresh_token": "N/A", ; "expire_time": "2017-04-16T14:44:20Z" ; } ; ; Success. ; CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) CkHttpResponse::ckDispose(resp) CkJsonObject::ckDispose(json) CkDateTime::ckDispose(dtExpire) CkFileAccess::ckDispose(fac) ProcedureReturn EndProcedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.