# راهنمای درگاه پرداخت DigiPay (UPG)

## سناریوهای پشتیبانی‌شده
این پیاده‌سازی طبق مستند UPG برای دو ابزار زیر آماده شده است:

- **IPG** برای پرداخت نقدی شاپرکی (preferredGateway = 2، type = 11)
- **CPG** برای پرداخت اقساطی/اعتباری کیف پول اقساطی (type = 5)

## تنظیمات دسترسی
برای اتصال صحیح به UPG باید علاوه بر نام کاربری و رمز عبور، `client_id` و `client_secret` را هم تنظیم کنید.

1. **تنظیم سراسری** در فایل `.env`:
   - `DIGIPAY_USERNAME`
   - `DIGIPAY_PASSWORD`
   - `DIGIPAY_CLIENT_ID`
   - `DIGIPAY_CLIENT_SECRET`
   - `DIGIPAY_TOKEN_URL` (پیش‌فرض: `https://api.mydigipay.com/digipay/api/oauth/token`)
   - `DIGIPAY_TICKET_URL` (پیش‌فرض: `https://api.mydigipay.com/digipay/api/tickets/business`)
   - `DIGIPAY_VERIFY_URL` (پیش‌فرض: `https://api.mydigipay.com/digipay/api/purchases/verify`)
   - `DIGIPAY_TICKET_TYPE` (پیش‌فرض: `11`)
   - `DIGIPAY_VERSION` (پیش‌فرض: `2022-02-02`)
   - `DIGIPAY_AGENT` (پیش‌فرض: `WEB`)
   - `DIGIPAY_DEFAULT_SELLER_ID` (پیش‌فرض: `mehr-shop`)
   - `DIGIPAY_DEFAULT_SUPPLIER_ID` (پیش‌فرض: `mehr-shop`)
   - `DIGIPAY_DEFAULT_PRODUCT_TYPE` (پیش‌فرض: `2`)

2. **تنظیم اختصاصی هر درگاه** از پنل ادمین در بخش «شیوه پرداخت»:
   - `gateway_username`
   - `gateway_password`
   - `gateway_driver` (مقدار: `digipay_upg`)
   - `gateway_payment_mode` (`IPG` برای نقدی یا `CPG` برای اقساطی)
   - `gateway_config` (اختیاری برای override):
     - `token_url`
     - `init_url`
     - `verify_url`
     - `client_id`
     - `client_secret`
     - `ticket_type`
     - `digipay_version`
     - `agent`
     - `preferred_gateway`
     - `default_seller_id`
     - `default_supplier_id`
     - `default_product_type`

> اگر در فیلدهای اختصاصی چیزی وارد نشود، مقادیر `.env` استفاده می‌شود.

## Seeder
برای ساخت ۲ درگاه اولیه (نقدی شاپرکی و اقساطی CPG) اجرا کنید:

```bash
php artisan db:seed --class=PaymentMethodSeeder
```

## جریان پرداخت
1. قبل از ایجاد تیکت، سرویس `oauth/token` با `Basic client_id:client_secret` فراخوانی می‌شود.
2. `access_token` در Header با فرمت `Bearer` برای ایجاد تیکت خرید استفاده می‌شود.
3. در حالت **IPG**، تیکت با `preferredGateway=2` ساخته می‌شود.
4. در حالت **CPG**،‌ بدنه تیکت شامل `basketDetailsDto` ارسال می‌شود.
5. پس از بازگشت کاربر، در صورت `result=SUCCESS` سرویس `/digipay/api/purchases/verify?type=<TYPE>` فراخوانی می‌شود.
6. در صورت موفقیت verify (کد `result.status = 0`) وضعیت سفارش تایید می‌شود.
