이 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
}
}