GH GambleHub

Repeticiones y backoff en pagos

Repeticiones y backoff en pagos

1) Por qué se necesitan repeticiones

Conversión: los fallos leves (timeouts, errores de 3DS, fallas de red) se recuperan a menudo cuando se repiten: + 2-7 p.p. a Tasa automática.
Sostenibilidad: las fallas locales de PSP/ACS/banco se suavizan con retrases con rutas alternativas.
Experiencia del jugador: las repeticiones correctamente construidas ocultan el «ruido» de la infraestructura sin dobles descargas.


2) Principios básicos

1. Idempotencia en el nivel «payment intent» (PI): una operación = una 'idempotency _ key'; cualquier readmisión no cambia la fortuna monetaria.

2. División de errores:
  • Hard decline (por ejemplo, 'Do not honor' con una política de emisor rígida, 'Insufficient funds') → no suele retractarse inmediatamente.
  • Soft decline/technical (timeout, 'Issuer unavailable', 'Try again') → retray permitido.
  • 3. Backoff + limitación de intentos: aumentamos exponencialmente la latencia, añadimos un jitter y no superamos los límites (normalmente 2-3 intentos).
  • 4. Enrutamiento en conjunto: Retray no es sólo una «repetición en el mismo PSP», sino también un cambio de modo/método PSP/MID/3DS.
  • 5. Observabilidad: cada hop se registra en el Route Journal (PSP, reason, latency, modo 3DS, fee, resultado).

3) Clasificación de errores para la decisión de retraerse

ClaseEjemplosRecomendación
Red/técnicatimeout, 5xx, `Issuer/ACS unavailable`, webhook delayRetray con backoff; se puede cambiar PSP/MID/3DS
Soft decline (reversible)'Pickup card (soft)', 'Do not honor' (parte de los casos), 'Processing error'Retrase 1-2 veces, posiblemente con el cambio 3DS/ruta
Hard decline (final)`Insufficient funds`, `Invalid card`, `Expired card`, `Restricted card`, `Do not honor` (жесткий)No retraim (o sugerir un método alternativo)
Errores 3DS`Authentication unavailable`, timeout ACS, `Soft decline` после frictionlessRetrase con desafío o a través de un método alternativo (banca abierta)
Riesgo/cumplimientosanciones/RR, bloque RG, límites de velocityNo retrayamos; lógica de negocio de la falla
💡 Nota: la matriz exacta depende de los esquemas/PSP. Almacene los códigos reason whitelist/blacklist en la configuración del orquestador.

4) Estrategias de backoff (práctica)

4. 1 Backoff exponencial con jitter (recomendado)

База: `delay_n = min(base 2^n, max_delay)`

Jitter: 'delay = rand (0, delay_n)' - reduce los "stampeds' cuando muchas consultas se repiten al mismo tiempo.
Los parámetros típicos son: 'base = 200-500 ms', 'max _ delay = 5-10 s', 'n≤2 -3'.

4. 2 backoff lineal

Simple, pero peor con «excitación» en la red. Inferior a exponencial + jitter.

4. 3 Política de tiempo de espera

Client timeout (su) ≤ PSP SLA (por ejemplo, 3-5 s), de lo contrario aumenta el riesgo de duplicados/atascos.
Especifique por separado el tiempo de espera de webhook/confinm: si la confirmación no ha llegado → una conciliación compensatoria (ledger/PSP).


5) Idempotencia y protección contra tomas

Payment Intent (PI) almacena el estado, suma, método, 'idempotency _ key', el historial de rutas.
Cada hop y retry utiliza la misma clave.
Transacciones compensatorias: en Rassynchron (approve en PSP, y usted tiene timeout) - "reconcile-pull' + ajuste de ledger.
Elimina la reautorización al volver a enviar webhook: comprueba la 'transaction _ id '/' PSP reference' sobre la singularidad.


6) 3DS/SCA y repeticiones

Soft decline después de frictionless → retrae con challenge.
ACS timeout/unavailable → un backoff exponencial, luego un canal alternativo (open banking/APM) u otro PSP.
En la degradación masiva, ACS es circuit-breaker, crecimiento 'challenge rate', límites de tiempo por sumas.


7) Repeticiones para APM/banca abierta

Open banking/instant rails (SEPA Instant/FPS/Pix/UPI):
  • Los retiros son limitados: compruebe la idempotencia en el lado del proveedor y los estados en webhook 'ax diferidos.
  • Con el estado indeterminado - polling con backoff y las conciliaciones estrictas.
  • Vales/efectivo: los retiros no se aplican como una «transacción en línea», sino que está vigente el control del plazo de pago y el «status refresh».

8) Payouts (conclusiones): repeticiones y colas

Fallo técnico del banco/PSP → payouts queued con el drenaje backoff.
KYT/velocity fail → no retraim, transferencia a la verificación manual.
Priorizar cola: VIP/pequeñas cantidades/antigüedad de la solicitud; Los deadlines de SLA y la escalada automática.
Rieles alternativos (RTP/FPS/SEPA Instant/Pix) en el segundo paso de retrés.


