Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Place.php
Go to the documentation of this file.
1 <?php
8 
9 use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
18 use Magento\Framework\Json\Helper\Data as JsonHelper;
22 use Psr\Log\LoggerInterface;
23 
29 class Place extends Payment implements HttpPostActionInterface
30 {
34  protected $cartManagement;
35 
39  protected $eventManager;
40 
44  protected $onepageCheckout;
45 
49  protected $jsonHelper;
50 
56  private $logger;
57 
67  public function __construct(
68  Context $context,
69  Registry $coreRegistry,
73  JsonHelper $jsonHelper,
74  LoggerInterface $logger = null
75  ) {
76  $this->eventManager = $context->getEventManager();
77  $this->cartManagement = $cartManagement;
78  $this->onepageCheckout = $onepageCheckout;
79  $this->jsonHelper = $jsonHelper;
80  $this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class);
81  parent::__construct($context, $coreRegistry, $dataFactory);
82  }
83 
89  public function execute()
90  {
91  $paymentParam = $this->getRequest()->getParam('payment');
92  $controller = $this->getRequest()->getParam('controller');
93  $response = $this->getResponse();
94 
95  if (isset($paymentParam['method'])) {
96  $this->_getDirectPostSession()->setQuoteId($this->_getCheckout()->getQuote()->getId());
101  $this->onepageCheckout->getCheckoutMethod();
102 
103  if ($controller == IframeConfigProvider::CHECKOUT_IDENTIFIER) {
104  return $this->placeCheckoutOrder();
105  }
106 
107  $params = $this->dataFactory
108  ->create(DataFactory::AREA_FRONTEND)
109  ->getSaveOrderUrlParams($controller);
110  $this->_forward(
111  $params['action'],
112  $params['controller'],
113  $params['module'],
114  $this->getRequest()->getParams()
115  );
116  } else {
117  $result = ['error_messages' => __('Please choose a payment method.'), 'goto_section' => 'payment'];
118  if ($response instanceof Http) {
119  $response->representJson($this->jsonHelper->jsonEncode($result));
120  }
121  }
122  }
123 
129  protected function placeCheckoutOrder()
130  {
131  $result = new DataObject();
132  $response = $this->getResponse();
133  try {
134  $this->cartManagement->placeOrder($this->_getCheckout()->getQuote()->getId());
135  $result->setData('success', true);
136  $this->eventManager->dispatch(
137  'checkout_directpost_placeOrder',
138  [
139  'result' => $result,
140  'action' => $this
141  ]
142  );
143  } catch (LocalizedException $exception) {
144  $this->logger->critical($exception);
145  $result->setData('error', true);
146  $result->setData('error_messages', $exception->getMessage());
147  } catch (\Exception $exception) {
148  $this->logger->critical($exception);
149  $result->setData('error', true);
150  $result->setData(
151  'error_messages',
152  __('A server error stopped your order from being placed. Please try to place your order again.')
153  );
154  }
155  if ($response instanceof Http) {
156  $response->representJson($this->jsonHelper->jsonEncode($result));
157  }
158  }
159 }
$response
Definition: 404.php:11
__construct(Context $context, Registry $coreRegistry, DataFactory $dataFactory, CartManagementInterface $cartManagement, Onepage $onepageCheckout, JsonHelper $jsonHelper, LoggerInterface $logger=null)
Definition: Place.php:67
__()
Definition: __.php:13
_forward($action, $controller=null, $module=null, array $params=null)
Definition: Action.php:137
$controller
Definition: info.phtml:14
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18