feat(payment): implement expiration handling for appointment payments
This commit is contained in:
@@ -226,6 +226,7 @@ Initiate payment for an appointment. Returns a redirect URL to the payment gatew
|
||||
|
||||
### رفتار
|
||||
- نوبت یافت نشد → `302` به `return?status=notfound` (یا `422` اگر return نبود/نامجاز).
|
||||
- **نوبت منقضی** (`status=expired` یا گذشتنِ پنجرهٔ ۱۵ دقیقهای `expires_at`/زمان اسلات) → نوبت `expired` و پرداخت pending آن `canceled` میشود و `302` `return?status=expired` (پیام «مهلت پرداخت به پایان رسید»).
|
||||
- نوبت قابلپرداخت نیست (نه `pending`/`confirmed`) → `302` `return?status=invalid`.
|
||||
- درگاه نامعتبر/غیرفعال → `302` `return?status=gateway`.
|
||||
- موفق → ساخت/ادامهٔ `Payment` pending (بدون pending تکراری via `findPendingByAppointment`) و `302` به بانک (یا فرم auto-submit POST برای ملت).
|
||||
@@ -248,6 +249,7 @@ Initiate payment for an appointment. Returns a redirect URL to the payment gatew
|
||||
|
||||
### رفتار
|
||||
- اگر پرداخت یافت نشد → `404 { success:false, message:"payment not found" }`.
|
||||
- **پرداختِ نوبت با نوبتِ منقضی** (نوع `appointment` و نوبت `expired` یا گذشتنِ پنجرهٔ ۱۵ دقیقهای): نوبت `expired` و پرداخت pending آن `canceled` میشود و صفحهٔ نتیجهٔ `expired` («مهلت پرداخت به پایان رسید») رندر میشود — به بانک نمیرود.
|
||||
- اگر وضعیت پرداخت `pending` نباشد → `302` به `frontend_address` با نتیجه (جلوگیری از پرداخت تکراری).
|
||||
- درگاه resolve میشود (در حالت تست → mock)؛ اگر نامعتبر بود یا circuit breaker باز بود → پرداخت `failed` و `302` به `frontend_address`.
|
||||
- `gateway->initiate(...)` صدا زده میشود (ارتباط با بانک). در صورت شکست → `failed` و `302` به `frontend_address`.
|
||||
|
||||
Reference in New Issue
Block a user