Files
customerTicket/docs/PAYMENT_LINKS.md
T
2026-10-07 13:39:29 +03:30

41 lines
7.0 KiB
Markdown

# لینک موقت پرداخت
لینک `{payment_link}` در پیامک صدور اعلامیه و تأیید نهایی فیش، یک مجوز مستقل است؛ کاربر با آن وارد حساب نمی‌شود. لینک‌های جدید مسیر کوتاه `/p/<token>/` دارند؛ توکن ۱۰ کاراکتری با همان مولد تصادفی امن magic link ساخته و فقط هش آن ذخیره می‌شود. برخورد توکن حداکثر پنج بار در تراکنش مستقل تکرار می‌شود. مسیر قدیمی `/chaharsu/link/<token>/` نیز برای لینک‌های قبلی تا انقضا یا ابطال معتبر است. هر دو مسیر پس از بررسی، به آدرس بدون توکن منتقل می‌شوند.
## محدوده و عمر دسترسی
- اعتبار پیش‌فرض ۷ روز است. `PAYMENT_LINK_TTL_DAYS` قابل تنظیم است و در نبود آن، از `MAGIC_LINK_TTL_DAYS` استفاده می‌شود.
- لینک اعلامیه فقط همان اعلامیه، فیش‌های آن و فیش‌های مستقلی را که از طریق همان لینک ثبت شده‌اند نمایش می‌دهد؛ دسترسی به سایر اعلامیه‌های مشتری یا حساب کامل او نمی‌دهد.
- مشاهده اطلاعات بانکی، کپی تک‌فیلد و کامل، ثبت فیش مرتبط و مستقل، مشاهده وضعیت، دریافت تصویر و اصلاح فیش ردشده بدون ورود ممکن است.
- فیلد «شناسه واریز که با آن پرداخت انجام داده‌اید» هنگام ارسال فیش اختیاری است؛ خالی‌بودن آن مانع ارسال نمی‌شود. هشدار ثبت شناسه در عملیات پرداخت بانکی همچنان نمایش داده می‌شود.
- انقضا، ابطال و غیرفعال‌شدن مشتری در هر درخواست دوباره بررسی می‌شود. CSRF و اعتبارسنجی تصویر، مبلغ و تاریخ همچنان برقرارند.
- دکمه انتخاب تصویر فیش از ورودی `accept="image/*"` بدون `capture` استفاده می‌کند تا انتخاب عکس و اسکرین‌شات از گالری ممکن باشد. نمایش دقیق انتخاب‌گر به مرورگر و سیستم‌عامل گوشی بستگی دارد؛ فرمت و اندازه فایل همچنان در مرورگر و سرور اعتبارسنجی می‌شوند.
- تأیید و رد فقط برای کاربران دارای مجوز و تعیین‌شده در سیاست تأیید باقی می‌ماند. لینک پرداخت مجوز تأیید نمی‌دهد و لینک تیکت مجوز مالی نمی‌دهد.
- اگر حساب دیگری باز باشد، خروج تنها پس از تأیید صریح کاربر انجام می‌شود.
## پیامک و مدیریت
هنگام آماده‌سازی نخستین ارسال پیامک، لینک ساخته می‌شود تا تأخیر صف از زمان اعتبار کم نکند. تلاش‌های مجدد همان لینک و متن ثبت‌شده را استفاده می‌کنند. برای پیامک‌های آماده‌شده قدیمی که هنوز لینک موقت ندارند، فقط URL قبلی جایگزین می‌شود و متن سفارشی حفظ می‌شود؛ پیامکی که قبلاً به گوشی ارسال شده قابل تغییر نیست.
در جزئیات اعلامیه کارشناس، «ساخت لینک تازه پرداخت» لینک قابل کپی می‌سازد؛ این کار پیامک ارسال نمی‌کند. لینک‌های قبلی تا انقضا یا ابطال معتبر می‌مانند. در ادمین، مدل «لینک‌های موقت پرداخت» امکان بررسی زمان‌ها و ابطال لینک را دارد. ایجاد، بازکردن و ابطال در ممیزی مالی ثبت می‌شوند و توکن در ردیف ممیزی ثبت نمی‌شود.
مدل `SMSTemplate` تگ‌های مجاز را بر اساس رویداد تعیین و ذخیره می‌کند. رویدادهای مالی از `{payment_link}` و رویدادهای تیکت مشتری از `{magic_link}` پشتیبانی می‌کنند. صفحه مدیریت پیامک با تغییر رویداد، فهرست تگ‌های مناسب را نشان می‌دهد. مهاجرت داده فقط تگ‌ها را هماهنگ می‌کند و متن‌های سفارشی را تغییر نمی‌دهد.
شماره حساب، شبا و سایر اطلاعات از snapshot اعلامیه نمایش داده می‌شوند. شناسه واریز و تذکر آن قرمز است. امضای مسیر بدون ورود از `SiteBranding.developer_credit_text` خوانده می‌شود.
## کپی اطلاعات و اشتراک صفحه
شناسه واریز در تولید، ذخیره، نمایش و متن کپی بدون صفرهای ابتدایی است؛ رقم کنترل و صفرهای داخلی حفظ می‌شوند. در صورت وجود شناسه، متن کپی کامل صریحاً می‌گوید وارد کردن شناسه واریز هنگام پرداخت الزامی و اجباری است.
زیر دکمه کپی کامل در جزئیات واریز، «کپی لینک کوتاه این صفحه برای ارسال به دیگران» قرار دارد. درخواست POST با CSRF و کنترل مالکیت/محدوده اجرا می‌شود. مشتری واردشده می‌تواند لینک موقت همین اعلامیه را بسازد؛ پیامکی ارسال نمی‌شود. بازدیدکننده ناشناس فقط لینک معتبر دریافت‌شده را کپی می‌کند؛ انقضا یا محدوده دسترسی تمدید نمی‌شود. برای کپی پس از redirect، توکن در نشست سمت سرور نگهداری می‌شود؛ مدل لینک همچنان فقط هش توکن را ذخیره می‌کند. نشست‌های قدیمی فاقد توکن باید لینک دریافتی را دوباره باز کنند. Clipboard ناموجود، کپی دستی قابل انتخاب را نمایش می‌دهد.
## تست دائمی
از WSL و در ریشه پروژه اجرا کنید:
```bash
.venv/Scripts/python.exe -m pytest tests/test_payment_links.py tests/e2e/test_payment_links_e2e.py -q
```
تست‌ها از دیتابیس جداگانه، سرور transactional و مرورگر مدیریت‌شده پروژه استفاده می‌کنند و پیامک واقعی ارسال نمی‌کنند. تست‌های مرورگر در عرض‌های ۳۲۰، ۳۹۰ و ۱۴۴۰ پیکسل اجرا می‌شوند. تست‌های سرور شامل لینک پیامک، تکرار ارسال، عدم ورود به حساب، محدوده مشتری، انقضا و ابطال، CSRF، ارسال فیش مرتبط و مستقل، اصلاح و کنترل تصویرند.