Place.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Authorizenet\Controller\Directpost\Payment;
  8. use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
  9. use Magento\Authorizenet\Controller\Directpost\Payment;
  10. use Magento\Authorizenet\Helper\DataFactory;
  11. use Magento\Checkout\Model\Type\Onepage;
  12. use Magento\Framework\App\Action\Context;
  13. use Magento\Framework\App\ObjectManager;
  14. use Magento\Framework\App\Response\Http;
  15. use Magento\Framework\DataObject;
  16. use Magento\Framework\Exception\LocalizedException;
  17. use Magento\Framework\Json\Helper\Data as JsonHelper;
  18. use Magento\Framework\Registry;
  19. use Magento\Payment\Model\IframeConfigProvider;
  20. use Magento\Quote\Api\CartManagementInterface;
  21. use Psr\Log\LoggerInterface;
  22. /**
  23. * Class Place
  24. *
  25. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  26. * @deprecated 100.3.1 Authorize.net is removing all support for this payment method
  27. */
  28. class Place extends Payment implements HttpPostActionInterface
  29. {
  30. /**
  31. * @var \Magento\Quote\Api\CartManagementInterface
  32. */
  33. protected $cartManagement;
  34. /**
  35. * @var \Magento\Framework\Event\ManagerInterface
  36. */
  37. protected $eventManager;
  38. /**
  39. * @var \Magento\Checkout\Model\Type\Onepage
  40. */
  41. protected $onepageCheckout;
  42. /**
  43. * @var \Magento\Framework\Json\Helper\Data
  44. */
  45. protected $jsonHelper;
  46. /**
  47. * Logger for exception details
  48. *
  49. * @var LoggerInterface
  50. */
  51. private $logger;
  52. /**
  53. * @param Context $context
  54. * @param Registry $coreRegistry
  55. * @param DataFactory $dataFactory
  56. * @param CartManagementInterface $cartManagement
  57. * @param Onepage $onepageCheckout
  58. * @param JsonHelper $jsonHelper
  59. * @param LoggerInterface|null $logger
  60. */
  61. public function __construct(
  62. Context $context,
  63. Registry $coreRegistry,
  64. DataFactory $dataFactory,
  65. CartManagementInterface $cartManagement,
  66. Onepage $onepageCheckout,
  67. JsonHelper $jsonHelper,
  68. LoggerInterface $logger = null
  69. ) {
  70. $this->eventManager = $context->getEventManager();
  71. $this->cartManagement = $cartManagement;
  72. $this->onepageCheckout = $onepageCheckout;
  73. $this->jsonHelper = $jsonHelper;
  74. $this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class);
  75. parent::__construct($context, $coreRegistry, $dataFactory);
  76. }
  77. /**
  78. * Send request to authorize.net
  79. *
  80. * @return string
  81. */
  82. public function execute()
  83. {
  84. $paymentParam = $this->getRequest()->getParam('payment');
  85. $controller = $this->getRequest()->getParam('controller');
  86. $response = $this->getResponse();
  87. if (isset($paymentParam['method'])) {
  88. $this->_getDirectPostSession()->setQuoteId($this->_getCheckout()->getQuote()->getId());
  89. /**
  90. * Current workaround depends on Onepage checkout model defect
  91. * Method Onepage::getCheckoutMethod performs setCheckoutMethod
  92. */
  93. $this->onepageCheckout->getCheckoutMethod();
  94. if ($controller == IframeConfigProvider::CHECKOUT_IDENTIFIER) {
  95. return $this->placeCheckoutOrder();
  96. }
  97. $params = $this->dataFactory
  98. ->create(DataFactory::AREA_FRONTEND)
  99. ->getSaveOrderUrlParams($controller);
  100. $this->_forward(
  101. $params['action'],
  102. $params['controller'],
  103. $params['module'],
  104. $this->getRequest()->getParams()
  105. );
  106. } else {
  107. $result = ['error_messages' => __('Please choose a payment method.'), 'goto_section' => 'payment'];
  108. if ($response instanceof Http) {
  109. $response->representJson($this->jsonHelper->jsonEncode($result));
  110. }
  111. }
  112. }
  113. /**
  114. * Place order for checkout flow
  115. *
  116. * @return void
  117. */
  118. protected function placeCheckoutOrder()
  119. {
  120. $result = new DataObject();
  121. $response = $this->getResponse();
  122. try {
  123. $this->cartManagement->placeOrder($this->_getCheckout()->getQuote()->getId());
  124. $result->setData('success', true);
  125. $this->eventManager->dispatch(
  126. 'checkout_directpost_placeOrder',
  127. [
  128. 'result' => $result,
  129. 'action' => $this
  130. ]
  131. );
  132. } catch (LocalizedException $exception) {
  133. $this->logger->critical($exception);
  134. $result->setData('error', true);
  135. $result->setData('error_messages', $exception->getMessage());
  136. } catch (\Exception $exception) {
  137. $this->logger->critical($exception);
  138. $result->setData('error', true);
  139. $result->setData(
  140. 'error_messages',
  141. __('A server error stopped your order from being placed. Please try to place your order again.')
  142. );
  143. }
  144. if ($response instanceof Http) {
  145. $response->representJson($this->jsonHelper->jsonEncode($result));
  146. }
  147. }
  148. }