Ich arbeite an dieser Magento 2-Erweiterung. Ein Teil der Funktionen besteht darin, Informationen über die Bestellungen mithilfe von Webdiensten an eine externe Anwendung zu senden. Ich muss diese Informationen weitergeben, nachdem eine Bestellung an der Kasse aufgegeben wurde.
Im Moment verwende ich das Ereignis, checkout_onepage_controller_success_action
das die Methode zum Erstellen der Bestellungen in der externen App auslöst. Ich habe diese Veranstaltung in platziert /etc/frontend/events.xml
.
Bisher funktioniert dies, aber ich habe ein Problem mit dem Auftragsstatus gefunden. Manchmal sind die Bestellungen noch im pending
Status und manchmal sind die Bestellungen in processing
. Der Grund dafür ist, dass die Zahlungsmethode die Bestellungen zuerst als ausstehend initialisiert und nach Genehmigung der Zahlung die Bestellungen in die Verarbeitung geändert haben. Ich möchte nur processing
Bestellungen pushen . Es scheint, dass das Ereignis manchmal ausgeführt wird, checkout_onepage_controller_success_action
bevor die Zahlung autorisiert wurde, und dies verursacht die Probleme.
Irgendeine Idee, wie man das löst? Wie kann ich sicherstellen, dass die Zahlungsverarbeitung ausgeführt wird, bevor ich meinen Code eingebe checkout_onepage_controller_success_action
?
Nach meinem Code:
events.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
}
}