I have created an observer to capture the order after placing it for event checkout_onepage_controller_success_action as follows:
<?php
namespace Magento\SamplePaymentGateway\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Store\Model\StoreManagerInterface;
class ProcessGatewayRedirect implements ObserverInterface
{
private $storeManager;
protected $_checkoutSession;
public function __construct(
StoreManagerInterface $storeManager,
\Magento\Checkout\Model\Session $checkoutSession
) {
$this->storeManager = $storeManager;
$this->_checkoutSession = $checkoutSession;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$orderId = $observer->getEvent()->getOrderIds();
$base_url = $this->storeManager->getStore()->getBaseUrl();
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager->create('\Magento\Sales\Model\Order') ->load($orderId[0]);
$payment = $order->getPayment();
$method = $payment->getMethodInstance();
$methodTitle = $method->getTitle();
$order_data= $order->getData();
$status = $this->_checkoutSession->getLastOrderStatus();
$increment_id = $order_data['increment_id'];
$redirect = $objectManager->get('\Magento\Framework\App\Response\Http');
$redirect->setRedirect($base_url.'custompayment/index/redirect/id/'.$increment_id.'');
echo 'oid' ;var_dump($orderId);
var_dump($base_url);
echo 'method' ;var_dump($method);
echo 'mettitle' ;var_dump($methodTitle);
echo 'status' ;var_dump($status);
return;
}
}
I'm getting all the real data except order id. For example, orderId dumped by this code is 31 whereas the order id as seen in backend is 45. I ran the test for second time and orderId dumped is 32 and in the backend it is 46. What is happening here? How to get the actual order id?
Best Answer
This is Response controller after the payment success it will come to this controller load the success page.
checkout_onepage_controller_success_action observer,