Powtórzenia i wycofanie płatności
Powtórzenia i wycofanie płatności
1) Dlaczego potrzebne są powtórki
Konwersja: awarie miękkie (timeouts, błędy 3DS, awarie sieci) są często odzyskiwane przy powtarzaniu: + 2-7 pp do Auth Rate.
Solidność: lokalne awarie PSP/ACS/banku są wygładzane przez przekaźniki z alternatywnymi trasami.
Doświadczenie gracza: prawidłowo zbudowane repliki ukrywają „hałas” infrastruktury bez podwójnych opłat.
2) Podstawowe zasady
1. Idempotencja na poziomie „intencji płatności” (PI): jedna operacja = jeden 'idempotence _ key'; jakiekolwiek odwołanie się nie zmienia stanu monetarnego.
2. Separacja błędów:- Twardy spadek (np. „Nie przestrzegać” surowej polityki emitenta, „niewystarczające fundusze”) → zwykle nie przekwalifikować od razu.
- Miękki spadek/techniczny (timeout, „Emitent niedostępny”, „Spróbuj ponownie”) → dozwolony przekład.
- 3. Backoff + próba limitu: wykładniczo zwiększyć opóźnienie, dodać jitter i nie przekroczyć limitów (zwykle 2-3 próby).
- 4. Routing wiązki: przekaźnik jest nie tylko „powtórzeniem tego samego PSP”, ale także zmianą trybu/metody PSP/MID/3DS.
- 5. Obserwowalność: każdy hop jest rejestrowany w Dzienniku Trasy (PSP, powód, opóźnienie, tryb 3DS, opłata, wynik).
3) Klasyfikacja błędów w przypadku decyzji o wycofaniu się
4) Strategie backoff (praktyka)
4. 1 Wykładnicze backoff z jitter (zalecane)
Бава: 'delay _ n = min (base 2 ^ n, max_delay)'
Jitter: 'delay = rand (0, delay_n)' - redukuje stampedes, gdy wiele żądań jest powtarzanych jednocześnie.
Typowe parametry to 'base = 200-500 ms', 'max _ delay = 5-10 s', 'n ≤ 2 -3'.
4. 2 Liniowe cofnięcie
Proste, ale gorsze z „niepokojów” w sieci. Gorzej niż wykładniczy + jitter.
4. 3 Polityka Timeout
Czas klienta (Twój) ≤ PSP SLA (na przykład 3-5 s), w przeciwnym razie zwiększa się ryzyko duplikatów/zamrożeń.
Oddzielnie ustawić czas oczekiwania na hak/potwierdzenie: jeśli potwierdzenie nie przyjdzie → kompensacja (księga/PSP).
5) Idempotencja i ochrona przed bierze
Intent płatności (PI) przechowuje status, kwotę, metodę, 'idempotence _ key', historię trasy.
Każdy hop i retry używać tego samego klucza.
Transakcje kompensacyjne: gdy nie są synchronizowane (zatwierdzać w PSP, a masz czas) - "reconcile-pull' + korekta rejestru.
Wyłączenie ponownej autoryzacji przy ponownym dostarczaniu haka: sprawdź 'transaction _ id'/' PSP reference' pod kątem wyjątkowości.
6) 3DS/SCA i powtórzenia
Miękki spadek po frictionless → retray z wyzwaniem.
ACS timeout/niedostępne → wykładnicze backoff, następnie alternatywny kanał (open banking/APM) lub inny PSP.
Przy masowej degradacji ACS - wyłącznik, wzrost „szybkość wyzwań”, terminy kwot.
7) Reps for APM/open banking
Otwarta bankowość/szyny błyskawiczne (SEPA Instant/FPS/Pix/UPI):- Retreaty są ograniczone: sprawdź idempotencję po stronie dostawcy i statusy w opóźnionych webhook 'ax.
- Z nieokreślonym statusem - sondaż z backoff i ścisłe pojednania.
- Bony/gotówka: Przekaźniki nie mają zastosowania do „transakcji online”, ale obowiązuje kontrola terminowa i „odświeżanie statusu”.
8) Wypłaty: powtórki i kolejki
Awaria techniczna banku/PSP → kolejki wypłat z odpływem backoff.
KYT/prędkość nie działa → nie retrayem, przenieść do ręcznego sprawdzenia.
Priorytet kolejki: VIP/małe kwoty/wiek aplikacji; SLA i terminów automatycznej eskalacji.
Alternatywne szyny (RTP/FPS/SEPA Instant/Pix) w drugim wycofanym kroku.
9) Wyłącznik i retrai
Lokalne (na PSP/MID/BIN): gdy błędy się skurczą, → zatrzymać przekaźniki na tej trasie, przejść do alternatywnej.
Globalny (na metodę/region): degradacja systemowa → wyłączyć metodę, oferujemy APM/otwartą bankowość.
W połowie otwarte: część ruchu powrotnego (1-5%), aby sprawdzić odzyskanie przed pełnym powrotem.
10) Pseudokoda strategii retray
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 i cele
Przyrostowe aprobaty z Retries: + 2-7 pp do podstawowej konwersji.
Avg Retry Attempts per Approved Tx: 1. 2–1. 5 (przechowywać poniżej 1. 7).
Retry Success Rate (soft/tech): ≥ 25-40%.
Duplikat Rate: 0 z prawidłową idempotencją.
P95 Opóźnienie (w tym przekaźniki): <7 s do czasu odpowiedzi końcowej.
Wypłata SLA (udział natychmiastowy): ≥ 70% łatwych kontroli, opóźniony <próg docelowy.
12) Playbooks incydentu
A. Masowe terminy dotyczące PSP-A
1. Otwarty lokalny wyłącznik dla PSP-A.
2. Ponowny przydział retras do PSP-B/APM.
3. Wykładnicze backoff z jitter, limit 2-3 próby.
4. Kanaryjski w połowie otwarte po 10-15 minut.
B. Degradacja ACS/3DS
1. Wykrywanie przez wzrost „miękki spadek”, terminy.
2. Zwiększenie poziomu wyzwań; część ruchu → otwarta bankowość.
3. Zarezerwuj ciężkie kontrole, włącz limity prędkości.
C. Opóźnienia wypłat
1. Przeniesienie do kolejki, ustalanie priorytetów dla VIP/małych kwot.
2. Przejście na alternatywne szyny (RTP/FPS/SEPA Instant/Pix).
3. Komunikacja z graczami + automatyczna eskalacja.
13) Obserwowalność i dane
Dziennik trasy: PSP/MID, BIN/emitent, powód, opóźnienie, 3DS-режим, powtórny łańcuch prób, итоz, opłata.
Deski rozdzielcze: Auth Rate (według banku), Retry Success, Avg Attempts, Decrease Mix, p95 latency, Payout kolejki głębokości.
Alerty: kolce według kodów rozumowania, wzrost prób/opóźnień, przepełnienie kolejek wyjściowych.
14) Listy kontrolne wdrażania
Architektura/Dane
- Intent płatniczy + 'idempotency _ key' на вса chmiel.
- Matryca konfiguracji kodu powody: retryyyable vs non-retryyyable.
- Podpisane haki internetowe, deduplication by PSP reference.
Backoff/zasady
- Wykładnicze backoff z jitter; limit prób i czasu okiennego.
- Inteligentne ponowne badanie: zmiana 3DS/MID/PSP/method; wyróżnienie dla vs APM/otwartych kart bankowych.
- Wyłączniki (lokalne/globalne), półotwarte.
Księga/uzgodnienia
- Kompensowanie transakcji statusami „zawieszonymi”.
- Uzgodnienie T + 0/T + 1: Księga rozliczeniowa banku PSP,
- Zasady Timeout i SLA dotyczące potwierdzenia/haka internetowego.
Operacje/zgodność
- RG/sankcje/PEP/wiek - przed przekwalifikowaniem.
- KYT/velocity на payouts; zasady ręcznego przeglądu.
- Książki startowe i RACI dotyczące incydentów/eskalacji.
15) Ekonomia i ryzyko
Rozważyć efektywną szybkość biorąc pod uwagę 3DS-phia, FX, wartość obciążenia zwrotnego, retray-overhead.
Twardy limit przekłada się na segmenty wysokiego ryzyka, aby nie pokrywać ekspozycji na obciążenie zwrotne i rezerw.
16) Sedno sprawy
Powtórzenia działają, gdy są kontrolowane: idempotencja, jasna macierz kodów rozumu, wykładnicze backoff z jitter, próba ograniczenia, i pakiet z routingu (zmiana PSP/3DS/method). Dodaj wyłącznik, kolejki wypłat i silne pojednania - i konsekwentnie podnosić konwersję bez tworzenia bierze i dziury gotówkowe.