Qué hay que comprobar primero: un cliente puede terminar con dos cargos si vuelve a enviar el checkout, si una espera larga le lleva a repetir el pago o si una integración reintenta una captura sin idempotencia. Antes de tocar el pedido, hay que determinar cuántas transacciones reales ha registrado la pasarela.
Cómo saber si existen dos cargos reales
El estado de WooCommerce no basta como prueba. Compara el ID del pedido con todas las autorizaciones y capturas de la pasarela, sus importes, moneda y marcas de tiempo. Dos emails de confirmación no implican necesariamente dos cobros; dos capturas distintas, sí.
Qué datos debes conservar
- ID de pedido y de sesión de checkout.
- ID de cada transacción, autorización, captura y reembolso.
- Registros de timeout, retorno del navegador y webhooks.
- Cualquier clave de idempotencia enviada a la pasarela.
Patrones que explican la mayoría de duplicados
- Reintento del cliente: el pago se completa pero la confirmación no llega y el usuario prueba otra vez.
- Reintento técnico: el cliente HTTP o la pasarela repite una petición sin una clave estable.
- Dos rutas de captura: el retorno síncrono y el webhook ejecutan lógica de cobro.
- Código personalizado: un plugin o integración solicita la captura más de una vez.
Orden seguro para resolverlo
- Detén temporalmente la ruta concreta que duplica cargos si el incidente sigue activo.
- Concilia cada transacción con la pasarela antes de emitir reembolsos.
- Define una única ruta autorizada de captura y añade idempotencia a los reintentos.
- Prueba timeout, doble clic, refresco, retorno tardío y webhook repetido.
Cómo distinguir un pago duplicado de un pedido duplicado
Son problemas relacionados, pero no equivalentes. Puede haber dos pedidos y una sola captura, o un pedido y dos capturas. Si también aparecen órdenes repetidas, revisa cómo diagnosticar pedidos duplicados en WooCommerce. Si el pago figura completado pero el estado local no cuadra, consulta cómo conciliar un pago completado con un pedido fallido.
Qué no conviene hacer
No cambies estados ni lances reembolsos masivos desde WooCommerce antes de confirmar qué ha registrado la pasarela. Eso puede separar todavía más el libro de pedidos del registro financiero real.
Cuándo puedes cerrar la incidencia
El flujo está reparado cuando una sesión de checkout no puede producir más de una captura, los reintentos y webhooks repetidos son idempotentes y WooCommerce coincide con la pasarela transacción por transacción.