Sample code for 30+ languages & platforms
DataFlex

Get eBay Application Token

See more eBay Examples

This example shows how to request an eBay Application token.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    Variant vReq
    Handle hoReq
    String sEndPoint
    Variant vResp
    Handle hoResp
    Handle hoJson
    String sAccessToken
    Handle hoDtExpire
    Handle hoFac
    String sTemp1
    Integer iTemp1

    Move False To iSuccess

    // 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

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End

    // 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.
    Set ComLogin Of hoHttp To "EBAY_CLIENT_ID"
    Set ComPassword Of hoHttp To "EBAY_CLIENT_SECRET"
    Set ComBasicAuth Of hoHttp To True

    // 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.
    Get Create (RefClass(cComChilkatHttpRequest)) To hoReq
    If (Not(IsComObjectCreated(hoReq))) Begin
        Send CreateComObject of hoReq
    End
    Set ComHttpVerb Of hoReq To "POST"
    Send ComAddParam To hoReq "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

    Send ComAddParam To hoReq "scope" "https://api.ebay.com/oauth/api_scope"

    Move "https://api.sandbox.ebay.com/identity/v1/oauth2/token" To sEndPoint
    Set ComContentType Of hoReq To "application/x-www-form-urlencoded"

    Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
    If (Not(IsComObjectCreated(hoResp))) Begin
        Send CreateComObject of hoResp
    End
    Get pvComObject of hoReq to vReq
    Get pvComObject of hoResp to vResp
    Get ComHttpReq Of hoHttp sEndPoint vReq vResp To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // The response is JSON..
    Get Create (RefClass(cComChilkatJsonObject)) To hoJson
    If (Not(IsComObjectCreated(hoJson))) Begin
        Send CreateComObject of hoJson
    End
    Get ComBodyStr Of hoResp To sTemp1
    Get ComLoad Of hoJson sTemp1 To iSuccess
    Set ComEmitCompact Of hoJson To False

    // If the response status code is not 200, then it failed.
    Get ComStatusCode Of hoResp To iTemp1
    Showln "Response status code = " iTemp1
    Get ComStatusCode Of hoResp To iTemp1
    If (iTemp1 <> 200) Begin
        Get ComEmit Of hoJson To sTemp1
        Showln sTemp1
        Showln "Failed."
        Procedure_Return
    End

    // We successfully retrieved an eBay access token.
    // The actual access token string can be parsed from the JSON like this:
    Get ComStringOf Of hoJson "access_token" To sAccessToken

    // 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.
    Get Create (RefClass(cComCkDateTime)) To hoDtExpire
    If (Not(IsComObjectCreated(hoDtExpire))) Begin
        Send CreateComObject of hoDtExpire
    End
    Get ComSetFromCurrentSystemTime Of hoDtExpire To iSuccess
    Get ComIntOf Of hoJson "expires_in" To iTemp1
    Get ComAddSeconds Of hoDtExpire iTemp1 To iSuccess
    Get ComGetAsTimestamp Of hoDtExpire False To sTemp1
    Get ComAppendString Of hoJson "expire_time" sTemp1 To iSuccess

    // Persist the JSON to a file.
    Get Create (RefClass(cComCkFileAccess)) To hoFac
    If (Not(IsComObjectCreated(hoFac))) Begin
        Send CreateComObject of hoFac
    End
    Get ComEmit Of hoJson To sTemp1
    Get ComWriteEntireTextFile Of hoFac "qa_data/tokens/ebay.json" sTemp1 "utf-8" False To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoFac To sTemp1
        Showln sTemp1
        Showln "Failed to save eBay Application token to file."
        Procedure_Return
    End

    Get ComEmit Of hoJson To sTemp1
    Showln sTemp1
    Showln "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.
    // 


End_Procedure