# اصلاحات این دور — راهنمای نصب

## ۱. باگ واقعی زرین‌پال — پیدا و اصلاح شد

طبق مستندات رسمی زرین‌پال (`next.zarinpal.com/paymentGateway/sandbox.html`)،
آدرس Production باید `api.zarinpal.com` باشد. نسخه‌ی قبلی کد اشتباهاً
`payment.zarinpal.com` داشت که باعث می‌شد **در حالت غیر-sandbox هیچ‌وقت
متصل نشود**. این اصلاح شد.

برای PayPal، مشکل مشخصی در آدرس‌ها پیدا نشد؛ اما گزارش خطا را در هر دو
درگاه دقیق‌تر کردم — از این به بعد اگر باز هم مشکلی بود، پیام خطای واقعی
(نه فقط «متصل نشد») نمایش داده می‌شود که دقیقاً می‌گوید مشکل کجاست
(مثلاً Client ID اشتباه، Merchant ID نامعتبر، یا قطعی شبکه).

**اگر بعد از این اصلاح باز هم PayPal/زرین‌پال وصل نشد**، پیام خطای دقیق
جدید را برایم بفرستید — چون حالا واقعاً علت را می‌گوید.

## ۲. نمایش فقط روش‌های پرداخت فعال

صفحه‌ی `renew.html` قبلاً همیشه هر سه روش (زرین‌پال، PayPal، واریز بانکی)
را نشان می‌داد، حتی اگر در تنظیمات غیرفعال بودند. حالا یک endpoint جدید
(`api/active-gateways-public.php`) وضعیت واقعی را می‌خواند و فقط
روش‌های فعال (به‌علاوه واریز بانکی که همیشه در دسترس است) نمایش داده
می‌شوند.

## ۳. اصلاح ارز پلن‌ها (USD → تومان)

پیش‌فرض ارز پلن‌های جدید از `USD` به `IRT` (تومان) تغییر کرد. برای
پلن‌هایی که از قبل با برچسب اشتباه `USD` ساخته شده‌اند، این را یک‌بار در
phpMyAdmin اجرا کنید (فقط اگر مطمئن هستید قیمت‌هایشان واقعاً تومان است):

```sql
UPDATE plans SET currency = 'IRT' WHERE currency = 'USD';
```
(همین دستور در فایل `sql/fix-currency-to-irt.sql` هم هست)

## ۴. ایمیل به مدیر — بعد از ثبت فیش یا پرداخت موفق

از دیتابیس شما، ایمیل همان حسابی که با `role = 'super'` ساخته شده (اولین
سوپرادمین) به‌عنوان ایمیل مدیر استفاده می‌شود — نیازی به تنظیم اضافه نیست.

⚠️ **مهم:** این سیستم از تابع بومی `mail()` پی‌اچ‌پی استفاده می‌کند که
روی اکثر هاست‌های cPanel بدون تنظیم اضافه کار می‌کند، اما ممکن است در
Spam بیفتد (نرخ تحویل پایین‌تر از SMTP واقعی). اگر بعداً ایمیل‌ها به
مشکل خوردند، باید به یک سرویس SMTP واقعی (Gmail SMTP، Mailgun، یا مشابه
با کتابخانه‌ی PHPMailer) مهاجرت کنید.

## ۵. ایمیل یادآوری انقضا به مشتری — نیاز به یک قدم دستی در cPanel

این بخش با یک Cron Job کار می‌کند (کد آن خودکار اجرا نمی‌شود مگر
زمان‌بندی کنید):

### قدم ۱: اجرای migration جدید
فایل `sql/expiry-reminders-migration.sql` را در phpMyAdmin اجرا کنید.

### قدم ۲: تنظیم Cron Job در cPanel
وارد cPanel → **Cron Jobs** شوید:
- **Common Settings:** Once Per Day (یا زمان دلخواه، پیشنهاد: ساعت ۹ صبح)
- **Command:**
```bash
php /home/YOUR_CPANEL_USERNAME/public_html/license-server/api/payments/send-expiry-reminders.php
```
(مسیر واقعی را با مسیر نصب خودتان جایگزین کنید — از File Manager روی
فایل `config.php` کلیک راست کنید و مسیر کامل را ببینید)

این اسکریپت هر روز چک می‌کند کدام لایسنس‌ها ۷، ۳، یا ۱ روز دیگر منقضی
می‌شوند و به مشتری ایمیل یادآوری (با لینک مستقیم به صفحه‌ی تمدید) می‌فرستد.
هر ترکیب لایسنس+بازه فقط یک‌بار ایمیل می‌گیرد (جلوگیری از تکرار).

## فایل‌هایی که باید جایگزین/اضافه کنید

**جایگزین کنید:**
- `api/payments/zarinpal.php`
- `api/payments/paypal.php`
- `api/payments/upload-receipt.php`
- `api/payments/zarinpal-callback.php`
- `api/payments/paypal-callback.php`
- `api/admin.php`
- `api/config.php` ⚠️ **توجه: این فایل شامل اطلاعات دیتابیس واقعی شماست -
  فقط بخش جدید `email` را از نسخه‌ی جدید کپی کنید، بقیه‌ی فایل (اطلاعات
  دیتابیس) را از فایل فعلی خودتان نگه دارید، مگر اینکه مطمئن باشید.**
- `renew.html`

**جدید اضافه کنید:**
- `api/payments/mailer.php`
- `api/payments/send-expiry-reminders.php`
- `api/active-gateways-public.php`

**اجرا کنید (phpMyAdmin):**
- `sql/expiry-reminders-migration.sql`
- `sql/fix-currency-to-irt.sql` (اختیاری، فقط اگر پلن‌های قدیمی دارید)

**تنظیم کنید (cPanel):**
- Cron Job برای `send-expiry-reminders.php`
