← Laboratorio

Pedidos que se pierden en el checkout de PrestaShop: cómo encontrar el error

Cobros sin pedido, transportistas que desaparecen, direcciones rechazadas y sesiones que se pierden al volver de la pasarela. Dónde mirar en PrestaShop y qué consulta lo detecta cada día.

Publicado: 20/8/2026Revisado: 23/7/202614 min de lectura

Autor y revisor:

Ilustración editorial: Pedidos que se pierden en el checkout de PrestaShop: cómo encontrar el error

El pedido que nunca existió

Hay una diferencia enorme entre un cliente que abandona el carrito y un cliente al que tu tienda no le dejó pagar. En la analítica se parecen: los dos son visitas que llegaron al checkout y no terminaron.

Solo que el primero decidió, y el segundo lo intentó.

Y ese segundo caso tiene una variante todavía peor: el cliente sí pagó, tiene el cargo en su tarjeta, y en tu back office no hay ningún pedido. Eso no se descubre mirando informes. Se descubre cuando esa persona escribe, y para entonces ya has perdido algo más que un pedido.

Esta guía va de encontrar esos fallos en PrestaShop 8 y 9 antes de que te los cuenten.

Los tres sitios donde se pierde un pedido

Conviene separarlos, porque cada uno se investiga en un sitio distinto:

Carrito sin pedido. Puede ser abandono normal o puede ser que el checkout no dejara avanzar. Aquí están los transportistas y las direcciones.

Pedido sin pago confirmado. El pedido existe, en estado de espera, y nunca cambia. Aquí están los tiempos de espera de la pasarela y las notificaciones que no llegan.

Pago sin pedido. El dinero se cobró, el pedido no se creó. Es el más grave y el más silencioso.

Lo primero: cobros que no tienen pedido

Este es el que hay que mirar antes que ningún otro, aunque sea el menos frecuente.

La causa habitual es que la notificación del proveedor de pago —la llamada que confirma que el cobro salió bien— no llegó o llegó y falló. Y cuando falla, muchas integraciones devuelven un error genérico al proveedor, que reintenta unas cuantas veces y se rinde.

Los motivos, por orden de frecuencia:

El punto de retorno no es accesible. Un cortafuegos que bloquea por país, un servicio anti-bots que exige JavaScript o una autenticación básica dejada puesta en producción. El proveedor recibe un error y tu tienda nunca se entera.

El pedido se valida con el carrito ya modificado. Si entre el pago y la confirmación el carrito cambió, validateOrder puede fallar por importe distinto.

Se agotó el stock durante el pago. Dos personas comprando la última unidad a la vez. Una paga, la otra paga y se queda sin pedido.

La comprobación es cruzar los cobros del proveedor con tus pedidos del día. Con hacerlo una vez a la semana ya sales del silencio; con hacerlo a diario, detectas el fallo el mismo día que empieza.

SameSite: el fallo que aparece solo

Este merece sección propia porque es el que más desconcierta: nadie ha tocado nada y de pronto los pagos dejan de completarse.

Cuando el cliente vuelve de la pasarela por POST desde otro dominio, el navegador aplica la política SameSite de las cookies. Con SameSite=Lax, la cookie de sesión de PrestaShop no viaja en esa petición. Resultado: el cliente vuelve, la tienda no lo reconoce, el carrito está vacío y el pedido no se crea.

Se manifiesta de forma irregular —depende del navegador y de la versión— y por eso se investiga fatal. Si tu pasarela hace retorno por POST:

; php.ini
session.cookie_samesite = "None"
session.cookie_secure = 1     ; obligatorio con None: sin HTTPS el navegador la descarta

Y comprueba que la cabecera sale de verdad, porque un proxy delante puede reescribirla:

curl -sI https://tutienda.es/ | grep -i "set-cookie"

Si tu integración no necesita retorno por POST, mejor no tocar esto: Lax es una protección real contra falsificación de peticiones. Se cambia cuando hace falta, no por si acaso.

El cliente que se queda sin transportista

Silencioso y bastante común. El cliente introduce una dirección correcta, llega al paso de envío y no hay ninguna opción. No aparece un mensaje de error: aparece un checkout que no avanza.

Las causas están repartidas por tres pantallas distintas de PrestaShop:

  • Zonas de entrega sin cubrir. Baleares, Canarias, Ceuta y Melilla se quedan fuera por olvido con mucha frecuencia.
  • Rangos de peso o de precio con hueco: un transportista cubre hasta 10 kg y el siguiente empieza en 10,01 kg, y un pedido de exactamente 10 kg no encaja en ninguno.
  • Restricciones por grupo de cliente que nadie recuerda haber puesto.

