CategoriAs: Magento

En Magento Redsys borra el carrito cuando cancelamos pago en el TPV

Redsys borra el carrito cuando cancelamos el pedido, prevenir el borrado del carrito en Magento con proveedores externos de pago.

Recientemente me encuentro inmerso en un proyecto bastante chulo por la temática del mismo. Entre todos los problemas a resolver se encontraba este.

Trabajamos con un entorno de Magento con versión 1.9.2
Y la versión del modulo de Redsys para Magento es la 2.8.4

Esta es la problemática:

  • Llenamos el carrito.
  • Nos dirigmos a completar nuestros datos de envío y registro y seleccionamos como método de pago Redsys.
  • Estando en la pasarela de pago, pulsamos hacia atrás en el navegador o en cancelar pago de Redsys, porque queremos pagar con paypal por ejemplo.
  • Walaa!!, tenemos que volver a empezar, «Su carrito está vacío».

Esto es debido a lo siguiente:

  • Cuando pasamos a la plataforma de pago de Redsys, el modulo de este coge el carrito de tu sesión y lo convierte en pedido.
  • Al guardar tu carrito como pedido desaparece del front, lo que hace que cuando volvamos no tengamos el carrito.

 

Para evitar esto, debemos poner el carrito como activo aun habiendolo convertido en pedido.
Después, en el callback de «Pago correcto, metodo(successAction)» eliminamos el carrito. Para hacer esto tenemos que hacer tres modificaciones.

  1. Las URL_OK y URL_KO hay que dejarlas tal cual nos viene en el modulo de Redsys, estas URL se cambian en IndexController.php:

    $miObj->setParameter("DS_MERCHANT_URLOK",$urltienda);
    $miObj->setParameter("DS_MERCHANT_URLKO",$urltienda);
  2. Debido a que tenemos habilitado el OnePageCheckout de Magento, las modificaciones las haremos como OnePageCheckout.
    En el siguiente fichero, haremos las siguientes modificaciones en la función «saveOrderAction»:

            
            //$this->getOnepage()->getQuote()->save();    Comentamos esta linea.
            
            if (isset($redirectUrl)) {
        	    $result['redirect'] = $redirectUrl;
        	    $this->getOnepage()->getQuote()->setIsActive(1) ;//AÑADIMOS ESTA LINEA AQUÍ
    	}		
    	$this->getOnepage()->getQuote()->save(); //Añadimos esta linea aquí.
    
  3. En este punto, pulsando hacia atrás nuestro carrito seguirá activo, pero queremos que cuando finalicemos el pago aparezca el carrito vacío, por lo tanto tenemos que modificar en este mismo fichero la función successAction:
        /**
         * Order success action
         */
        public function successAction()
        {
    	    Mage::log("Success Action", null, 'debug-david-escudero.log');
            $session = $this->getOnepage()->getCheckout();
            if (!$session->getLastSuccessQuoteId()) {
                $this->_redirect('checkout/cart');
                return;
            }
    		Mage::log("Success Action2", null, 'debug-david-escudero.log');
            $lastQuoteId = $session->getLastQuoteId();
            $lastOrderId = $session->getLastOrderId();
            $lastRecurringProfiles = $session->getLastRecurringProfileIds();
            if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
                $this->_redirect('checkout/cart');
                return;
            }
            
            $this->getOnepage()->getQuote()->setIsActive(false) ;		
    		$this->getOnepage()->getQuote()->save(); 
            Mage::getSingleton('checkout/cart')->truncate();
    		Mage::log("Success Action3", null, 'debug-david-escudero.log');
            $session->clear();
            $this->loadLayout();
            $this->_initLayoutMessages('checkout/session');
            Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
            $this->renderLayout();
        }
    

 

Con estos cambios ya os debería funcionar todo correctamente, el pedido se hace correctamente con Redsys, puedes ir hacia atrás cuando estás en el TPV y os funcionará el vaciado del carrito cuando finalizas el pago.

Y llegados a este punto, si no sabeis donde modifcar vuestra plantilla de finalización de pedido, os indico como debeis hacerlo.

Hay que modificar 2 ficheros «.phtml» que se encuentran en las siguientes rutas:

En estas plantillas podeis usar HTML y personalizarlas a vuestra imagen corporativa.

 

 

descuderosanchez@gmail.com

Compartir
Publicado por
descuderosanchez@gmail.com
Etiquetas: ecommercemagentoPhp

Artículos Recientes

  • Prestashop`

Script para Duplicar BBDD en otro Prestashop

Modifica tu tienda en un solo sitio Si por algún motivo, no utilizas multitienda y dispones de dos tiendas exactamente…

3 años ago
  • Prestashop`

Prestashop – No se muestran las opciones de pago

En el proceso de compra no se muestran las opciones de pago Si te has encontrado con este problema, después…

3 años ago
  • Symfony

Regeneración BBDD Symfony en Deploy

/migrations#rm -rf ./* #php bin/console doctrine:migrations:generate #php bin/console doctrine:migrations:migrate #php bin/console doctrine:migrations:current #php bin/console doctrine:migrations:diff #php bin/console c:c #php bin/console…

3 años ago
  • Symfony

Inicializar proyecto Symfony 5 para gestionar entidades

Pasos para inicializar un proyecto Symfony 5 y un panel de control de entidades Inicializando Symfony: Si no tenemos el comando…

3 años ago
  • Odoo

Odoo – Enlaces de interes

MODULOS DE ODOO NECESARIOS PARA UN ECOMMERCE Enlaces de OCA de interes: En el siguiente enlace existen un montón de…

3 años ago
  • Sin categoría

Como Migrar Prestashop 1.7 de un dominio a otro

Migración de un prestashop 1.7 de un dominio a otro. Copiamos la BBDD del antiguo hosting al nuevo. Copiamos los…

3 años ago