![]() 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-checkout/Controller/Onepage/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Checkout\Controller\Onepage; use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\DataObject; use Magento\Framework\Exception\PaymentException; /** * One Page Checkout saveOrder action */ class SaveOrder extends \Magento\Checkout\Controller\Onepage implements HttpPostActionInterface { /** * Create order action * * @return \Magento\Framework\Controller\ResultInterface * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function execute() { if (!$this->_formKeyValidator->validate($this->getRequest())) { return $this->resultRedirectFactory->create()->setPath('*/*/'); } if ($this->_expireAjax()) { return $this->_ajaxRedirectResponse(); } $result = new DataObject(); try { $agreementsValidator = $this->_objectManager->get( \Magento\Checkout\Api\AgreementsValidatorInterface::class ); if (!$agreementsValidator->isValid(array_keys($this->getRequest()->getPost('agreement', [])))) { $result->setData('success', false); $result->setData('error', true); $result->setData( 'error_messages', __( "The order wasn't placed. " . "First, agree to the terms and conditions, then try placing your order again." ) ); return $this->resultJsonFactory->create()->setData($result->getData()); } $data = $this->getRequest()->getPost('payment', []); if ($data) { $data['checks'] = [ \Magento\Payment\Model\Method\AbstractMethod::CHECK_USE_CHECKOUT, \Magento\Payment\Model\Method\AbstractMethod::CHECK_USE_FOR_COUNTRY, \Magento\Payment\Model\Method\AbstractMethod::CHECK_USE_FOR_CURRENCY, \Magento\Payment\Model\Method\AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX, \Magento\Payment\Model\Method\AbstractMethod::CHECK_ZERO_TOTAL, ]; $this->getOnepage()->getQuote()->getPayment()->setQuote($this->getOnepage()->getQuote()); $this->getOnepage()->getQuote()->getPayment()->importData($data); } $this->getOnepage()->saveOrder(); $redirectUrl = $this->getOnepage()->getCheckout()->getRedirectUrl(); $result->setData('success', true); $result->setData('error', false); } catch (PaymentException $e) { $message = $e->getMessage(); if (!empty($message)) { $result->setData('error_messages', $message); } $result->setData('goto_section', 'payment'); $result->setData( 'update_section', [ 'name' => 'payment-method', 'html' => $this->_getPaymentMethodsHtml() ] ); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); $this->_objectManager->get(\Magento\Checkout\Helper\Data::class) ->sendPaymentFailedEmail($this->getOnepage()->getQuote(), $e->getMessage()); $result->setData( 'success', false ); $result->setData('error', true); $result->setData('error_messages', $e->getMessage()); $gotoSection = $this->getOnepage()->getCheckout()->getGotoSection(); if ($gotoSection) { $result->setData('goto_section', $gotoSection); $this->getOnepage()->getCheckout()->setGotoSection(null); } $updateSection = $this->getOnepage()->getCheckout()->getUpdateSection(); if ($updateSection) { if (isset($this->_sectionUpdateFunctions[$updateSection])) { $updateSectionFunction = $this->_sectionUpdateFunctions[$updateSection]; $result->setData( 'update_section', [ 'name' => $updateSection, 'html' => $this->{$updateSectionFunction}(), ] ); } $this->getOnepage()->getCheckout()->setUpdateSection(null); } } catch (\Exception $e) { $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); $this->_objectManager->get(\Magento\Checkout\Helper\Data::class) ->sendPaymentFailedEmail($this->getOnepage()->getQuote(), $e->getMessage()); $result->setData('success', false); $result->setData('error', true); $result->setData( 'error_messages', __('Something went wrong while processing your order. Please try again later.') ); } /** * when there is redirect to third party, we don't want to save order yet. * we will save the order in return action. */ if (isset($redirectUrl)) { $result->setData('redirect', $redirectUrl); } $this->_eventManager->dispatch( 'checkout_controller_onepage_saveOrder', [ 'result' => $result, 'action' => $this ] ); return $this->resultJsonFactory->create()->setData($result->getData()); } }