मैं इस 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
}
}