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
}
}
etc/frontend/events.xml
keetc/events.xml
. Ini seharusnya tidak terjadi tetapi itu terjadi meskipun isinya identik.Anda bisa menggunakan
sales_order_state_change_before
acara tersebut. Ini memberikan akses ke pesanan dan akan memungkinkan Anda untuk memeriksa apakah pembayaran telah diproses. Kemudian, ketika pembayaran diproses, itu akan dipecat lagi, yang akan memungkinkan Anda untuk membuat nama perusahaan.Secara umum, Magento 2 tampaknya menjauh dari acara yang mendukung plugin. Sementara banyak orang di komunitas mungkin tidak setuju dengan pendekatan itu, itu pasti sesuatu yang perlu diingat di sini.
sumber
sales_order_state_change_before
bukannyacheckout_onepage_controller_success_action
tetapi tidak berhasil. Tidak yakin di mana saya harus meletakkan acara ini dan apakah akan dipicu saat checkout. Saya punya acara saya dietc/frontend/events.xml
petunjuk mengapa?Silakan gunakan sales_order_place_after acara.
Panggilan acara ini hanya sekali dan ketika pesanan berhasil ditempatkan dari vendor file / magento / modul-penjualan / Model / Order.php dalam fungsi di bawah ini.
sumber