La consulta que enseña el agujero antes de que lo encuentre un cliente:

-- Zonas activas sin ningún transportista asociado: cada fila es una
-- provincia entera que no puede comprar.
SELECT z.id_zone, z.name
FROM ps_zone z
LEFT JOIN ps_carrier_zone cz ON cz.id_zone = z.id_zone
LEFT JOIN ps_carrier c ON c.id_carrier = cz.id_carrier
                      AND c.active = 1 AND c.deleted = 0
WHERE z.active = 1
GROUP BY z.id_zone, z.name
HAVING COUNT(c.id_carrier) = 0;

Prueba además a mano un pedido a Canarias y otro a Baleares cada vez que toques transportistas. Cinco minutos.

Direcciones que el validador rechaza

PrestaShop valida el formato del código postal según el país y, en España, muchas tiendas activan el campo de documento de identidad como obligatorio.

Los dos fallos que producen abandonos y no dejan rastro:

Mensaje de error genérico. Si el cliente ve “dirección no válida” sin saber qué campo es, se va. El texto tiene que decir el campo concreto.

Validaciones más estrictas de la cuenta. Un apellido con guion, una dirección con caracteres que la expresión regular no contempla, un código postal correcto de un país que la tienda no tiene bien configurado. Cada regla de más es una puerta cerrada.

Revisa esto en Internacional → Ubicaciones geográficas país por país, y no dejes activos países a los que no vendas: es una fuente inagotable de formatos raros.

Cómo encontrarlo en los registros

PrestaShop tiene su propio registro en Parámetros avanzados → Registros, y los módulos de pago suelen escribir ahí. Ordena por severidad y agrupa por mensaje: cien errores idénticos son una causa, no cien.

Para lo que no aparezca ahí, los registros de PHP del servidor. Y si estás depurando una integración de pago, escribir en el registro de PrestaShop desde el módulo cuesta una línea:

PrestaShopLogger::addLog(
    'Pago devuelto sin referencia de carrito: ' . json_encode($datosRecibidos),
    3,                       // 3 = error
    null,
    'Cart',
    (int) $idCarrito,
    true
);

Lo que no hay que hacer es activar el modo depuración en producción para investigar. Enseña rutas, consultas y detalles internos a cualquiera que pase por ahí.

Lo que no funciona

Mirar solo la tasa de conversión. Baja igual por abandono que por fallo técnico, y no distingue.

Reinstalar el módulo de pago. Suele borrar la configuración y perder la pista de lo que estaba pasando.

Fiarse de las pruebas en modo de pruebas. El entorno de pruebas de las pasarelas no reproduce ni los tiempos de espera ni las notificaciones tardías, que es donde está la mitad de los fallos.

Esperar a que se queje alguien. De los clientes a los que les falla el checkout, la mayoría no escribe. Se van.

Culpar al navegador del cliente. A veces es verdad. Casi siempre es una cookie, un transportista o una validación.

Una comprobación diaria en cuatro consultas

No hace falta un sistema de monitorización para salir del silencio. Con esto puesto en un cron diario ya te enteras el mismo día:

-- 1. Pedidos que llevan más de una hora esperando el pago.
SELECT COUNT(*) FROM ps_orders
WHERE current_state = 3 AND date_add < NOW() - INTERVAL 1 HOUR;

-- 2. Pedidos en estado de error de pago en las últimas 24 horas.
SELECT COUNT(*) FROM ps_orders
WHERE current_state = 8 AND date_add > NOW() - INTERVAL 1 DAY;

-- 3. Carritos con producto, con dirección elegida y sin pedido:
--    llegaron al final y no pudieron terminar.
SELECT COUNT(*) FROM ps_cart c
LEFT JOIN ps_orders o ON o.id_cart = c.id_cart
WHERE o.id_order IS NULL
  AND c.id_address_delivery > 0
  AND c.date_upd > NOW() - INTERVAL 1 DAY;

-- 4. Productos vendidos por debajo de cero: señal de carrera en el stock.
SELECT id_product, quantity FROM ps_stock_available WHERE quantity < 0;

Los identificadores de estado varían entre instalaciones: comprueba los tuyos en Parámetros de pedidos → Estados. La consulta número tres es la que más avisa, porque un cliente que ya eligió dirección no estaba dudando.

Si te apañas con esto, no necesitas nada más

