![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-paypal/Controller/Express/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Paypal\Controller\Express; use Magento\Checkout\Controller\Express\RedirectLoginInterface; use Magento\Framework\App\Action\Action as AppAction; use Magento\Framework\App\Action\HttpGetActionInterface; use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\App\ObjectManager; use Magento\Quote\Api\CartRepositoryInterface; use Magento\Quote\Api\Data\CartInterface; /** * Abstract Express Checkout Controller * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ abstract class AbstractExpress extends AppAction implements RedirectLoginInterface, HttpGetActionInterface, HttpPostActionInterface { /** * @var \Magento\Paypal\Model\Express\Checkout */ protected $_checkout; /** * Internal cache of checkout models * * @var array */ protected $_checkoutTypes = []; /** * @var \Magento\Paypal\Model\Config */ protected $_config; /** * @var \Magento\Quote\Model\Quote */ protected $_quote = false; /** * Config mode type * * @var string */ protected $_configType; /** * Config method type * * @var string */ protected $_configMethod; /** * Checkout mode type * * @var string */ protected $_checkoutType; /** * @var \Magento\Customer\Model\Session */ protected $_customerSession; /** * @var \Magento\Checkout\Model\Session */ protected $_checkoutSession; /** * @var \Magento\Sales\Model\OrderFactory */ protected $_orderFactory; /** * @var \Magento\Paypal\Model\Express\Checkout\Factory */ protected $_checkoutFactory; /** * @var \Magento\Framework\Session\Generic */ protected $_paypalSession; /** * @var \Magento\Framework\Url\Helper */ protected $_urlHelper; /** * @var \Magento\Customer\Model\Url */ protected $_customerUrl; /** * @var CartRepositoryInterface */ private $quoteRepository; /** * @param \Magento\Framework\App\Action\Context $context * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Paypal\Model\Express\Checkout\Factory $checkoutFactory * @param \Magento\Framework\Session\Generic $paypalSession * @param \Magento\Framework\Url\Helper\Data $urlHelper * @param \Magento\Customer\Model\Url $customerUrl * @param CartRepositoryInterface $quoteRepository */ public function __construct( \Magento\Framework\App\Action\Context $context, \Magento\Customer\Model\Session $customerSession, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Paypal\Model\Express\Checkout\Factory $checkoutFactory, \Magento\Framework\Session\Generic $paypalSession, \Magento\Framework\Url\Helper\Data $urlHelper, \Magento\Customer\Model\Url $customerUrl, CartRepositoryInterface $quoteRepository = null ) { $this->_customerSession = $customerSession; $this->_checkoutSession = $checkoutSession; $this->_orderFactory = $orderFactory; $this->_checkoutFactory = $checkoutFactory; $this->_paypalSession = $paypalSession; $this->_urlHelper = $urlHelper; $this->_customerUrl = $customerUrl; parent::__construct($context); $parameters = ['params' => [$this->_configMethod]]; $this->_config = $this->_objectManager->create($this->_configType, $parameters); $this->quoteRepository = $quoteRepository ?: ObjectManager::getInstance()->get(CartRepositoryInterface::class); } /** * Instantiate quote and checkout * * @param CartInterface|null $quoteObject * * @return void * @throws \Magento\Framework\Exception\LocalizedException */ protected function _initCheckout(CartInterface $quoteObject = null) { $quote = $quoteObject ? $quoteObject : $this->_getQuote(); if (!$quote->hasItems() || $quote->getHasError()) { $this->getResponse()->setStatusHeader(403, '1.1', 'Forbidden'); throw new \Magento\Framework\Exception\LocalizedException(__('We can\'t initialize Express Checkout.')); } if (!(float)$quote->getGrandTotal()) { throw new \Magento\Framework\Exception\LocalizedException( __( 'PayPal can\'t process orders with a zero balance due. ' . 'To finish your purchase, please go through the standard checkout process.' ) ); } if (!isset($this->_checkoutTypes[$this->_checkoutType])) { $parameters = [ 'params' => [ 'quote' => $quote, 'config' => $this->_config, ], ]; $this->_checkoutTypes[$this->_checkoutType] = $this->_checkoutFactory ->create($this->_checkoutType, $parameters); } $this->_checkout = $this->_checkoutTypes[$this->_checkoutType]; } /** * Get Proper Checkout Token * * Search for proper checkout token in request or session or (un)set specified one * Combined getter/setter * * @param string|null $setToken * @return $this|string * @throws \Magento\Framework\Exception\LocalizedException */ protected function _initToken($setToken = null) { if (null !== $setToken) { if (false === $setToken) { // security measure for avoid unsetting token twice if (!$this->_getSession()->getExpressCheckoutToken()) { throw new \Magento\Framework\Exception\LocalizedException( __('PayPal Express Checkout Token does not exist.') ); } $this->_getSession()->unsExpressCheckoutToken(); } else { $this->_getSession()->setExpressCheckoutToken($setToken); } return $this; } $setToken = $this->getRequest()->getParam('token'); if ($setToken) { if ($setToken !== $this->_getSession()->getExpressCheckoutToken()) { throw new \Magento\Framework\Exception\LocalizedException( __('A wrong PayPal Express Checkout Token is specified.') ); } } else { $setToken = $this->_getSession()->getExpressCheckoutToken(); } return $setToken; } /** * PayPal session instance getter * * @return \Magento\Framework\Session\Generic */ protected function _getSession() { return $this->_paypalSession; } /** * Return checkout session object * * @return \Magento\Checkout\Model\Session */ protected function _getCheckoutSession() { return $this->_checkoutSession; } /** * Return checkout quote object * * @return \Magento\Quote\Model\Quote */ protected function _getQuote() { if (!$this->_quote) { if ($this->_getSession()->getQuoteId()) { $this->_quote = $this->quoteRepository->get($this->_getSession()->getQuoteId()); $this->_getCheckoutSession()->replaceQuote($this->_quote); } else { $this->_quote = $this->_getCheckoutSession()->getQuote(); } } return $this->_quote; } /** * @inheritdoc */ public function getCustomerBeforeAuthUrl() { return null; } /** * @inheritdoc */ public function getActionFlagList() { return []; } /** * Returns login url parameter for redirect * * @return string */ public function getLoginUrl() { return $this->_customerUrl->getLoginUrl(); } /** * Returns action name which requires redirect * * @return string */ public function getRedirectActionName() { return 'start'; } /** * Redirect to login page * * @return void */ public function redirectLogin() { $this->_actionFlag->set('', 'no-dispatch', true); $this->_customerSession->setBeforeAuthUrl($this->_redirect->getRefererUrl()); $this->getResponse()->setRedirect( $this->_urlHelper->addRequestParam($this->_customerUrl->getLoginUrl(), ['context' => 'checkout']) ); } /** * @inheritdoc */ abstract public function execute(); }