私はこのMagento 2拡張機能に取り組んでおり、一部の機能は、注文に関する情報をWebサービスを使用して外部アプリケーションにプッシュすることです。チェックアウトで注文した後、この情報をプッシュする必要があります。
現時点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
}
}