Last active
April 22, 2024 12:18
-
-
Save steverobbins/c5aa62cf7cd755dbfa64 to your computer and use it in GitHub Desktop.
PayPal API Requests
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 | |
{ | |
/** | |
* API Version | |
*/ | |
const VERSION = 51.0; | |
/** | |
* List of valid API environments | |
* @var array | |
*/ | |
private $allowedEnvs = array( | |
'beta-sandbox', | |
'live', | |
'sandbox' | |
); | |
/** | |
* Config storage from constructor | |
* @var array | |
*/ | |
private $config = array(); | |
/** | |
* URL storage based on environment | |
* @var string | |
*/ | |
private $url; | |
/** | |
* Build PayPal API request | |
* | |
* @param string $username | |
* @param string $password | |
* @param string $signature | |
* @param string $environment | |
*/ | |
public function __construct($username, $password, $signature, $environment = 'live') | |
{ | |
if (!in_array($environment, $this->allowedEnvs)) { | |
throw new Exception('Specified environment is not allowed.'); | |
} | |
$this->config = array( | |
'username' => $username, | |
'password' => $password, | |
'signature' => $signature, | |
'environment' => $environment | |
); | |
} | |
/** | |
* Make a request to the PayPal API | |
* | |
* @param string $method API method (e.g. GetBalance) | |
* @param array $params Additional fields to send in the request (e.g. array('RETURNALLCURRENCIES' => 1)) | |
* @return array | |
*/ | |
public function call($method, array $params = array()) | |
{ | |
$fields = $this->encodeFields(array_merge( | |
array( | |
'METHOD' => $method | |
'VERSION' => self::VERSION, | |
'USER' => $this->config['username'], | |
'PWD' => $this->config['password'], | |
'SIGNATURE' => $this->config['signature'] | |
), | |
$params | |
)); | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_URL, $this->getUrl()); | |
curl_setopt($ch, CURLOPT_POST, count($fields)); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields)); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
$response = curl_exec($ch); | |
if (!$response) { | |
throw new Exception('Failed to contact PayPal API: ' . curl_error($ch) . ' (Error No. ' . curl_errno($ch) . ')'); | |
} | |
curl_close($ch); | |
parse_str($response, $result); | |
return $this->decodeFields($result); | |
} | |
/** | |
* Prepare fields for API | |
* | |
* @param array $fields | |
* @return array | |
*/ | |
private function encodeFields(array $fields) | |
{ | |
return array_map('urlencode', $fields); | |
} | |
/** | |
* Make response readable | |
* | |
* @param array $fields | |
* @return array | |
*/ | |
private function decodeFields(array $fields) | |
{ | |
return array_map('urldecode', $fields); | |
} | |
/** | |
* Get API url based on environment | |
* | |
* @return string | |
*/ | |
private function getUrl() | |
{ | |
if (is_null($this->url)) { | |
switch ($this->config['environment']) { | |
case 'sandbox': | |
case 'beta-sandbox': | |
$this->url = "https://api-3t.$environment.paypal.com/nvp"; | |
break; | |
default: | |
$this->url = 'https://api-3t.paypal.com/nvp'; | |
} | |
} | |
return $this->url; | |
} | |
} |
And All schedure to send payment any some user
Great work! But please fix the missing comma on line 64 as pointed out by Nemonaut. Otherwise, you will get an error message similar to this one:
Parse error: syntax error, unexpected ''VERSION'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in /path/Paypal.php on line 65
You are a Great Time Save ;)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you for this! I did find a missing comma on line 64 however:
'METHOD' => $method