123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Paypal\Controller\Express;
- use Magento\Framework\App\Action\HttpGetActionInterface as HttpGetActionInterface;
- use Magento\Checkout\Helper\Data;
- use Magento\Checkout\Helper\ExpressRedirect;
- use Magento\Checkout\Model\Type\Onepage;
- use Magento\Framework\Controller\ResultFactory;
- use Magento\Framework\Controller\ResultInterface;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\Webapi\Exception;
- use Magento\Paypal\Model\Express\Checkout;
- use Magento\Framework\App\ObjectManager;
- /**
- * Class GetToken
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class GetToken extends AbstractExpress implements HttpGetActionInterface
- {
- /**
- * Config mode type
- *
- * @var string
- */
- protected $_configType = \Magento\Paypal\Model\Config::class;
- /**
- * Config method type
- *
- * @var string
- */
- protected $_configMethod = \Magento\Paypal\Model\Config::METHOD_WPP_EXPRESS;
- /**
- * Checkout mode type
- *
- * @var string
- */
- protected $_checkoutType = \Magento\Paypal\Model\Express\Checkout::class;
- /**
- * @var \Psr\Log\LoggerInterface
- */
- private $logger;
- /**
- * @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 \Psr\Log\LoggerInterface|null $logger
- */
- 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,
- \Psr\Log\LoggerInterface $logger = null
- ) {
- $this->logger = $logger ?: ObjectManager::getInstance()->get(\Psr\Log\LoggerInterface::class);
- parent::__construct(
- $context,
- $customerSession,
- $checkoutSession,
- $orderFactory,
- $checkoutFactory,
- $paypalSession,
- $urlHelper,
- $customerUrl
- );
- }
- /**
- * @inheritdoc
- */
- public function execute()
- {
- $controllerResult = $this->resultFactory->create(ResultFactory::TYPE_JSON);
- try {
- $token = $this->getToken();
- if ($token === null) {
- $token = false;
- }
- $url = $this->_checkout->getRedirectUrl();
- $this->_initToken($token);
- $controllerResult->setData(['url' => $url]);
- } catch (LocalizedException $exception) {
- $this->logger->critical($exception);
- $controllerResult->setData([
- 'message' => [
- 'text' => $exception->getMessage(),
- 'type' => 'error'
- ]
- ]);
- } catch (\Exception $exception) {
- $this->messageManager->addExceptionMessage(
- $exception,
- __('We can\'t start Express Checkout.')
- );
- return $this->getErrorResponse($controllerResult);
- }
- return $controllerResult;
- }
- /**
- * @return string|null
- * @throws LocalizedException
- */
- protected function getToken()
- {
- $this->_initCheckout();
- $quote = $this->_getQuote();
- $hasButton = $this->getRequest()->getParam(Checkout::PAYMENT_INFO_BUTTON) == 1;
- /** @var Data $checkoutHelper */
- $checkoutHelper = $this->_objectManager->get(Data::class);
- $quoteCheckoutMethod = $quote->getCheckoutMethod();
- $customerData = $this->_customerSession->getCustomerDataObject();
- if ($quote->getIsMultiShipping()) {
- $quote->setIsMultiShipping(false);
- $quote->removeAllAddresses();
- }
- if ($customerData->getId()) {
- $this->_checkout->setCustomerWithAddressChange(
- $customerData,
- $quote->getBillingAddress(),
- $quote->getShippingAddress()
- );
- } elseif ((!$quoteCheckoutMethod || $quoteCheckoutMethod !== Onepage::METHOD_REGISTER)
- && !$checkoutHelper->isAllowedGuestCheckout($quote, $quote->getStoreId())
- ) {
- $expressRedirect = $this->_objectManager->get(ExpressRedirect::class);
- $this->messageManager->addNoticeMessage(
- __('To check out, please sign in with your email address.')
- );
- $expressRedirect->redirectLogin($this);
- $this->_customerSession->setBeforeAuthUrl(
- $this->_url->getUrl('*/*/*', ['_current' => true])
- );
- return null;
- }
- // billing agreement
- $isBaRequested = (bool)$this->getRequest()
- ->getParam(Checkout::PAYMENT_INFO_TRANSPORT_BILLING_AGREEMENT);
- if ($customerData->getId()) {
- $this->_checkout->setIsBillingAgreementRequested($isBaRequested);
- }
- // Bill Me Later
- $this->_checkout->setIsBml((bool)$this->getRequest()->getParam('bml'));
- // giropay
- $this->_checkout->prepareGiropayUrls(
- $this->_url->getUrl('checkout/onepage/success'),
- $this->_url->getUrl('paypal/express/cancel'),
- $this->_url->getUrl('checkout/onepage/success')
- );
- return $this->_checkout->start(
- $this->_url->getUrl('*/*/return'),
- $this->_url->getUrl('*/*/cancel'),
- $hasButton
- );
- }
- /**
- * @param ResultInterface $controllerResult
- * @return ResultInterface
- */
- private function getErrorResponse(ResultInterface $controllerResult)
- {
- $controllerResult->setHttpResponseCode(Exception::HTTP_BAD_REQUEST);
- $controllerResult->setData(['message' => __('Sorry, but something went wrong')]);
- return $controllerResult;
- }
- }
|