Las consultas están arriba y el cron son dos líneas. Si tu volumen es pequeño y miras los pedidos todos los días, es probable que detectes los fallos por tu cuenta antes de que importen.

Lo que cansa no es escribir las consultas: es acordarse de mirarlas cada mañana durante meses, y saber si el número de hoy es raro o normal sin tener con qué compararlo.

Ampliación editorial · revisión 2026

La decisión central de esta guía

¿Cómo encuentro los pedidos que se pierden en el checkout de PrestaShop?

Separando los tres casos, porque se investigan en sitios distintos: carrito sin pedido, que apunta a transportistas y validación de direcciones; pedido sin pago confirmado, que apunta a notificaciones de la pasarela; y pago sin pedido, el más grave, en el que el cliente tiene el cargo y la tienda no tiene nada. Este último se detecta cruzando los cobros del proveedor con los pedidos del día.

Decisión

Mira primero los cobros sin pedido aunque sean los menos frecuentes, porque son los únicos que cuestan un cliente además de una venta. Después las zonas sin transportista, que dejan provincias enteras sin poder comprar. Y deja puesta una comprobación diaria en lugar de esperar a que alguien se queje.

Evidencia

Cuatro consultas diarias bastan para salir del silencio: pedidos esperando pago más de una hora, pedidos en error de pago del día, carritos con dirección elegida y sin pedido, y existencias por debajo de cero. La tercera es la que más avisa, porque quien ya eligió dirección no estaba dudando.

Límite

No se dan porcentajes de pérdida ni se sustituye la monitorización de la pasarela. Cambiar la política SameSite a None solo se justifica si el retorno del pago es por POST entre dominios: hacerlo por si acaso desactiva una protección real contra falsificación de peticiones.

Carrito y panel visual que representan una operación ecommerce
Visual editorial relacionada con el sistema analizado en esta guía.

Marco técnico

Arquitectura de ecommerce orientada a compra y operación

Un ecommerce coordina descubrimiento, decisión, pago, inventario, entrega y postventa. La interfaz es solo la capa visible. La calidad depende de que producto, precio, stock, cliente y pedido tengan reglas claras y de que las excepciones puedan resolverse sin perder trazabilidad.

La plataforma se selecciona después de modelar catálogo, clientes, países, impuestos, pagos, transportistas e integraciones. PrestaShop, WooCommerce o Shopify pueden resolver bien escenarios diferentes. Comparar solo precio de licencia ignora módulos, hosting, soporte, comisiones, actualización y coste de salida.

La ficha de producto reduce incertidumbre. Nombre, imágenes, variantes, medidas, disponibilidad, entrega, devolución y soporte aparecen con una jerarquía coherente. Las descripciones duplicadas del fabricante no expresan experiencia ni diferencian. El contenido responde preguntas que llegan a ventas y utiliza datos estructurados solo cuando la información existe en pantalla.

Analítica para revisar compra, checkout y rentabilidad
La segunda imagen separa diagnóstico y aplicación para reducir fatiga de lectura.

El checkout elimina campos que no cambian la entrega o el pago, conserva datos ante error y comunica el coste antes del último paso. Compra como invitado, métodos rápidos y autocompletado pueden ayudar, pero se validan por dispositivo y mercado. Reducir pantallas no compensa una política confusa o un pago que falla.

Stock y pedido requieren reconciliación. La tienda no debe prometer disponibilidad que el sistema maestro no puede sostener. Cuando una integración falla, el equipo necesita alerta, contexto e instrucciones. Los reintentos no pueden duplicar pedidos y los estados visibles para el cliente deben corresponder con el trabajo real.

Lista de control antes de ejecutar

  1. 01
    Catálogo gobernado

    Taxonomía, atributos, variantes, imágenes y propietario están definidos.

  2. 02
    Compra móvil probada

    Búsqueda, ficha, carrito, teclado, pago y errores funcionan en pantalla pequeña.

  3. 03
    Coste transparente

    Impuestos, envío, plazos y devolución aparecen antes de confirmar.

  4. 04
    Stock reconciliable

    Existe un dato maestro y un procedimiento para resolver diferencias.

  5. 05
    SEO de ciclo completo

    Filtros, paginación, variantes, agotados y retirados tienen política explícita.

  6. 06
    Rentabilidad medida

    Compra se conecta con margen, comisión, logística, devolución y soporte.

Qué medir para saber si funciona

Observa búsqueda sin resultados, uso de filtros, selección de variante, añadir al carrito, inicio de checkout, error, pago y compra. Segmenta por dispositivo, método y origen. Un embudo agregado puede ocultar que una sola pasarela o navegador concentra el problema.

