*/ class Mage_Paypal_HostedproController extends Mage_Core_Controller_Front_Action { /** * When a customer return to website from gateway. */ public function returnAction() { $session = $this->_getCheckout(); //TODO: some actions with order if ($session->getLastRealOrderId()) { $this->_redirect('checkout/onepage/success'); } } /** * When a customer cancel payment from gateway. */ public function cancelAction() { $gotoSection = $this->_cancelPayment(); $redirectBlock = $this->_getIframeBlock() ->setGotoSection($gotoSection) ->setTemplate('paypal/hss/redirect.phtml'); //TODO: clarify return logic whether customer will be returned in iframe or in parent window $this->getResponse()->setBody($redirectBlock->toHtml()); } /** * Cancel order, return quote to customer * * @param string $errorMsg * @return mixed */ protected function _cancelPayment($errorMsg = '') { $gotoSection = false; $session = $this->_getCheckout(); if ($session->getLastRealOrderId()) { $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId()); if ($order->getId()) { //Cancel order if ($order->getState() != Mage_Sales_Model_Order::STATE_CANCELED) { $order->registerCancellation($errorMsg)->save(); } $quote = Mage::getModel('sales/quote') ->load($order->getQuoteId()); //Return quote if ($quote->getId()) { $quote->setIsActive(1) ->setReservedOrderId(NULL) ->save(); $session->replaceQuote($quote); } //Unset data $session->unsLastRealOrderId(); //Redirect to payment step $gotoSection = 'payment'; } } return $gotoSection; } /** * Get frontend checkout session object * * @return Mage_Checkout_Model_Session */ protected function _getCheckout() { return Mage::getSingleton('checkout/session'); } /** * Get iframe block * * @return Mage_Paypal_Block_Hosted_Pro_Iframe */ protected function _getIframeBlock() { $this->loadLayout('paypal_hosted_pro_iframe'); return $this->getLayout() ->getBlock('hosted.pro.iframe'); } }