diff --git a/database/migrations/2026_07_26_000001_expose_gateway_settings_in_admin_panel.php b/database/migrations/2026_07_26_000001_expose_gateway_settings_in_admin_panel.php new file mode 100644 index 0000000..1725594 --- /dev/null +++ b/database/migrations/2026_07_26_000001_expose_gateway_settings_in_admin_panel.php @@ -0,0 +1,117 @@ + 'wallet_payment_provider', + 'value' => 'none', + 'title_fa' => 'نوع درگاه شارژ آنلاین', + 'type' => 'select', + 'description' => 'none=خاموش، montify=پارتنر Montify|none,montify', + ], + [ + 'key' => 'external_payment_enabled', + 'value' => 'false', + 'title_fa' => 'فعال‌سازی شارژ آنلاین', + 'type' => 'switch', + 'description' => 'روشن: در صورت پیکربندی کامل، دکمه پرداخت آنلاین در اپ نمایش داده می‌شود. خاموش: فقط واریز دستی.', + ], + [ + 'key' => 'external_payment_base_url', + 'value' => '', + 'title_fa' => 'آدرس API درگاه (BASE_URL)', + 'type' => 'text', + 'description' => 'آدرس پایه API Montify بدون اسلش انتهایی، مثلاً https://node.example.com', + ], + [ + 'key' => 'external_payment_client_id', + 'value' => '', + 'title_fa' => 'شناسه کلاینت (client_id)', + 'type' => 'text', + 'description' => 'client_id دریافتی از ادمین Montify', + ], + [ + 'key' => 'external_payment_client_secret', + 'value' => '', + 'title_fa' => 'رمز کلاینت (client_secret)', + 'type' => 'text', + 'description' => 'client_secret دریافتی از ادمین Montify — فقط روی سرور بماند', + ], + [ + 'key' => 'external_payment_gateway', + 'value' => 'zarinpall', + 'title_fa' => 'نام درگاه داخل Montify', + 'type' => 'select', + 'description' => 'یکی از درگاه‌های فعال در Montify|zarinpall,zibal,payping,sepal', + ], + [ + 'key' => 'external_payment_return_url', + 'value' => '', + 'title_fa' => 'آدرس برگشت (return_url)', + 'type' => 'text', + 'description' => 'اختیاری. خالی = پیش‌فرض سرور /customer/wallet/payment/return/montify', + ], + [ + 'key' => 'external_payment_webhook_url', + 'value' => '', + 'title_fa' => 'آدرس Webhook', + 'type' => 'text', + 'description' => 'اختیاری. خالی = پیش‌فرض سرور /customer/wallet/payment/webhook/montify', + ], + ]; + + foreach ($rows as $row) { + $existing = DB::table('settings')->where('key', $row['key'])->first(); + if ($existing) { + DB::table('settings')->where('key', $row['key'])->update([ + 'can_edit' => 1, + 'is_active' => 1, + 'title_fa' => $row['title_fa'], + 'type' => $row['type'], + 'description' => $row['description'], + 'updated_at' => $now, + ]); + continue; + } + + DB::table('settings')->insert([ + 'key' => $row['key'], + 'value' => $row['value'], + 'title_fa' => $row['title_fa'], + 'type' => $row['type'], + 'can_edit' => 1, + 'is_active' => 1, + 'description' => $row['description'], + 'created_at' => $now, + 'updated_at' => $now, + ]); + } + } + + public function down(): void + { + DB::table('settings')->whereIn('key', [ + 'wallet_payment_provider', + 'external_payment_base_url', + 'external_payment_client_id', + 'external_payment_client_secret', + 'external_payment_gateway', + 'external_payment_return_url', + 'external_payment_webhook_url', + ])->update([ + 'can_edit' => 0, + 'updated_at' => now(), + ]); + } +}; diff --git a/docs/WALLET_ONLINE_PAYMENT.md b/docs/WALLET_ONLINE_PAYMENT.md index 9a7d7bb..df21e65 100644 --- a/docs/WALLET_ONLINE_PAYMENT.md +++ b/docs/WALLET_ONLINE_PAYMENT.md @@ -75,19 +75,19 @@ Montify → payment_url → درگاه بانکی ## ۴. Settings (جدول `settings`) -پیکربندی فقط از پنل ادمین / دیپلوی. گروه UI: **درگاه خارجی (Montify)**. +پیکربندی از پنل ادمین → گروه **تنظیمات درگاه** (`can_edit=1`). | کلید | نوع | توضیح | |------|-----|--------| -| `wallet_payment_provider` | select | `none` = خاموش، `montify` = پارتنر Montify. برای درگاه‌های بعدی همین فیلد گسترش می‌یابد. | -| `external_payment_enabled` | switch | سازگاری قدیمی؛ اگر `true` باشد و provider خالی باشد، مثل `montify` رفتار می‌کند. ترجیحاً از `wallet_payment_provider` استفاده کنید. | +| `wallet_payment_provider` | select | `none` = خاموش، `montify` = پارتنر Montify | +| `external_payment_enabled` | switch | فعال‌سازی شارژ آنلاین (همراه با پیکربندی کامل) | | `external_payment_base_url` | text | BASE_URL API Montify (بدون اسلش انتهایی) | | `external_payment_client_id` | text | `client_id` پارتنر | -| `external_payment_client_secret` | text | `client_secret` — محرمانه | -| `external_payment_gateway` | select | درگاه داخل Montify: `zarinpall` / `zibal` / `payping` / `sepal` | +| `external_payment_client_secret` | text | `client_secret` — محرمانه، فقط سرور | +| `external_payment_gateway` | select | `zarinpall` / `zibal` / `payping` / `sepal` | | `external_payment_return_url` | text | اختیاری؛ خالی = پیش‌فرض سرور | | `external_payment_webhook_url` | text | اختیاری؛ خالی = پیش‌فرض سرور | -| `min_deposit` | price | حداقل مبلغ واریز (مشترک با واریز دستی) | +| `min_deposit` | price | حداقل مبلغ واریز (گروه کارمزد و محدودیت‌ها) | ### مقادیر پیش‌فرض URL وقتی فیلد خالی است @@ -100,6 +100,7 @@ Montify → payment_url → درگاه بانکی - `2026_07_24_000001_add_external_payment_settings.php` - `2026_07_24_000002_add_wallet_payment_provider_setting.php` +- `2026_07_26_000001_expose_gateway_settings_in_admin_panel.php` ```bash php artisan migrate