La operación añade exactitud de stock, pedidos retenidos, tiempo de preparación, entrega, devolución y contacto. La mejora de conversión solo es sostenible cuando el equipo puede servir el volumen y el margen resultante justifica adquisición y soporte.

Playbook propio de esta guía

Encontrar el fallo de checkout antes de que lo cuente un cliente

Esta ampliación desarrolla el problema específico de pedidos que se pierden en el checkout de prestashop: cómo encontrar el error y no se reutiliza en otras entradas del Laboratorio.

El cobro que no tiene pedido

Es el caso menos frecuente y el primero que hay que mirar, porque el cliente ya tiene el cargo en su tarjeta y la tienda no tiene ni rastro. La causa habitual es que la notificación del proveedor de pago no llegó o llegó y falló, y muchas integraciones responden con un error genérico que provoca unos cuantos reintentos y después el abandono definitivo. Los motivos se repiten: un punto de retorno inaccesible por cortafuegos o por un servicio anti-bots, un carrito que cambió entre el pago y la confirmación, o el stock agotado durante el propio pago por dos personas comprando la última unidad.

La detección no necesita herramientas: basta cruzar los cobros del proveedor con los pedidos del mismo día. Semanalmente ya se sale del silencio; diariamente se detecta el fallo el día que empieza en lugar de tres semanas después. Conviene automatizarlo precisamente porque es el fallo que menos ocurre: nadie mantiene durante meses la disciplina de comprobar a mano algo que casi siempre sale bien.

Sesión, transportistas y direcciones

Hay un fallo que aparece sin que nadie toque nada y desconcierta a todo el mundo: el cliente vuelve de la pasarela por POST desde otro dominio y el navegador, aplicando la política SameSite de las cookies, no envía la de sesión. La tienda no lo reconoce, el carrito aparece vacío y el pedido no se crea. Se manifiesta de forma irregular según navegador y versión, que es lo que hace que se investigue mal. La corrección existe pero solo se justifica cuando el retorno es realmente por POST entre dominios.

Los otros dos son silenciosos de otra manera. Un cliente puede quedarse sin ninguna opción de envío por una zona sin cubrir, por un hueco entre rangos de peso o por una restricción de grupo que nadie recuerda haber puesto; no ve un error, ve un checkout que no avanza. Y la validación de direcciones rechaza formatos legítimos con un mensaje genérico que no dice qué campo falla, con lo que el cliente se va sin saber qué corregir. Ambos se previenen con una prueba manual a las zonas problemáticas cada vez que se tocan los envíos.

Registros y comprobación diaria

El registro de PrestaShop recoge lo que escriben los módulos de pago, y la forma útil de leerlo es ordenar por severidad y agrupar por mensaje: cien errores idénticos son una causa con nombre, no cien incidencias. Lo que no debe hacerse nunca es activar el modo depuración en producción para investigar, porque expone rutas, consultas y detalles internos a cualquiera que pase por la tienda mientras dure la sesión de depuración.

Para salir del silencio no hace falta un sistema de monitorización. Cuatro consultas lanzadas por cron cada día cubren los casos que importan: pedidos que llevan más de una hora esperando el pago, pedidos en estado de error de pago en las últimas veinticuatro horas, carritos con producto y con dirección de entrega elegida que no acabaron en pedido, y existencias negativas que delatan una carrera por la última unidad. Los identificadores de estado hay que comprobarlos en cada instalación, porque no son los mismos en todas.

Cuaderno de campo: el cliente que lo intentó no se parece al que se lo pensó

En la analítica, el cliente que abandona el carrito y el cliente al que la tienda no dejó pagar son la misma línea: una visita que llegó al checkout y no terminó. En la realidad no se parecen en nada. El primero tomó una decisión y probablemente vuelva; el segundo lo intentó, no pudo y se llevó la impresión de que la tienda no funciona, que es una impresión que no se corrige con un correo de recuperación. Confundirlos lleva a la respuesta equivocada: se monta una secuencia de recuperación de carritos para un problema que era un transportista mal configurado, y los correos llegan a gente que ya intentó comprar y no pudo, lo que empeora las cosas en vez de mejorarlas.

