Review.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Controller\Paypal;
  7. use Magento\Checkout\Model\Session;
  8. use Magento\Framework\App\Action\Context;
  9. use Magento\Framework\Controller\ResultFactory;
  10. use Magento\Braintree\Gateway\Config\PayPal\Config;
  11. use Magento\Braintree\Model\Paypal\Helper\QuoteUpdater;
  12. use Magento\Framework\Exception\LocalizedException;
  13. use Magento\Framework\App\Action\HttpPostActionInterface;
  14. use Magento\Framework\App\Action\HttpGetActionInterface;
  15. /**
  16. * Class Review
  17. */
  18. class Review extends AbstractAction implements HttpPostActionInterface, HttpGetActionInterface
  19. {
  20. /**
  21. * @var QuoteUpdater
  22. */
  23. private $quoteUpdater;
  24. /**
  25. * @var string
  26. */
  27. private static $paymentMethodNonce = 'payment_method_nonce';
  28. /**
  29. * Constructor
  30. *
  31. * @param Context $context
  32. * @param Config $config
  33. * @param Session $checkoutSession
  34. * @param QuoteUpdater $quoteUpdater
  35. */
  36. public function __construct(
  37. Context $context,
  38. Config $config,
  39. Session $checkoutSession,
  40. QuoteUpdater $quoteUpdater
  41. ) {
  42. parent::__construct($context, $config, $checkoutSession);
  43. $this->quoteUpdater = $quoteUpdater;
  44. }
  45. /**
  46. * @inheritdoc
  47. */
  48. public function execute()
  49. {
  50. $requestData = json_decode(
  51. $this->getRequest()->getPostValue('result', '{}'),
  52. true
  53. );
  54. $quote = $this->checkoutSession->getQuote();
  55. try {
  56. $this->validateQuote($quote);
  57. if ($requestData && $this->validateRequestData($requestData)) {
  58. $this->quoteUpdater->execute(
  59. $requestData['nonce'],
  60. $requestData['details'],
  61. $quote
  62. );
  63. } elseif (!$quote->getPayment()->getAdditionalInformation(self::$paymentMethodNonce)) {
  64. throw new LocalizedException(__('Checkout failed to initialize. Verify and try again.'));
  65. }
  66. /** @var \Magento\Framework\View\Result\Page $resultPage */
  67. $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
  68. /** @var \Magento\Braintree\Block\Paypal\Checkout\Review $reviewBlock */
  69. $reviewBlock = $resultPage->getLayout()->getBlock('braintree.paypal.review');
  70. $reviewBlock->setQuote($quote);
  71. $reviewBlock->getChildBlock('shipping_method')->setData('quote', $quote);
  72. return $resultPage;
  73. } catch (\Exception $e) {
  74. $this->messageManager->addExceptionMessage($e, $e->getMessage());
  75. }
  76. /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
  77. $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
  78. return $resultRedirect->setPath('checkout/cart', ['_secure' => true]);
  79. }
  80. /**
  81. * Validate request data
  82. *
  83. * @param array $requestData
  84. * @return boolean
  85. */
  86. private function validateRequestData(array $requestData)
  87. {
  88. return !empty($requestData['nonce']) && !empty($requestData['details']);
  89. }
  90. }