تکرار و عقب نشینی در پرداخت
تکرار و عقب نشینی در پرداخت
1) چرا تکرار مورد نیاز است
تبدیل: شکست نرم (زمان، خطاهای 3DS، شکست شبکه) اغلب در تکرار بهبود: + 2-7 pp به نرخ Auth.
استحکام: شکست PSP/ACS/بانک محلی توسط retras با مسیرهای جایگزین صاف.
تجربه پخش: تکرار به درستی ساخته شده پنهان «سر و صدا» از زیرساخت بدون اتهام دو برابر است.
2) اصول اساسی
1. Idempotency در سطح «قصد پرداخت» (PI): یک عملیات = یک «idempotency _ key» ؛ هر گونه توسل شرایط پولی را تغییر نمی دهد.
2. تفکیک خطا:- کاهش شدید (به عنوان مثال 'افتخار نیست' با یک سیاست صادر کننده سخت, 'بودجه کافی') → معمولا حق دور زدن نیست.
- افت نرم/فنی (اتمام وقت، «صادرکننده در دسترس نیست»، «دوباره امتحان کنید») → مجاز به بازپرداخت.
- 3. Backoff + تلاش محدود: به صورت نمایی افزایش تاخیر، اضافه کردن jitter و محدودیت تجاوز نمی کند (معمولا 2-3 تلاش).
- 4. مسیریابی بسته نرم افزاری: retray نه تنها «تکرار همان PSP» است، بلکه تغییر در حالت/روش PSP/MID/3DS است.
- 5. قابلیت مشاهده: هر هاپ در مجله مسیر (PSP، دلیل، تاخیر، حالت 3DS، هزینه، نتیجه) ثبت شده است.
3) طبقه بندی خطا برای تصمیم عقب نشینی
4) استراتژی های عقب نشینی (تمرین)
4. 1 عقب نشینی نمایشی با لرزش (توصیه می شود)
База: 'delay _ n = min (پایه 2 ^ n, max_delay)'
Jitter: 'delay = rand (0, delay_n)' - در صورت تکرار چندین درخواست به طور همزمان، ازدحام را کاهش می دهد.
پارامترهای نمونه عبارتند از: «base = 200-500 ms»، «max _ delay = 5-10 s»، «n≤2 -3».
4. 2 عقب نشینی خطی
ساده، اما بدتر با «ناآرامی» در شبکه. پایین تر از نمایش + jitter.
4. 3 سیاست اتمام وقت
اتمام وقت مشتری (مال شما) ≤ PSP SLA (به عنوان مثال، 3-5 ثانیه)، در غیر این صورت خطر تکراری/یخ افزایش می یابد.
جداگانه تنظیم زمان انتظار برای webhook/تایید: اگر تایید → آشتی جبران (دفتر کل/PSP) آمده است.
5) idempotence و حفاظت در برابر طول می کشد
قصد پرداخت (PI) وضعیت، مبلغ، روش، «idempotency _ key»، تاریخچه مسیر را ذخیره می کند.
هر هاپ و تلاش مجدد از همان کلید استفاده می کنند.
جبران معاملات: زمانی که از همگام سازی (تایید در PSP، و شما یک وقفه) - «آشتی کشش» + تنظیم دفتر.
حذف مجدد مجوز هنگام تحویل وب سایت: بررسی 'transaction _ id '/' مرجع PSP' برای منحصر به فرد بودن.
6) 3DS/SCA و تکرارها
کاهش نرم پس از اصطکاک → retray با چالش.
ACS timeout/unavailable → exponential backoff، سپس یک کانال جایگزین (بانکداری باز/APM) یا یک PSP دیگر.
با تخریب جرم ACS - قطع کننده مدار، «نرخ چالش» رشد، محدودیت زمانی در مقادیر.
7) نمایندگان APM/بانکداری باز
بانکداری باز/ریل فوری (SEPA از طریق مسنجر/FPS/PIX/UPI):- Retrays محدود هستند: بررسی idempotence در طرف ارائه دهنده و وضعیت در تاخیر webhook 'ax.
- با وضعیت نامحدود - رای گیری با عقب نشینی و آشتی سخت.
- کوپن/پول نقد: بازپرداخت به عنوان «معامله آنلاین» اعمال نمی شود، اما کنترل تاریخ و «تازه کردن وضعیت» اعمال می شود.
8) پرداخت: تکرار و صف
خرابی فنی بانک/PSP → پرداخت های صف با تخلیه برگشتی.
شکست KYT/سرعت → نه retrayem، انتقال به بررسی دستی.
اولویت بندی صف: VIP/مقادیر کوچک/سن برنامه ؛ SLA و مهلت افزایش خودکار.
ریل های جایگزین (RTP/FPS/SEPA Instant/Pix) در مرحله دوم عقب نشینی.
9) قطع کننده مدار و retrai
محلی (در PSP/MID/BIN): هنگامی که اشتباهات سنبله، → توقف retrays در این مسیر، تغییر به یک جایگزین.
جهانی (در هر روش/منطقه): تخریب سیستمیک → روش را غیرفعال کنید، ما APM/بانکداری باز را ارائه می دهیم.
نیمه باز: بازگشت بخشی از ترافیک (1-5٪) برای بررسی بازیابی قبل از بازگشت کامل.
10) شبه کد استراتژی 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 ها و اهداف
مصوبات افزایشی از Reries: + 2-7 pp به تبدیل پایه.
میانگین تلاش مجدد در هر تایید Tx: 1. 2–1. 5 (نگه داشتن زیر 1. 7).
میزان موفقیت مجدد (نرم/فناوری): ≥ 25-40٪.
نرخ تکراری: 0 با idemotency صحیح.
P95 تاخیر (از جمله retrays): <7 ثانیه تا پاسخ نهایی.
SLA پرداخت (سهم فوری): ≥ 70٪ از چک های آسان، آستانه هدف عقب افتاده.
12) کتاب های حادثه
A. مدت زمان جرم در PSP-A
1. باز کردن قطع کننده محلی برای PSP-A.
2. دوباره به PSP-B/APM منتقل می شود.
3. عقب نشینی نمایشی با لرزش، محدود کردن 2-3 تلاش.
4. قناری نیمه باز پس از 10-15 دقیقه.
ب) تخریب ACS/3DS
1. تشخیص توسط رشد «کاهش نرم»، وقفه.
2. افزایش میزان چالش ؛ بخشی از ترافیک → بانکداری باز.
3. چک های سنگین را کنار بگذارید، محدودیت های سرعت را روشن کنید.
C. تاخیر در پرداخت
1. انتقال به صف، اولویت بندی VIP/مقادیر کوچک.
2. تغییر به ریل های جایگزین (RTP/FPS/SEPA Instant/Pix).
3. ارتباط با بازیکنان + افزایش خودکار.
13) قابلیت مشاهده و داده ها
مجله مسیر: PSP/MID، BIN/صادر کننده، دلیل، تاخیر، 3DS-режим، زنجیره مجدد، итог، هزینه.
داشبورد: نرخ Auth (توسط بانک)، موفقیت مجدد، تلاش Avg، مخلوط کاهش، تاخیر p95، عمق صف پرداخت.
هشدارها: spikes by reason codes, افزایش در تلاش/تاخیر, سرریز از صف های خروجی.
14) چک لیست پیاده سازی
معماری/داده ها
- قصد پرداخت + 'idempotency _ key' на все هاپ.
- ماتریس پیکربندی کد دلیل: قابل جمع شدن در مقابل غیر قابل جمع شدن.
- امضا webhooks، deduplication توسط PSP مرجع.
عقب نشینی/قوانین
- عقب نشینی نمایشی با لرزش ؛ محدودیت تلاش و زمان پنجره.
- تلاش مجدد هوشمند: تغییر 3DS/MID/PSP/method ؛ تمایز در مقابل APM/کارت های بانکی باز.
- قطع کننده مدار (محلی/جهانی)، نیمه باز قناری.
دفتر کل/آشتی
- جبران معاملات با وضعیت «معلق».
- T + 0/T + 1 آشتی: PSP ↔ بانک ↔ دفتر کل پول.
- اتمام وقت و سیاست SLA در تایید/webhook.
عملیات/انطباق
- RG/تحریم/PEP/سن - قبل از retrays.
- KYT/سرعت پرداخت на ؛ قوانین بررسی دستی.
- Runbooks و RACI برای حوادث/تشدید.
15) اقتصاد و ریسک
در نظر گرفتن نرخ موثر با توجه به 3DS-phia، FX، chargeback-value، retray-overhead.
محدودیت سخت به بخش های با خطر بالا باز می گردد تا از قرار گرفتن در معرض بازپرداخت و ذخایر جلوگیری شود.
16) خط پایین
تکرارها زمانی کار می کنند که قابل کنترل باشند: idempotency، یک ماتریس روشن از کدهای منطقی، عقب نشینی نمایشی با jitter، محدودیت تلاش و یک بسته نرم افزاری با مسیریابی (تغییر PSP/3DS/method). اضافه کردن مدار شکن، پرداخت صف و آشتی قوی - و شما به طور مداوم افزایش تبدیل بدون ایجاد طول می کشد و سوراخ پول نقد.