PureBasic
PureBasic
PayPal -- Get an OAuth 2.0 Access Token
See more PayPal Examples
Demonstrates how to send a request to get a PayPal OAuth2 access token. Sends an HTTP request equivalent to the following:curl https://api.sandbox.paypal.com/v1/oauth2/token \ -H "Accept: application/json" \ -H "Accept-Language: en_US" \ -u "Client-Id:Secret" \ -d "grant_type=client_credentials"
Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkDateTime.pb"
Procedure ChilkatExample()
success.i = 0
; This requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Make the initial connection.
; A single REST object, once connected, can be used for many PayPal REST API calls.
; The auto-reconnect indicates that if the already-established HTTPS connection is closed,
; then it will be automatically re-established as needed.
bAutoReconnect.i = 1
success = CkRest::ckConnect(rest,"api.sandbox.paypal.com",443,1,bAutoReconnect)
If success <> 1
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
ProcedureReturn
EndIf
; Duplicate this request:
; curl https://api.sandbox.paypal.com/v1/oauth2/token \
; -H "Accept: application/json" \
; -H "Accept-Language: en_US" \
; -u "Client-Id:Secret" \
; -d "grant_type=client_credentials"
CkRest::ckAddHeader(rest,"Accept","application/json")
CkRest::ckAddHeader(rest,"Accept-Language","en_US")
; For additional help on where to find your client ID and API secret, see PayPal Client_ID and API_Secret
CkRest::ckSetAuthBasic(rest,"PAYPAL_REST_API_CLIENT_ID","PAYPAL_REST_API_SECRET")
CkRest::ckAddQueryParam(rest,"grant_type","client_credentials")
responseStr.s = CkRest::ckFullRequestFormUrlEncoded(rest,"POST","/v1/oauth2/token")
If CkRest::ckLastMethodSuccess(rest) <> 1
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
ProcedureReturn
EndIf
Debug CkRest::ckLastRequestHeader(rest)
; A sample response:
; {
; "scope": "https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/vault/credit-card/.*",
; "access_token": "EEwJ6tF9x5WCIZDYzyZGaz6Khbw7raYRIBV_WxVvgmsG",
; "token_type": "Bearer",
; "app_id": "APP-6XR95014BA15863X",
; "expires_in": 28800
; }
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoad(json,responseStr)
CkJsonObject::setCkEmitCompact(json, 0)
; Check the response status code. A 200 indicates success..
If CkRest::ckResponseStatusCode(rest) <> 200
Debug CkJsonObject::ckEmit(json)
Debug "Failed."
CkRest::ckDispose(rest)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
; Given that the access token expires in approx 8 hours,
; let's record the date/time this token was created.
; This will allow us to know beforehand if the token
; is expired (and we can then fetch a new token).
dateTime.i = CkDateTime::ckCreate()
If dateTime.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
bLocalTime.i = 0
dtNow.i = CkDateTime::ckGetAsUnixTime(dateTime,bLocalTime)
CkJsonObject::ckAppendInt(json,"tokenCreateTimeUtc",dtNow)
; Examine the access token and save to a file.
Debug "Access Token: " + CkJsonObject::ckStringOf(json,"access_token")
Debug "Full JSON Response:"
Debug CkJsonObject::ckEmit(json)
sbResponse.i = CkStringBuilder::ckCreate()
If sbResponse.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbResponse,CkJsonObject::ckEmit(json))
bEmitBom.i = 0
CkStringBuilder::ckWriteFile(sbResponse,"qa_data/tokens/paypal.json","utf-8",bEmitBom)
CkRest::ckDispose(rest)
CkJsonObject::ckDispose(json)
CkDateTime::ckDispose(dateTime)
CkStringBuilder::ckDispose(sbResponse)
ProcedureReturn
EndProcedure