* @copyright 2007-2018 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class PaypalSDK { private $action; private $endpoint; private $urlAPI; private $urlSI; private $version = '204'; public function __construct($sandbox=0) { $this->action = 'POST'; if ($sandbox) { $this->urlAPI = 'https://api-3t.sandbox.paypal.com/nvp'; $this->urlSI = 'https://paypal-sandbox.pp-ps-auth.com/'; } else { $this->urlAPI = 'https://api-3t.paypal.com/nvp'; $this->urlSI = 'https://paypal-live.pp-ps-auth.com/'; } } public function setExpressCheckout($params) { // Seller informations $params['VERSION'] = $this->version; return $this->makeCallPaypal($params); } private function _setUserCredentials(&$fields, $params) { $fields['USER'] = str_replace(' ','%2B',$params['USER']); // FIX for + in email $fields['PWD'] = $params['PWD']; $fields['SIGNATURE'] = $params['SIGNATURE']; } public function getExpressCheckout($params) { $fields = array(); $this->_setUserCredentials($fields, $params); $fields['METHOD'] = 'GetExpressCheckoutDetails'; $fields['VERSION'] = $this->version; $fields['TOKEN'] = $params['TOKEN']; return $this->makeCallPaypal($fields); } public function doExpressCheckout($params) { $params['METHOD'] = 'DoExpressCheckoutPayment'; $params['VERSION'] = $this->version; $return = $this->makeCallPaypal($params); return $return; } public function doVoid($params) { $fields = array(); $this->_setUserCredentials($fields, $params); $fields['METHOD'] = 'DoVoid'; $fields['VERSION'] = $this->version; $fields['AUTHORIZATIONID'] = $params['authorization_id']; return $this->makeCallPaypal($fields); } public function doCapture($params) { $fields = array(); $this->_setUserCredentials($fields, $params); $fields['METHOD'] = 'DoCapture'; $fields['VERSION'] = $this->version; $fields['AMT'] = number_format($params['AMT'], 2); $fields['AUTHORIZATIONID'] = $params['AUTHORIZATIONID']; $fields['CURRENCYCODE'] = $params['CURRENCYCODE']; $fields['COMPLETETYPE'] = $params['COMPLETETYPE']; return $this->makeCallPaypal($fields); } public function refundTransaction($params) { $fields = array(); $this->_setUserCredentials($fields, $params); $fields['METHOD'] = 'RefundTransaction'; $fields['VERSION'] = $this->version; $fields['TRANSACTIONID'] = $params['TRANSACTIONID']; $fields['REFUNDTYPE'] = $params['REFUNDTYPE']; return $this->makeCallPaypal($fields); } public function getUrlOnboarding($body) { $this->endpoint = 'getUrl'; $response = $this->makeCallSI(http_build_query($body, '', '&')); return $response; } private function makeCallPaypal($body) { $response = $this->makeCall(http_build_query($body, '', '&')); return $response; } private function makeCallSI($body = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_URL, $this->urlSI.$this->endpoint.'?'.$body ); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_CAINFO, _PS_CACHE_CA_CERT_FILE_); $response = curl_exec($curl); return $response; } private function makeCall($body = null) { $curl = curl_init(); if ($this->action == "GET") { $body = (is_array($body)) ? http_build_query($body) : $body; $this->endpoint = $this->endpoint.$body; } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_URL, $this->urlAPI.$this->endpoint); if ($this->action == "PUT" || $this->action == "DELETE" || $this->action == "PATCH") { curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->action); } if ($this->action == "POST") { curl_setopt($curl, CURLOPT_POST, true); } if ($this->action == "PUT") { curl_setopt($curl, CURLOPT_PUT, true); } if ($this->action == "POST" || $this->action == "PUT" || $this->action == "DELETE") { curl_setopt($curl, CURLOPT_POSTFIELDS, $body); } $response = curl_exec($curl); $result = explode('&', $response); foreach ($result as $value) { $tmp = explode('=', $value); $return[$tmp[0]] = urldecode(!isset($tmp[1]) ? $tmp[0] : $tmp[1]); } if (curl_errno($curl)) { die('error occured during curl exec. Additional info: ' . curl_errno($curl).':'. curl_error($curl)); } return $return; } }