El problema
Las redes son poco confiables. Un request puede fallar, pero la transacción puede haberse creado. Si reintentas ciegamente, terminas creando dos pagos para un solo pedido, y el usuario es cobrado dos veces.Principio
Cada pedido tiene UN solo
str_id_pago que nunca se reutiliza.Antes de reintentar, verifica si el pago ya existe con
/VerificacionPago.Flujo correcto ante fallo de /InicioPago
Código
Callback idempotente
El usuario puede recargar tu página de retorno, o Zonapagos puede disparar el callback dos veces.Email de confirmación idempotente
RETURNING viene vacío → no envíes el email de nuevo.
Entrega de producto idempotente
Sonda con lock
Si la sonda se ejecuta en múltiples réplicas, usa un lock distribuido:Ver también
Manejo de errores
Estrategia general de errores.