Magento2 – Get Order, Customer, and Product Details in Observer

customerevent-observermagento2product

I am trying to get order,customer,product details in observer. I am using event sales_order_save_after.

<?php
namespace Gworks\Sms\Model\Observer;
use Magento\Framework\Event\ObserverInterface;
class AfterPlaceOrderObserver implements ObserverInterface
{
    protected $_logger;
    public function __construct(
    \Psr\Log\LoggerInterface $logger, //log injection
    array $data = []
    ) {
    $this->_logger = $logger;
       // parent::__construct($data);
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    { 
     //order id
     $order = $observer->getEvent()->getOrder();
     $order_id = $order->getIncrementId();
     $this->_logger->info($order_id);

     //product id and name
     foreach($order->getAllItems() as $item)
     {
     $ProdustIds[]= $item->getProductId();
     $proName[] = $item->getName(); // product name
     }
     foreach($proName as $name)
     {
       $this->_logger->info($name);
     }
     foreach($ProdustIds as $id)
     {
       $this->_logger->info($id);
     }

     //customer id
     $customerid = $order->getCustomerId();
     $this->_logger->info($customerid);

     //customer name
     $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
     $customer = $objectManager->create('Magento\Customer\Model\Customer')->load($customer);
     $name=$customer->getName();
     $this->_logger->info($name);
    } 
}

I need to get below details.

  1. customer name
  2. phone number
  3. ordered product name
  4. shipping address

I have to collect customer name and product name in system.log but I stuck with get shipping address and phone number in log.

Best Answer

You can't get product id like this $observer->getEvent()->getProduct()->getId();

This is order event not product event

 public function execute(\Magento\Framework\Event\Observer $observer)
{
 $order = $observer->getEvent()->getOrder();
 $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);
 $shippingAddress = $order->getShippingAddress(); // shipping address
 $customer = $order->getCustomerId(); // using this id you can get customer name
} 

And for phone number you can get from shipping address or using customer id