How to Observer place order event?
-
14-04-2021 - |
سؤال
Hi i'm new at magento 2 and want to get orderId() using Observer on place order event.
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<event name="sales_order_place_after">
<observer name="place_order" instance="SussexDev\Extrato\Observers\Observers\PlaceOrder" shared="false" disabled="false"/>
</event>
</config>
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Psr\Log\LoggerInterface;
class PlaceOrder implements ObserverInterface
{
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function execute(Observer $observer)
{
//$request = $observer->getEvent()->getOrder();
//echo "Request id: ".$request->getId();
$txt = "\n aaaaaa";
$this->_logger->log('DEBUG', $txt);
$this->logger->info('Observer Atingido2', $observer->debug());
}
}
I got the conclusion that i'm Observing the wrong event, i want to observer the event that happens when this button (Place Order) get clicked.
I realized that my problem is other, the Observer isn't called and i don't know why. I created another post please check here: My Observer is not executing
المحلول
Check this
On checkout_submit_all_after event: This event is dispatched Place Order is clicked.
File:-etc/events.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_submit_all_after">
<observer name="place_order" instance="SussexDev\Extrato\Observers\PlaceOrder"/>
</event>
</config>
Observer Code
$order = $observer->getEvent()->getOrder();
$incrementId = $order->getIncrementId();
OR
$order = $observer->getEvent()->getOrder();
$orderId = $order->getId();
نصائح أخرى
On sales_order_place_after event: This event is dispatched after the order payment is placed.
$order = $observer->getEvent()->getOrder();
$incrementId = $order->getIncrementId();
On sales_order_save_after event: This event is called every time the order is saved. For eg. Order status changed, invoiced, shipped & credit memo.
$order = $observer->getEvent()->getOrder();
$orderId = $order->getId();
Update based on @Rafael's comment: You should replace:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
with
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
The line you have written in events.xml is for module.xml file.