dfsavecart — Guardado de carrito con enlace mágico
Instalación, configuración y uso del módulo de guardado de carrito con enlace mágico para PrestaShop 8 y 9.
Presentación
dfsavecart añade una función «Guardar para más tarde» en la página del carrito de tu tienda PrestaShop 8 o 9. El visitante, conectado o invitado, introduce su dirección de correo y recibe un enlace seguro («enlace mágico») que restaura su carrito exacto — mismos productos, mismas cantidades — en cualquier dispositivo, en cualquier momento dentro del período de validez configurado.
El módulo es no intrusivo: no afecta al túnel de pedido, al checkout ni a otros módulos. Funciona con el sistema de correo nativo de PrestaShop (y por tanto con tu SMTP existente).
Requisitos
- PrestaShop 8.0.x a 9.x
- PHP 8.1 o superior
- MySQL 5.7+ o MariaDB 10.3+
- Envío de correo funcional (Parámetros avanzados > Correo electrónico — prueba el envío antes de instalar el módulo)
Instalación
- Descarga el archivo
dfsavecart.zipdesde tu cuenta DataFirefly. - En el back office de PrestaShop, ve a Módulos > Gestor de módulos.
- Haz clic en Subir un módulo y selecciona el ZIP.
- PrestaShop instala el módulo automáticamente: se crea la tabla
ps_df_savecarty se registran los hooks. - Haz clic en Configurar para acceder a los ajustes.
No se instala ningún override de clase ni de controlador: la desinstalación es limpia y sin residuos (la tabla y las claves de configuración se eliminan).
Configuración
Todos los ajustes están en una sola página: Módulos > Gestor de módulos > dfsavecart > Configurar.
Ajustes principales
- Activar el módulo — interruptor general. Desactivado, el bloque desaparece del front sin desinstalar.
- Posición del botón — Pie del carrito (recomendado, hook
displayShoppingCartFooter), Dentro del carrito (hookdisplayShoppingCart) o Ambos. La elección depende de tu tema: comprueba el resultado en la página del carrito tras el cambio. - Duración de validez del enlace — de 1 a 365 días, 30 por defecto. Después, el enlace caduca y el registro se purga.
Seguridad y anti-spam
- Límite por correo / día — número máximo de envíos para una misma dirección en 24 h deslizantes (10 por defecto). Poner 0 para desactivar. El contador se basa en un hash con sal del correo: la dirección no se almacena en texto plano para esta función.
- Enlace de uso único — si se activa, el enlace queda invalidado tras la primera restauración. Útil para carritos confidenciales (B2B, presupuestos).
Comportamiento de restauración
- Vaciar el carrito actual antes de restaurar — activado por defecto. Si se desactiva, los productos del enlace se añaden al carrito en curso (acumulativo).
RGPD y correo
- Solicitar consentimiento RGPD — muestra una casilla obligatoria antes del envío (activado por defecto, recomendado).
- Enviar copia oculta al comerciante — añade el correo de contacto de la tienda en BCC en cada envío, para seguimiento interno.
- Asunto del correo (por idioma) — personalizable para cada idioma activo de la tienda. Variables disponibles:
{shop_name}y{firstname}.
Funcionamiento para el cliente
- El cliente añade productos a su carrito y abre la página del carrito.
- Ve el bloque «Guardar este carrito para más tarde» con un campo de correo (prerrellenado si está conectado).
- Introduce su correo, marca el consentimiento si se solicita, y hace clic en Enviar el enlace.
- Recibe un correo con un resumen del carrito (productos, cantidades, total estimado), la fecha de caducidad y un botón Restaurar mi carrito.
- Un clic en el botón restaura el carrito exacto y redirige a la página del carrito con un mensaje de confirmación.
Casos particulares en la restauración
- Producto desactivado o eliminado — la línea se omite y el cliente es informado mediante un mensaje que lista los productos indisponibles.
- Stock insuficiente — la cantidad se ajusta al máximo disponible, con un mensaje que señala el ajuste.
- Enlace caducado o ya utilizado (modo uso único) — se muestra una página de error sobria, con enlaces al carrito actual y a la portada.
- Idioma y moneda — se restauran los del carrito original.
Correos
Las plantillas HTML y texto se incluyen en francés, inglés, español y alemán en modules/dfsavecart/mails/{iso}/savecart.html y savecart.txt. El idioma utilizado es el del carrito en el momento del guardado.
Variables disponibles en las plantillas: {firstname}, {shop_name}, {restore_link}, {cart_items_html}, {cart_items_txt}, {cart_total}, {expiry_date}.
Para personalizar las plantillas de forma duradera, duplícalas en la carpeta mails de tu tema en lugar de modificar las del módulo: se sobrescribirían en la actualización.
Seguridad
- Token de 256 bits — generado por
random_bytes(32), el generador criptográficamente seguro de PHP. 64 caracteres hexadecimales en la URL. - Almacenamiento en hash — solo la huella SHA-256 del token se guarda en base. Si la base de datos se ve comprometida, ningún enlace puede reconstruirse.
- CSRF — el endpoint AJAX de guardado verifica el token de sesión de PrestaShop.
- Validación estricta — el formato del token se comprueba en el servidor (
[a-f0-9]{64}) antes de cualquier consulta a la base.
RGPD
- Consentimiento explícito configurable antes del envío del correo.
- Para el límite anti-spam, el correo no se conserva en texto plano: solo se usa un hash con sal (con la clave secreta de la tienda).
- Los registros caducados se eliminan automáticamente (purga) — ver sección siguiente.
- No se transmite ningún dato a servicios de terceros: todo permanece en tu base PrestaShop.
- Ante una solicitud de supresión de un cliente, elimina sus filas en la tabla
ps_df_savecart(columnaemail).
Purga de enlaces caducados
Tres opciones, de la más simple a la más automatizada:
- Botón manual — en la página de configuración del módulo, «Purgar las entradas caducadas».
- Módulo CronJobs — instala el módulo gratuito CronJobs de PrestaShop: el hook
actionCronJobdel módulo se llama automáticamente y activa la purga. - Crontab del sistema — programa una llamada regular al cron de tu tienda según tu configuración de servidor.
Estadísticas
La página de configuración muestra cuatro contadores en tiempo real: total guardados, activos (no caducados), caducados (en espera de purga) y restaurados (enlaces usados al menos una vez). La proporción restaurados / total te da la tasa de conversión de la funcionalidad.
Multitienda
El módulo es compatible con multitienda: cada guardado memoriza el identificador de la tienda de origen, utilizado durante la restauración. La configuración sigue el contexto de tienda estándar de PrestaShop.
Solución de problemas
El correo no llega
- Comprueba el envío de correo global de la tienda: Parámetros avanzados > Correo electrónico > Probar envío.
- Revisa la carpeta de spam del destinatario.
- Consulta los logs: Parámetros avanzados > Logs (los errores del módulo llevan el prefijo
[dfsavecart]).
El bloque no aparece en la página del carrito
- Comprueba que el módulo está activado en su configuración.
- Comprueba que el carrito contiene al menos un producto (el bloque se oculta con carrito vacío).
- Comprueba la posición elegida: algunos temas no implementan el hook
displayShoppingCartFooter— cambia a «Dentro del carrito» o «Ambos». - Vacía la caché: Parámetros avanzados > Rendimiento > Vaciar caché.
Mensaje «Token de seguridad inválido»
- La página del carrito quedó abierta demasiado tiempo y la sesión caducó: recarga la página e inténtalo de nuevo.
Mensaje «Demasiadas solicitudes para esta dirección»
- Se alcanzó el límite anti-spam diario para este correo. Aumenta el límite en la configuración o espera 24 h.
Desinstalación
La desinstalación elimina la tabla ps_df_savecart (todos los carritos guardados se pierden) y todas las claves de configuración. No queda ningún residuo en la base ni en los archivos.