9) Circuit-breaker y retraye

Local (en PSP/MID/BIN): cuando hay una explosión de errores → detenemos los retratos en esta ruta, cambiamos a una alternativa.
Global (por método/región): degradación del sistema → desactivamos el método, ofrecemos APM/banca abierta.
Medio-abierto: devolvemos parte del tráfico (1-5%) para verificar la recuperación antes de la devolución completa.


10) Pseudocódigo de la estrategia de retrés

python def pay_with_retries(pi):
ensure_idempotency(pi.key)
if not compliance_pass(pi): return REJECT

routes = rank_candidates(pi) # по вероятности approve, fee, health attempts = 0 for route in routes:
policy3ds = select_3ds(pi, route)
res = call_psp(route, pi, policy3ds, pi.key, timeout=3.0)
log_attempt(pi, route, res)

if res.approved: return APPROVED

if is_soft_decline(res) or is_transient_error(res):
while attempts < MAX_ATTEMPTS and not breaker_open(route):
delay = backoff_with_jitter(base=0.3, attempt=attempts, cap=8.0)
sleep(delay)
policy3ds = maybe_toggle_3ds(policy3ds, res)
res = call_psp(route, pi, policy3ds, pi.key, timeout=3.0)
log_attempt(pi, route, res)
attempts += 1 if res.approved: return APPROVED if is_hard_decline(res): break перейти к следующему маршруту (PSP-B/APM/open banking)
return DECLINED

11) KPI y puntos de referencia de destino

Incorporal Approvals from Retries: + 2-7 p.p. a la conversión subyacente.
Avg Retry Attempts per Approved Tx: 1. 2–1. 5 (mantenga por debajo de 1. 7).
Retry Success Rate (soft/tech): ≥ 25–40%.
Duplicate Rate: 0 con idempotencia correcta.
P95 Latency (teniendo en cuenta los retraídos): <7 desde antes de la respuesta final.
SLA de pago (instant share): ≥ el 70% de los cheques ligeros, atrasos <umbral de destino.


12) Playbucks de incidentes

A. Timeouts masivos en PSP-A

1. Abrir breaker local para PSP-A.
2. Redistribuir retraídas a PSP-B/APM.
3. Backoff exponencial con jitter, 2-3 intentos límite.
4. El medio-abierto canario en 10-15 minutos.

B. Degradación ACS/3DS

1. El bebé por el crecimiento 'soft decline', timeouts.
2. Aumentar la tasa de desafío; parte del tráfico → banca abierta.
3. Aplace los cheques pesados, incluya los límites de velocity.

C. Retrasos en los pagos

1. Transferencia a la cola, priorización VIP/pequeñas cantidades.
2. Reraut en rails alternativos (RTP/FPS/SEPA Instant/Pix).
3. Comunicación a jugadores + auto-escalada.


13) Observabilidad y datos

Route Journal: PSP/MID, BIN/issuer, reason, latency, 3DS-режим, retry chain, итог, fee.
Dashboards: Auth Rate (por bancos), Retry Success, Avg Attempts, Decline Mix, p95 latency, Payout Queue Depth.
Alertas: spikes por códigos reason, aumento de intentos/latency, desbordamiento de colas de salida.


14) Hojas de comprobación de implementación

Arquitectura/datos

  • Payment Intent + `idempotency_key` на все hops.
  • Matriz de configuración de códigos reason: retryable vs no retryable.
  • webhooks firmados, deduplicación por referencia PSP.

Backoff/reglas

  • Backoff exponencial con jitter; límite de intentos y tiempo de la ventana.
  • Smart retry: cambio de 3DS/MID/PSP/método; distinción para tarjetas vs APM/banca abierta.
  • Circuit-breakers (local/global), half-open canarios.

Ledger/taladro

  • Transacciones compensatorias con estados «suspendidos».
  • T + 0/T + 1 conciliación: PSP ↔ banco ↔ administrador de dinero.
  • Política de Tiempo de Espera y SLA en el formulario/webhook.

Operaciones/cumplimiento

  • RG/sanciones/PEP/edad - antes de los retiros.
  • KYT/velocity на payouts; reglas de rugido manual.
  • Runbooks y RACI para incidentes/escaladas.

15) Economía y riesgo

Considere la tasa de effective teniendo en cuenta 3DS-fia, FX, charjback costo, retray-overhead.
Limite rigurosamente los retiros en segmentos de alto riesgo para no acelerar el chargeback exposure y las reservas.


16) Resultado

Las repeticiones funcionan cuando son manejables: idempotencia, matriz clara de códigos reason, backoff exponencial con jitter, restricción de intentos y ligadura de enrutamiento (cambio de método PSP/3DS). Agregue circuit-breaker, colas para payouts y fuertes conciliaciones - y elevará la conversión de manera constante sin crear tomas y «agujeros» de caja registradora.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.