Created
April 2, 2013 16:13
-
-
Save jcleblanc/5293495 to your computer and use it in GitHub Desktop.
Fetching an OAuth 2 bearer token from PayPal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class paypal{ | |
private $access_token; | |
private $token_type; | |
/** | |
* Constructor | |
* | |
* Handles oauth 2 bearer token fetch | |
* @link https://developer.paypal.com/webapps/developer/docs/api/#authentication--headers | |
*/ | |
public function __construct(){ | |
$postvals = "grant_type=client_credentials"; | |
$uri = URI_SANDBOX . "oauth2/token"; | |
$auth_response = self::curl($uri, 'POST', $postvals, true); | |
$this->access_token = $auth_response['body']->access_token; | |
$this->token_type = $auth_response['body']->token_type; | |
} | |
/** | |
* cURL | |
* | |
* Handles GET / POST requests for auth requests | |
* @link http://php.net/manual/en/book.curl.php | |
*/ | |
private function curl($url, $method = 'GET', $postvals = null, $auth = false){ | |
$ch = curl_init($url); | |
//if we are sending request to obtain bearer token | |
if ($auth){ | |
$headers = array("Accept: application/json", "Accept-Language: en_US"); | |
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); | |
curl_setopt($ch, CURLOPT_USERPWD, CLIENT_ID . ":" .CLIENT_SECRET); | |
curl_setopt($ch, CURLOPT_SSLVERSION, 3); | |
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | |
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); | |
//if we are sending request with the bearer token for protected resources | |
} else { | |
$headers = array("Content-Type:application/json", "Authorization:{$this->token_type} {$this->access_token}"); | |
} | |
$options = array( | |
CURLOPT_HEADER => true, | |
CURLINFO_HEADER_OUT => true, | |
CURLOPT_HTTPHEADER => $headers, | |
CURLOPT_RETURNTRANSFER => true, | |
CURLOPT_VERBOSE => true, | |
CURLOPT_TIMEOUT => 10 | |
); | |
if ($method == 'POST'){ | |
$options[CURLOPT_POSTFIELDS] = $postvals; | |
$options[CURLOPT_CUSTOMREQUEST] = $method; | |
} | |
curl_setopt_array($ch, $options); | |
$response = curl_exec($ch); | |
$header = substr($response, 0, curl_getinfo($ch,CURLINFO_HEADER_SIZE)); | |
$body = json_decode(substr($response, curl_getinfo($ch,CURLINFO_HEADER_SIZE))); | |
curl_close($ch); | |
return array('header' => $header, 'body' => $body); | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Does this still work? It used to work for me but now I just get a 401 unauthorized response. I have validated my client id and secret so I am not sure what has changed.