El caso extremo, el cobro sin pedido, tiene una propiedad que lo hace especialmente peligroso: es el único fallo del checkout que no produce ninguna señal en el lado de la tienda. No hay pedido en error, no hay carrito raro, no hay línea en ningún informe, porque desde el punto de vista de PrestaShop no ha pasado nada. La única evidencia vive en el panel del proveedor de pago, que es un sitio al que casi nadie entra si no está buscando algo. Por eso el control tiene que ser un cruce automático y no una revisión manual: no es cuestión de disciplina, es que no hay nada que revisar hasta que alguien escribe pidiendo su pedido.

El fallo de las cookies entre dominios merece un párrafo porque rompe el modelo mental con el que se investiga. Todo el mundo asume que si algo dejó de funcionar es porque alguien cambió algo, así que la investigación empieza por el historial de despliegues y por la última actualización de módulos. Aquí no cambió nadie: cambió el navegador del cliente, en una actualización que endureció el tratamiento de las cookies en peticiones entre sitios. El síntoma aparece de forma gradual y desigual, según qué navegadores van adoptando el cambio, y por eso durante semanas parece aleatorio. Cuando un fallo de pago se comporta de forma irregular y no correlaciona con ningún despliegue, la sesión perdida en el retorno es el primer sospechoso.

Sobre montar la vigilancia a mano o comprarla, lo que se paga no son las consultas. Las consultas están escritas y son cortas. Lo que cuesta sostener es mirarlas cada mañana durante seis meses seguidos y, sobre todo, saber si el número de hoy es normal. Tres pedidos esperando pago puede ser lo habitual de un martes o el principio de una avería, y sin histórico no hay manera de distinguirlo. Ese contexto —qué es normal en esta tienda a esta hora de este día— es lo que convierte un dato en un aviso, y es exactamente la parte que nadie tiene ganas de construir y mantener mientras la tienda funciona bien.

Comprobaciones antes de cerrar

  1. 01
    Los cobros se cruzan con los pedidos

    Es el único control que detecta el caso en el que el cliente pagó y la tienda no tiene nada.

  2. 02
    No hay zonas activas sin transportista

    Cada zona sin cobertura es una provincia entera que llega al checkout y no puede terminar.

  3. 03
    No hay huecos entre rangos de peso

    Un transportista hasta diez kilos y otro desde diez coma cero uno dejan fuera el pedido de diez exactos.

  4. 04
    El error de dirección dice qué campo falla

    Un mensaje genérico produce abandono silencioso y no deja rastro en ningún informe.

  5. 05
    SameSite solo se relaja si hay retorno por POST

    Cambiarlo por si acaso desactiva una protección real. Y con None, la cookie necesita marca de segura.

  6. 06
    El modo depuración está apagado en producción

    Investigar con él encendido expone rutas y consultas a cualquier visitante.

Repite las pruebas manuales de checkout después de cada actualización de PrestaShop, de cada cambio en transportistas y de cada actualización del módulo de pago, que son los tres momentos en los que reaparecen estos fallos. Si la comprobación diaria empieza a devolver números altos de forma sostenida, el problema ya no es puntual: hay algo en la configuración que cambió y nadie relacionó.

Pasos del procedimiento

  1. 1. Distingue abandono de fallo técnico

    Un carrito sin pedido puede ser alguien que se lo pensó mejor o alguien a quien la tienda no dejó pagar. No son el mismo problema y no se arreglan igual.

  2. 2. Busca primero los cobros sin pedido

    Es el fallo más grave y el que menos se detecta solo: el cliente tiene el cargo y tú no tienes el pedido. Cruza los pagos de la pasarela con los pedidos del día.

  3. 3. Revisa si algún cliente se queda sin transportista

    Una restricción por zona, peso o precio puede dejar direcciones válidas sin ninguna opción de envío. El cliente no ve un error: ve un checkout que no avanza.

  4. 4. Comprueba el retorno desde la pasarela

    Si el pago vuelve por POST desde otro dominio, la política SameSite de las cookies puede tirar la sesión y con ella el carrito. Es un fallo que aparece sin que nadie toque nada.

  5. 5. Mira los registros por tipo de error, no por fecha

    Los registros de PrestaShop agrupan bien por severidad. Un mismo error repetido cien veces suele ser una sola causa con nombre y apellidos.

  6. 6. Deja una comprobación diaria puesta

    Media docena de consultas al día detectan en horas lo que si no se descubre semanas después, cuando alguien se queja.

Control editorial

Metodología y fuentes

Los fallos descritos proceden de incidencias reales de checkout en tiendas PrestaShop 8 y 9. Los identificadores de estado de pedido se citan como ejemplo porque cambian entre instalaciones. No se estiman porcentajes de pérdida: dependen de la pasarela, del catálogo y de la configuración de envíos de cada tienda.