Question

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.

event

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

Was it helpful?

Solution

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();

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top