我正在开发此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
    }
}