Files
bio-concept-labo/web/modules/paypal/sdk/PaypalSDK.php
2019-11-20 07:44:43 +01:00

178 lines
5.8 KiB
PHP

<?php
/**
* 2007-2018 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to https://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @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;
}
}