আমি এই ম্যাজেন্টো 2 এক্সটেনশনে কাজ করছি এবং বৈশিষ্ট্যগুলির অংশটি হ'ল ওয়েব পরিষেবাদি ব্যবহার করে কোনও বাহ্যিক অ্যাপ্লিকেশনটিতে অর্ডার সম্পর্কিত তথ্য push চেকআউটে একটি অর্ডার দেওয়ার পরে আমার এই তথ্যটি ঠেকাতে হবে।
এই মুহুর্তে আমি ইভেন্টটি ব্যবহার করছি 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
}
}