Question

I have used event

<event name="checkout_onepage_controller_success_action">

when I use this code I am getting null $order

        $order = $observer->getEvent()->getOrder();   // im getting null
        $order_id = $order->getIncrementId();
        $this->_logger->info($order_id);
        foreach($order->getAllItems() as $item){
            $ProdustIds[]= $item->getProductId();

            $proName[] = $item->getName(); // product name
        }
        $this->logger->info($ProdustIds);
        $customer = $order->getCustomerId();

how I can get order id and customer name in Magento 2???

No correct solution

OTHER TIPS

If you want to get order id on checkout_onepage_controller_success_action then you have to call $observer->getEvent()->getOrderIds()

$observer->getEvent()->getOrderIds() provide an array which consist of one order id of single checkout and provide multiple order ids.

 <?php

nameSpace YourNameSpace;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
use usMagento\Framework\Exception\NoSuchEntityException;
class OrderSuccess implements ObserverInterface{

    /**
     * @var \Magento\Sales\Model\OrderRepository
     */
    private $orderRepository;

    public function __construct(
   \Magento\Sales\Model\OrderRepository $orderRepository
   ) {

       $this->orderRepository = $orderRepository;
    }
    public function execute(EventObserver $observer)
    {
        $orderIds = $observer->getEvent()->getOrderIds();
        if (empty($orderIds) || !is_array($orderIds)) {
            return;
        } 
        foreach($orderIds as $orderId){

            try{
                $order = $this->orderRepository->get($orderId);
                if ($order->getCustomerFirstname()) {
                    $customerName = $order->getCustomerFirstname() . ' ' . $order->getCustomerLastname();
                } else {
                    $customerName = $order->getBillingAddress()->getFirstname(). ' ' . $order->getBillingAddress()->getLastname();
                }
                //$customerName = $order->getCustomerName();
            } catch (NoSuchEntityException $ex) {

            }


        }
   }
}

To get order ID change your code like below :

    $order_ids  = $observer->getEvent()->getOrderIds();
    $order_id   = $order_ids[0];

To get Shipping Adress load order:

//\Magento\Sales\Api\OrderRepositoryInterface
$_order =  $this->orderRepository->get($order->getEntityId());

$shippingAddress = $_order->getShippingAddress();
 $shippingName = $shippingAddress->getFirstName().$shippingAddress->getLastName();

Its very easy, Please find below code. To get customer name find the code below.

$customer = $observer->getData('data_object');
 if ($customer) {
      $customerName = $customer->getFirstName();
   }

To get the order use the code below:

$observer->getOrder()
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top