Saya sedang mengerjakan ekstensi Magento 2 ini dan bagian dari fiturnya adalah untuk mendorong informasi tentang pesanan ke aplikasi eksternal menggunakan layanan web. Saya perlu memasukkan informasi ini setelah pemesanan dilakukan di kasir.
Saat ini saya menggunakan acara checkout_onepage_controller_success_action
yang memicu metode untuk membuat pesanan di aplikasi eksternal. Saya menempatkan acara ini di /etc/frontend/events.xml
.
Sejauh ini ini berfungsi tetapi saya menemukan masalah dengan status pesanan. Kadang-kadang pesanan masih dalam pending
status dan kadang-kadang ada pesanan processing
. Alasannya adalah karena metode pembayaran pertama-tama menginisialisasi pesanan sebagai yang tertunda dan setelah pembayaran disetujui, pesanan diubah menjadi pemrosesan. Saya hanya ingin mendorong processing
pesanan. Sepertinya terkadang acara checkout_onepage_controller_success_action
berjalan sebelum pembayaran disahkan dan ini menyebabkan masalah.
Ada ide untuk mengatasi ini? bagaimana saya bisa memastikan pemrosesan pembayaran berjalan sebelum saya menjalankan kode saya checkout_onepage_controller_success_action
?
Mengikuti kode saya:
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>
Buat Nama PerusahaanOrderObserver.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
}
}