Sin impuesto Con impuesto

Pedidos duplicados y doble cobro en PrestaShop: causas y cómo evitarlos

Un cliente paga una vez y aparecen dos pedidos, dos facturas o un estado de pago repetido. Explicamos de dónde sale, cómo detectarlo en tu histórico y cómo limpiarlo sin crear un problema mayor.

Equipo Rekire
Updated: 23/10/2026 17
Pedidos duplicados y doble cobro en PrestaShop: causas y cómo evitarlos
Share:

El cliente pagó una vez. En tu back-office hay dos pedidos del mismo carrito, cada uno con su factura y su stock descontado. O hay un solo pedido, pero con el estado «Pago aceptado» dos veces y dos facturas numeradas. Mirados por separado, los dos pedidos parecen correctos; por eso este problema pasa desapercibido hasta que cuadras el banco o el cliente reclama.

De dónde salen los duplicados

1. Dos notificaciones de la pasarela a la vez

Es la causa más frecuente y la menos visible. Muchas pasarelas avisan del pago por dos caminos: la notificación de servidor a servidor (webhook, IPN, notificación online) y la vuelta del cliente a la tienda. Si las dos llegan casi al mismo tiempo, cada una pregunta «¿existe ya un pedido para este carrito?», las dos reciben «no» porque ninguna lo ha creado aún, y cada una crea el suyo. Es una condición de carrera clásica.

2. Reintentos del webhook

Si tu servidor tarda en responder o devuelve un error, la pasarela vuelve a enviar la notificación. Si el módulo de pago no comprueba que ya la procesó, el pedido o el estado se repiten.

3. Doble clic o recarga

El cliente pulsa dos veces «Pagar» o recarga la página de confirmación. En métodos sin redirección (transferencia, contra reembolso) puede bastar para crear dos pedidos.

4. El back-office

Un empleado cambia el estado de un pedido, la página tarda y pulsa otra vez. El estado se aplica dos veces y, si ese estado genera factura, salen dos.

5. Módulos que reaccionan al mismo evento

Dos módulos que escuchan el cambio de estado y uno de ellos vuelve a cambiarlo, o un ERP que reenvía un estado ya aplicado.

Por qué cuesta encontrarlo: las comprobaciones normales de PrestaShop miran cada pedido por dentro, y cada uno está bien. El error solo se ve al comparar pedidos entre sí: mismo carrito, mismo cliente, mismo importe, segundos de diferencia.

Cómo detectarlo en tu histórico

  1. Carritos con más de un pedido. En PrestaShop un carrito debería dar un solo pedido (salvo pedidos divididos por transportista, que comparten referencia). Una consulta que agrupe pedidos por id_cart y cuente los que tienen más de uno es el primer filtro.
  2. Estados repetidos. Pedidos con el mismo estado de pago dos veces en el historial.
  3. Facturas duplicadas para un mismo pedido.
  4. Cobros frente a pedidos. Compara los pagos registrados en cada pedido con lo que dice la pasarela. Dos pedidos y un cobro es un problema de stock y facturación; dos pedidos y dos cobros es dinero de más que hay que devolver.

Cómo limpiarlos sin empeorar las cosas

  • No borres pedidos. Se pierde la trazabilidad y, si había factura, rompes la numeración. Cancela el sobrante.
  • Una factura numerada no se retira: se anula con una factura rectificativa, como exige el Reglamento de facturación (Real Decreto 1619/2012, artículo 15).
  • Repón el stock del pedido sobrante, comprobando que no se haya repuesto ya.
  • Si hubo dos cobros, la devolución la decide una persona y se hace desde la pasarela.
  • No toques pedidos ya enviados sin revisarlos uno por uno.

Cómo prevenirlo

  1. Bloqueo por carrito al crear el pedido. La segunda notificación debe esperar a que termine la primera y, al entrar, ver que el pedido ya existe. Es la solución de fondo a la condición de carrera.
  2. Idempotencia en los webhooks: guardar el identificador de cada notificación procesada y no repetir lo ya hecho.
  3. Responder rápido a la pasarela: si el webhook tarda, la pasarela reintenta. Lo que sea lento (correos, ERP) mejor después.
  4. Desactivar el botón de pago al pulsarlo y en los formularios de estado del back-office.
  5. Un único camino que cree el pedido por pasarela, si el módulo lo permite.
  6. Vigilancia: un aviso en el momento en que aparece un duplicado vale más que encontrarlo meses después.

Lo que no se debe hacer

  • Modificar el núcleo de PrestaShop o el módulo de pago para «arreglarlo»: la próxima actualización lo deshace.
  • Desactivar la notificación de servidor y fiarlo todo al retorno del cliente: si cierra la pestaña, el pedido no se crea.
  • Limpiar en lote sin un ensayo previo.

Checklist

  1. Busca carritos con más de un pedido en todo el histórico.
  2. Clasifica: un cobro y dos pedidos, o dos cobros.
  3. Cancela sobrantes, repón stock y emite rectificativas donde haga falta.
  4. Revisa cómo notifica cada pasarela y si sus webhooks se reintentan.
  5. Pon un bloqueo en la creación del pedido y en el cambio de estado.
  6. Activa avisos para enterarte el mismo día.

Cómo resolverlo en PrestaShop

RKR Order Guard toma un bloqueo de MySQL antes de que el controlador del módulo de pago cargue nada, de modo que la segunda notificación espera y encuentra el pedido ya creado; también bloquea el pedido mientras cambia de estado, para que no nazcan dos facturas, y evita el doble envío del formulario de estado en el back-office. Sin overrides. En Pedidos → Pedidos duplicados revisa todo el histórico y clasifica cada carrito: un cobro y dos pedidos (cancela el sobrante y repone el stock), dos cobros (la devolución la decide una persona) o indeterminado (solo lo lista). Permite simular antes de ejecutar, nunca borra pedidos, no emite devoluciones ni toca pedidos con paquete enviado o facturas ya numeradas, y si el bloqueo agota su espera la venta sigue. RKR Sentinel, que acompaña este artículo, avisa por Telegram de pagos sin pedido, importes que no cuadran y pedidos atascados.

Chargement...
Consentement aux cookies
Retour en haut