Ödemelerde tekrarlama ve geri çekilme
Ödemelerde tekrarlama 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) # по вероятности 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'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 tepme/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.