:::: MENU ::::

Borrar el carrito y añadir un producto en Magento

Borrar el carrito y añadir un producto en Magento
12 votos, 4.08 media (80% puntos)

Un caso ‘curioso’ que se me presentó hace poco trabajando con Magento, fue la necesidad de añadir al carrito mediante programación una suscripción recurrente con pago por PayPal.

Por si alguien no lo sabe, el ‘problema’, o mejor dicho, la limitación de los pagos recurrentes en Magento/PayPal, es que deben contratarse por separado, es decir, no podemos comprar simultáneamente en nuestra tienda Magento, un producto normal y una suscripción con pago recurrente mensual, trimestral o similar.

Esta limitación (que por cierto es de PayPal y no de Magento como muchos piensan) se muestra en Magento en forma de error cuando se intentan mezclar ambos tipos de producto en el carrito.

Pero la opción de ganar una suscripción anual a un producto o servicio es muy apetitosa, así que merecía la pena hacer algo para evitarle al cliente el error en pantalla, que además dicho sea de paso, asusta un poco.

Así que el planteamiento fue hacer que si el usuario añade una suscripción al carrito y el carrito no está vacío, vaciar el carrito y añadir la suscripción de forma transparente al usuario.

Y aquí vino el problema, y es que muchos tutoriales explican como añadir productos mediante programación al carrito, pero ninguno (que yo haya encontrado) funciona en todas las situaciones.

Así que ahí va mi código:

  // Iniciamos sesión
  $session = Mage::getSingleton('checkout/session');
  $session->start();
  $session->clear();

  // Acceso al carrito
  $cart = Mage::helper('checkout/cart')->getCart();
  $cart->init();
  $cart->truncate();

  // Añadimos los productos necesarios
  foreach ($productos as $productId => $cant) {

      // Añadimos al carrito
      $cart->addProduct($product, array('product' => $productId, 'qty' => $cant));
  }

  // Guardamos el carrito y enviamos al usuaro al carrito
  $cart->save();
  $session->setCartWasUpdated(true);
  Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));




Hey! Qué opinas sobre el artículo?