Magento – Can’t Access Quote from checkout session after returning from payment Gateway

checkoutpayment-gatewayquote

I am building payment gateway extension and i am facing small issue to get the quote object after control return from payment Gateway.

Let me explain you in detail.

I am using below funtion to redirect to payment gateway.

public function getCheckoutRedirectUrl()
{
return Mage::getUrl('custom/index/start');
}

Above method works fine. I am redirecting to payment gateway and payment processed successful with success message and redirect back to our store with captured status on below controller action.


public function returnAction()
{
$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->collectTotals();
$payment = $quote->getPayment();
$service = Mage::getModel('sales/service_quote', $quote);
$service->submitAll();
$quote->save();
$order = $service->getOrder();
$this->getSession()->setLastQuoteId($quote->getId())
->setLastSuccessQuoteId($quote->getId())
->setLastOrderId($order->getId());
{

Mage_Sales_Model_Order::STATE_PENDING_PAYMENT: break; case Mage_Sales_Model_Order::STATE_PROCESSING: case Mage_Sales_Model_Order::STATE_COMPLETE: case Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW: $order->sendNewOrderEmail(); break; } $this->getResponse()->setRedirect(Mage::getUrl('checkout/onepage/success')); return; }

But in the above function i get the quote object as blank and due to that i am unable to place an order. This means that after returning from payment gateway it clears the checkout session.

How can i get the quote object and what is the problem ?

Please help

Best Answer

After click on place order button at final step of checkout ,you can not get quote object from $quote = Mage::getSingleton('checkout/session')->getQuote();

As per as magento,whenever a customer is click on place order button then a quote is convert to order object and unlink the session quote object from session. and just assign:

  • last quote id to checkout session variable to last_quote_id
  • Newly created order increment id to session variable last_real_order_id

If you want to get order increment id & quote id then use $OrderIncrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); and $quote=Mage::getSingleton('checkout/session')->getLastQuoteId() respectively at returnAction

$OrderObject=$order = Mage::getModel('sales/order');
$order->loadByIncrementId($OrderIncrementId);

And

$QuoteObject = Mage::getModel('sales/quote');
$QuoteObject->load(Mage::getSingleton('checkout/session')->getLastQuoteId());