Ödemelerde tekrarlama ve geri çekilme
Ödemelerde tekrarlar ve geri çekilme
1) Neden tekrarlara ihtiyaç duyulur
Dönüştürme: Yumuşak arızalar (zaman aşımları, 3DS hataları, ağ arızaları) genellikle tekrar tekrar kurtarılır: + 2-7 pp - Auth Rate.
Sağlamlık: Yerel PSP/ACS/banka arızaları alternatif yollarla retras ile düzeltilir.
Oyuncu deneyimi: Doğru şekilde oluşturulmuş tekrarlar, altyapının "gürültüsünü" çift ücret ödemeden gizler.
2) Temel ilkeler
1. "Ödeme amacı" (PI) düzeyinde idempotency: bir işlem = bir 'idempotency _ key'; Herhangi bir başvuru parasal durumu değiştirmez.
2. Hata ayrımı:- Sert düşüş (örn. Sıkı bir ihraççı politikası ile 'onurlandırmayın', 'Yetersiz fonlar') - genellikle hemen retrayem değil.
- Yumuşak düşüş/teknik (zaman aşımı, 'Veren kullanılamıyor', 'Tekrar deneyin') - izin verilen yeniden oynatma.
- 3. Backoff + limit girişimleri: gecikmeyi katlanarak artırır, jitter ekler ve sınırları aşmaz (genellikle 2-3 deneme).
- 4. Paket yönlendirme: Retray sadece "aynı PSP'nin tekrarı'değil, aynı zamanda PSP/MID/3DS modunda/yönteminde bir değişikliktir.
- 5. Gözlemlenebilirlik: Her atlama Route Journal'a kaydedilir (PSP, sebep, gecikme, 3DS modu, ücret, sonuç).
3) Geri çekilme kararı için hata sınıflandırması
4) Geri dönüş stratejileri (uygulama)
4. 1 Jitter ile üstel geri dönüş (önerilir)
База: 'delay _ n = min (temel 2 ^ n, max_delay)'
Jitter: 'delay = rand (0, delay_n)' - birçok istek aynı anda tekrarlandığında izdihamları azaltır.
Tipik parametreler 'base = 200-500 ms', 'max _ delay = 5-10 s', 'n≤2 -3'.
4. 2 Doğrusal geri alma
Basit, ama ağdaki "huzursuzluk'ile daha da kötü. Üstel + jitter'den aşağı.
4. 3 Zaman aşımı politikası
İstemci zaman aşımı (sizin) ≤ PSP SLA (örneğin, 3-5 s), aksi takdirde çoğaltma/donma riski artar.
Webhook/confirm için bekleme süresini ayrı ayrı ayarlayın: onay gelmezse - telafi edici mutabakat (defter/PSP).
5) İdempotans ve almalara karşı koruma
Payment Intent (PI) durumu, miktarı, yöntemi, 'idempotency _ key', rota geçmişini saklar.
Her atlama ve yeniden deneme aynı anahtarı kullanır.
İşlemleri telafi etmek: senkronize olmadığında (PSP'de onaylayın ve zaman aşımınız var) - "uzlaştırma-çekme" + defter ayarı.
Webhook'u yeniden teslim ederken yeniden yetkilendirmeyi hariç tutun: benzersizlik için 'transaction _ id'/' PSP reference' seçeneğini işaretleyin.
6) 3DS/SCA ve tekrarlar
Sürtünmesiz sonra yumuşak düşüş - meydan okuma ile yeniden.
ACS zaman aşımı/kullanılamıyor - üstel geri kapanma, daha sonra alternatif bir kanal (açık bankacılık/APM) veya başka bir PSP.
ACS kitle bozulması ile - devre kesici, büyüme 'meydan okuma oranı', miktarları zaman sınırları.
7) APM/açık bankacılık için temsilciler
Açık bankacılık/anlık raylar (SEPA Anında/FPS/Pix/UPI):- Retrays sınırlıdır: sağlayıcı tarafında idempotence ve gecikmeli webhook 'ax durumlarını kontrol edin.
- Belirsiz bir statüyle - geri çekilme ve katı mutabakatlarla oylama.
- Kuponlar/nakit: Geri ödemeler "çevrimiçi işlem" için geçerli değildir, ancak son tarih kontrolü ve "durum yenileme" geçerlidir.
8) Ödemeler: tekrarlar ve kuyruklar
Banka/PSP teknik arıza - backoff drenaj ile sıralı ödemeler.
KYT/hız başarısız - retrayem değil, manuel kontrole aktarın.
Sıra önceliklendirme: VIP/küçük miktarlar/uygulama yaşı; SLA ve otomatik tırmanma son tarihleri.
İkinci geri çekilen adımda alternatif raylar (RTP/FPS/SEPA Instant/Pix).
9) Devre kesici ve retrai
Yerel (PSP/MID/BIN'de): hatalar arttığında, bu rotadaki geri çekilmeleri durdurun, alternatif bir tanesine geçin.
Global (yöntem/bölge başına): sistemik bozulma - yöntemi devre dışı bırakın, APM/açık bankacılık sunuyoruz.
Yarı açık: Tam dönüşten önce kurtarmayı kontrol etmek için trafiğin bir kısmını (%1-5) geri döndürün.
10) Retray stratejisinin sahte kodu
python def pay_with_retries(pi):
ensure_idempotency(pi. key)
if not compliance_pass(pi): return REJECT
routes = rank_candidates (pi) # by probability 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 go to the next route (PSP-B/APM/open banking)
return DECLINED
11) KPI'lar ve hedefler
Yeniden Yapılanmalardan Artan Onaylar: + 2-7 pp'den temel dönüşüme.
Onaylanmış Tx başına Avg Yeniden Deneme Girişimleri: 1. 2–1. 5 (1'in altında tutun. 7).
Yeniden Deneme Başarı Oranı (yumuşak/teknik): ≥ %25-40.
Duplicate Rate: Doğru idempotency ile 0.
P95 Gecikme (retrays dahil): Son yanıta kadar <7 s.
Ödeme SLA (anlık paylaşım): Kolay kontrollerin ≥ %70'i, gecikmiş <hedef eşiği.
12) Olay oyun kitapları
A. PSP-A'da toplu zaman aşımları
1. PSP-A için yerel kırıcı açın
2. PSP-B/APM'ye yeniden tahsis edin.
3. Jitter ile üstel geri dönüş, 2-3 denemeyi sınırlayın.
4. Kanarya 10-15 dakika sonra yarı açık.
B. ACS/3DS bozulması
1. Büyüme 'yumuşak düşüş'ile algılama, zaman aşımları.
2. Meydan okuma oranını artırmak; trafiğin bir kısmı - açık bankacılık.
3. Ağır kontrolleri bir kenara bırakın, hız limitlerini açın.
C. Ödeme gecikmeleri
1. Sıraya transfer, VIP/küçük miktarların önceliklendirilmesi.
2. Alternatif raylara yeniden yayın (RTP/FPS/SEPA Instant/Pix).
3. Oyunculara iletişim + otomatik yükseltme.
13) Gözlemlenebilirlik ve veriler
Rota Günlüğü: PSP/MID, BIN/ihraççı, sebep, gecikme, 3DS-режим, yeniden deneme zinciri, итог, ücret.
Panolar: Auth Oranı (banka tarafından), Yeniden Deneme Başarısı, Avg Girişimleri, Reddetme Karması, p95 gecikme süresi, Ödeme Kuyruğu Derinliği.
Uyarılar: sebep kodlarına göre ani artışlar, girişimlerde/gecikmede artış, çıktı kuyruklarının taşması.
14) Uygulama kontrol listeleri
Mimari/Veri
- Ödeme Niyeti + 'idempotency _ key' на все şerbetçiotu.
- Sebep kodu yapılandırma matrisi: geri alınabilir ve geri alınamaz.
- İmzalı webhook'lar, PSP referansıyla veri tekilleştirme.
Geri alma/kurallar
- Jitter ile üstel geri dönüş; Denemelerin sınırı ve pencere süresi.
- Akıllı yeniden deneme: 3DS/MID/PSP/method değişikliği; APM/açık bankacılık kartları için ayrım.
- Devre kesiciler (yerel/küresel), yarı açık kanaryalar.
Defter/mutabakatlar
- "Askıya alınmış" durumlarla işlemlerin telafi edilmesi.
- Onay/webhook zaman aşımı ve SLA politikası.
- RG/yaptırımlar/PEP/yaş - retrays önce.
- KYT/hız на ödemeleri; Manuel inceleme kuralları.
- Olaylar/tırmanmalar için Runbooks ve RACI.
[T + 0/T + 1 mutabakatı: PSP ↔ banka ↔ para defteri.
Operasyonlar/Uyumluluk
15) Ekonomi ve risk
3DS-phia, FX, ters ibraz değeri, geri ödeme yükünü dikkate alarak efektif oranı göz önünde bulundurun.
Sabit limit, ters ibraz maruziyetini ve rezervleri overclock etmemek için yüksek riskli segmentlere geri çekilir.
16) Alt satır
Tekrarlar kontrol edilebilir olduklarında çalışır: idempotency, mantık kodlarının açık bir matrisi, jitter ile üstel geri çekilme, kısıtlama girişimi ve yönlendirme (PSP/3DS/method değişikliği) ile bir paket. Devre kesici, ödeme kuyrukları ve güçlü mutabakatlar ekleyin - ve alımlar ve nakit delikleri oluşturmadan dönüşümü sürekli olarak yükseltin.