Я працюю над цим розширенням Magento 2, і частина функцій полягає в тому, щоб передавати інформацію про замовлення на зовнішній додаток за допомогою веб-служб. Мені потрібно надіслати цю інформацію після того, як замовлення розміщено в касі.
На даний момент я використовую подію, checkout_onepage_controller_success_action
яка запускає метод створення замовлень у зовнішньому додатку. Я помістив цю подію /etc/frontend/events.xml
.
Поки це працює, але я знайшов проблему зі статусом замовлень. Інколи замовлення все ще перебувають у pending
статусі, а інший раз, коли замовлення є processing
. Причиною цього є те, що спосіб оплати спочатку ініціалізує замовлення як очікувані, а після затвердження платежу замовлення зміниться на обробку. Я хочу натискати лише processing
накази. Здається, іноді подія checkout_onepage_controller_success_action
проходить до того, як платіж буде дозволений, і це спричиняє проблеми.
Будь-яка ідея, як це вирішити? як я можу переконатися, що обробка платежів працює перед тим, як запустити код checkout_onepage_controller_success_action
?
Після мого коду:
події.xml
<?xml version="1.0"?>
<!--
/**
* Copyright © 2017 companyname.com
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_onepage_controller_success_action">
<observer name="companyname_order_success" instance="Companyname\Shipping\Observer\CreateCompanynameOrderObserver" />
</event>
</config>
CreateCompanynameOrderObserver.php
/**
* Create an order in Companyname when order status match the statuses in the backend
*
* @param EventObserver $observer
* @return void
*/
public function execute(EventObserver $observer){
$order_ids = $observer->getEvent()->getOrderIds();
$order_id = $order_ids[0];
//Loading order details
$orderModel = $this->_orderFactory->create();
$order = $orderModel->load($order_id);
$shipping_method = $order->getShippingMethod();
$order_status = $order->getStatus();
if($order_status == 'processing'){
//Push to external app
}
}