ฉันกำลังทำงานกับส่วนขยายของ Magento 2 และส่วนหนึ่งของฟีเจอร์นี้คือการส่งข้อมูลเกี่ยวกับคำสั่งซื้อไปยังแอปพลิเคชันภายนอกโดยใช้บริการเว็บ ฉันต้องการที่จะผลักดันข้อมูลนี้หลังจากที่สั่งซื้อสินค้าในการชำระเงิน
ในขณะนี้ฉันใช้งานเหตุการณ์checkout_onepage_controller_success_action
ซึ่งทำให้วิธีการสร้างคำสั่งซื้อในแอปภายนอก /etc/frontend/events.xml
ฉันวางเหตุการณ์นี้ได้ใน
ถึงตอนนี้มันใช้งานได้ แต่ฉันพบปัญหาเกี่ยวกับสถานะคำสั่งซื้อ บางครั้งคำสั่งซื้อที่ยังคงอยู่ในpending
สถานะและบางครั้งอื่น ๆ processing
การสั่งซื้ออยู่ใน เหตุผลนี้เป็นเพราะวิธีการชำระเงินครั้งแรกเริ่มต้นคำสั่งซื้อเป็นรอดำเนินการและหลังจากการชำระเงินได้รับการอนุมัติคำสั่งซื้อเปลี่ยนไปประมวลผล ฉันต้องการผลักดันprocessing
คำสั่งซื้อเท่านั้น ดูเหมือนว่าบางครั้งเหตุการณ์checkout_onepage_controller_success_action
จะทำงานก่อนที่การชำระเงินจะได้รับอนุญาตและนี่เป็นสาเหตุของปัญหา
ความคิดวิธีการแก้ปัญหานี้? วิธีการที่ฉันสามารถตรวจสอบการชำระเงินการประมวลผลการทำงานก่อนที่ผมจะเรียกใช้รหัสของฉันในcheckout_onepage_controller_success_action
?
ตามรหัสของฉัน:
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
}
}