If you want to get order object from sales_order_payment_cancel
at observer then you can try:
$OrderObject=$observer->getEvent()->getPayment()->getOrder()
And from order object $OrderObject,you can get all order related details
Edit:
just change $observer->getEvent()->getOrder()
to $observer->getEvent()->getPayment()->getOrder()
checkout_onepage_controller_success_action
only dispatches the last order id:
$this->_eventManager->dispatch(
'checkout_onepage_controller_success_action',
['order_ids' => [$session->getLastOrderId()]]
);
So you'll have to load the order first in order to get the customer id. Replace this code:
$order = $observer->getEvent()->getOrder();
With:
$orderId = $observer->getEvent()->getOrderIds();
$order = $this->_orderRepositoryInterface->get($orderId);
Then update your constructor with:
protected $_orderRepositoryInterface;
public function __construct(
\Magento\Customer\Api\CustomerRepositoryInterface $customerRepositoryInterface,
\Magento\Customer\Model\Customer $customer,
\Psr\Log\LoggerInterface $logger,
\Magento\Sales\Api\OrderRepositoryInterface $orderRepositoryInterface
) {
$this->_customerRepositoryInterface = $customerRepositoryInterface;
$this->_orderRepositoryInterface = $orderRepositoryInterface;
$this->logger = $logger;
$this->customer =$customer;
}
Suggestion
Do not load the customer using the \Magento\Customer\Model\Customer
model and use service contract instead. You are already using the repository interface in your constructor so you only need to remove those lines:
\Magento\Customer\Model\Customer $customer,
And:
$this->customer =$customer;
And:
protected $customer;
Finally, you can replace:
$customers = $this->customer->load($customerId);
With:
$customers = $this->_customerRepositoryInterface->getById($customerId);
Best Answer
1.etc/event.xml
2.Observer\Getquote.php