%PDF- %PDF-
Direktori : /www/varak.net/shop.varak.net/modules/paypal/api/ |
Current File : /www/varak.net/shop.varak.net/modules/paypal/api/ApiPaypalPlus.php |
<?php /** * 2007-2016 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 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/osl-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 http://www.prestashop.com for more information. * * @author PrestaShop SA <contact@prestashop.com> * @copyright 2007-2016 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class ApiPaypalPlus { /* * ********************************************************* */ /* * ******************** CONNECT METHODS ******************** */ /* * ********************************************************* */ public function __construct() { if (class_exists('Context')) { $this->context = Context::getContext(); } else { global $smarty, $cookie; $this->context = new StdClass(); $this->context->smarty = $smarty; $this->context->cookie = $cookie; } } protected function sendByCURL($url, $body, $http_header = false, $identify = false) { $ch = curl_init(); if ($ch) { if ((int) Configuration::get('PAYPAL_SANDBOX') == 1) { curl_setopt($ch, CURLOPT_URL, 'https://api.sandbox.paypal.com'.$url); } else { curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com'.$url); } if ($identify) { curl_setopt($ch, CURLOPT_USERPWD, Configuration::get('PAYPAL_PLUS_CLIENT_ID').':'.Configuration::get('PAYPAL_PLUS_SECRET')); } if ($http_header) { curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header); } if ($body) { curl_setopt($ch, CURLOPT_POST, true); if ($identify) { curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($body)); } else { curl_setopt($ch, CURLOPT_POSTFIELDS, $body); } } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSLVERSION, defined('CURL_SSLVERSION_TLSv1') ? CURL_SSLVERSION_TLSv1 : 1); curl_setopt($ch, CURLOPT_VERBOSE, false); $result = curl_exec($ch); curl_close($ch); } return $result; } public function getToken($url, $body) { $result = $this->sendByCURL($url, $body, false, true); /* * Init variable */ $oPayPalToken = Tools::jsonDecode($result); if (isset($oPayPalToken->error)) { return false; } else { $time_max = time() + $oPayPalToken->expires_in; $access_token = $oPayPalToken->access_token; /* * Set Token in Cookie */ $this->context->cookie->__set('paypal_access_token_time_max', $time_max); $this->context->cookie->__set('paypal_access_token_access_token', $access_token); $this->context->cookie->write(); return $access_token; } } private function _createWebProfile() { $presentation = new stdClass(); $presentation->brand_name = Configuration::get('PS_SHOP_NAME'); $presentation->logo_image = _PS_BASE_URL_.__PS_BASE_URI__.'img/logo.jpg'; $presentation->locale_code = Tools::strtoupper(Language::getIsoById($this->context->language->id)); $input_fields = new stdClass(); $input_fields->allow_note = true; $input_fields->no_shipping = 1; $input_fields->address_override = 1; $flow_config = new stdClass(); $flow_config->landing_page_type = "billing"; $webProfile = new stdClass(); $webProfile->name = Configuration::get('PS_SHOP_NAME'); $webProfile->presentation = $presentation; $webProfile->input_fields = $input_fields; $webProfile->flow_config = $flow_config; return $webProfile; } public function getWebProfile() { $accessToken = $this->getToken(URL_PPP_CREATE_TOKEN, array('grant_type' => 'client_credentials')); if ($accessToken) { $data = $this->_createWebProfile(); $header = array( 'Content-Type:application/json', 'Authorization:Bearer '.$accessToken, ); $result = Tools::jsonDecode($this->sendByCURL(URL_PPP_WEBPROFILE, Tools::jsonEncode($data), $header)); if (isset($result->id)) { return $result->id; } else { $results = $this->getListProfile(); foreach ($results as $result) { if (isset($result->id) && $result->name == Configuration::get('PS_SHOP_NAME')) { return $result->id; } } return false; } } } public function getListProfile() { $accessToken = $this->getToken(URL_PPP_CREATE_TOKEN, array('grant_type' => 'client_credentials')); if ($accessToken) { $header = array( 'Content-Type:application/json', 'Authorization:Bearer '.$accessToken, ); return Tools::jsonDecode($this->sendByCURL(URL_PPP_WEBPROFILE, false, $header)); } } public function refreshToken() { if ($this->context->cookie->paypal_access_token_time_max < time()) { return $this->getToken(URL_PPP_CREATE_TOKEN, array('grant_type' => 'client_credentials')); } else { return $this->context->cookie->paypal_access_token_access_token; } } private function _createObjectPayment($customer, $cart) { /* * Init Variable */ $oCurrency = new Currency($cart->id_currency); $address = new Address((int) $cart->id_address_invoice); $country = new Country((int) $address->id_country); $iso_code = $country->iso_code; if (version_compare(_PS_VERSION_, '1.5', '<')) { $totalShippingCostWithoutTax = $cart->getOrderShippingCost(null, false); } else { $totalShippingCostWithoutTax = $cart->getTotalShippingCost(null, false); } $totalCartWithTax = $cart->getOrderTotal(true); $totalCartWithoutTax = $cart->getOrderTotal(false); $total_tax = $totalCartWithTax - $totalCartWithoutTax; if ($cart->gift) { if (version_compare(_PS_VERSION_, '1.5.3.0', '>=')) { $giftWithoutTax = $cart->getGiftWrappingPrice(false); } else { $giftWithoutTax = (float) (Configuration::get('PS_GIFT_WRAPPING_PRICE')); } } else { $giftWithoutTax = 0; } $cartItems = $cart->getProducts(); $shop_url = PayPal::getShopDomainSsl(true, true); /* * Création de l'obj à envoyer à Paypal */ $state = new State($address->id_state); $shipping_address = new stdClass(); $shipping_address->recipient_name = $address->alias; $shipping_address->type = 'residential'; $shipping_address->line1 = $address->address1; $shipping_address->line2 = $address->address2; $shipping_address->city = $address->city; $shipping_address->country_code = $iso_code; $shipping_address->postal_code = $address->postcode; $shipping_address->state = ($state->iso_code == null) ? '' : $state->iso_code; $shipping_address->phone = $address->phone; $payer_info = new stdClass(); $payer_info->email = '"'.$customer->email.'"'; $payer_info->first_name = $address->firstname; $payer_info->last_name = $address->lastname; $payer_info->country_code = '"'.$iso_code.'"'; $payer_info->shipping_address = array($shipping_address); $payer = new stdClass(); $payer->payment_method = "paypal"; //$payer->payer_info = $payer_info; // Objet set by PayPal $aItems = array(); /* Item */ foreach ($cartItems as $cartItem) { $item = new stdClass(); $item->name = $cartItem['name']; $item->currency = $oCurrency->iso_code; $item->quantity = $cartItem['quantity']; $item->price = number_format(round($cartItem['price'], 2), 2); $item->tax = number_format(round($cartItem['price_wt'] - $cartItem['price'], 2), 2); $aItems[] = $item; unset($item); } /* ItemList */ $itemList = new stdClass(); $itemList->items = $aItems; /* Detail */ $details = new stdClass(); $details->shipping = number_format($totalShippingCostWithoutTax, 2); $details->tax = number_format($total_tax, 2); $details->handling_fee = number_format($giftWithoutTax, 2); $details->subtotal = number_format($totalCartWithoutTax - $totalShippingCostWithoutTax - $giftWithoutTax, 2); /* Amount */ $amount = new stdClass(); $amount->total = number_format($totalCartWithTax, 2); $amount->currency = $oCurrency->iso_code; $amount->details = $details; /* Transaction */ $transaction = new stdClass(); $transaction->amount = $amount; $transaction->item_list = $itemList; $transaction->description = "Payment description"; /* Redirecte Url */ $redirectUrls = new stdClass(); $redirectUrls->cancel_url = $shop_url._MODULE_DIR_.'paypal/paypal_plus/submit.php?id_cart='.(int) $cart->id; $redirectUrls->return_url = $shop_url._MODULE_DIR_.'paypal/paypal_plus/submit.php?id_cart='.(int) $cart->id; /* Payment */ $payment = new stdClass(); $payment->transactions = array($transaction); $payment->payer = $payer; $payment->intent = "sale"; if (Configuration::get('PAYPAL_WEB_PROFILE_ID')) { $payment->experience_profile_id = Configuration::get('PAYPAL_WEB_PROFILE_ID'); } $payment->redirect_urls = $redirectUrls; return $payment; } protected function createPayment($customer, $cart, $access_token) { $data = $this->_createObjectPayment($customer, $cart); $header = array( 'Content-Type:application/json', 'Authorization:Bearer '.$access_token, ); $result = $this->sendByCURL(URL_PPP_CREATE_PAYMENT, Tools::jsonEncode($data), $header); return $result; } }