formKeyValidator = $formKeyValidator; $this->logger = $logger; $this->agreementsValidator = $agreementValidator; $this->session = $session; $this->paymentRateLimiter = $paymentRateLimiter ?? ObjectManager::getInstance()->get(PaymentProcessingRateLimiterInterface::class); parent::__construct( $context, $customerSession, $customerRepository, $accountManagement ); } /** * Overview action * * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute() { try { $this->paymentRateLimiter->limit(); if (!$this->_validateMinimumAmount()) { return; } if (!$this->agreementsValidator->isValid(array_keys($this->getRequest()->getPost('agreement', [])))) { $this->messageManager->addErrorMessage( __('Please agree to all Terms and Conditions before placing the order.') ); $this->_redirect('*/*/billing'); return; } $payment = $this->getRequest()->getPost('payment'); $paymentInstance = $this->_getCheckout()->getQuote()->getPayment(); if (isset($payment['cc_number'])) { $paymentInstance->setCcNumber($payment['cc_number']); } if (isset($payment['cc_cid'])) { $paymentInstance->setCcCid($payment['cc_cid']); } $this->_getCheckout()->createOrders(); $this->_getState()->setCompleteStep(State::STEP_OVERVIEW); if ($this->session->getAddressErrors()) { $this->_getState()->setActiveStep(State::STEP_RESULTS); $this->_redirect('*/*/results'); } else { $this->_getState()->setActiveStep(State::STEP_SUCCESS); $this->_getCheckout()->getCheckoutSession()->clearQuote(); $this->_getCheckout()->getCheckoutSession()->setDisplaySuccess(true); $this->_redirect('*/*/success'); } } catch (PaymentProcessingRateLimitExceededException $ex) { $this->messageManager->addErrorMessage($ex->getMessage()); $this->_redirect('*/*/overview'); } catch (PaymentException $e) { $message = $e->getMessage(); if (!empty($message)) { $this->messageManager->addErrorMessage($message); } $this->_redirect('*/*/billing'); } catch (\Magento\Checkout\Exception $e) { $this->_objectManager->get( \Magento\Checkout\Helper\Data::class )->sendPaymentFailedEmail( $this->_getCheckout()->getQuote(), $e->getMessage(), 'multi-shipping' ); $this->_getCheckout()->getCheckoutSession()->clearQuote(); $this->messageManager->addErrorMessage($e->getMessage()); $this->_redirect('*/cart'); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->_objectManager->get( \Magento\Checkout\Helper\Data::class )->sendPaymentFailedEmail( $this->_getCheckout()->getQuote(), $e->getMessage(), 'multi-shipping' ); $this->messageManager->addErrorMessage($e->getMessage()); $this->_redirect('*/*/billing'); } catch (\Exception $e) { $this->logger->critical($e); try { $this->_objectManager->get( \Magento\Checkout\Helper\Data::class )->sendPaymentFailedEmail( $this->_getCheckout()->getQuote(), $e->getMessage(), 'multi-shipping' ); } catch (\Exception $e) { $this->logger->error($e->getMessage()); } $this->messageManager->addErrorMessage(__('Order place error')); $this->_redirect('*/*/billing'); } } }