Fix some for sign body to montify and not get 401 error|
This commit is contained in:
@@ -130,9 +130,18 @@ Auth مشتری: `auth:customer` + `customer.active` (بهجز return/webhook
|
||||
|-----|------|------|-----|
|
||||
| GET | `/wallet/payment/options` | مشتری | `{ online_enabled }` |
|
||||
| POST | `/wallet/payment/initiate` | مشتری | Body: `{ value }` (ریال) → `{ payment_url }` |
|
||||
| POST | `/wallet/payment/verify-return` | مشتری | verify امضای بازگشت + شارژ |
|
||||
| GET | `/wallet/payment/status` | مشتری | `?reference_id=WD-123` → استعلام مستقیم از درگاه |
|
||||
| GET | `/wallet/payment/return/{provider}` | عمومی | برگشت مرورگر؛ verify + گزارش |
|
||||
| POST | `/wallet/payment/webhook/{provider}` | عمومی (HMAC) | شارژ کیف |
|
||||
|
||||
### verify-return و status
|
||||
|
||||
- فرانت **همه** پارامترهای query صفحه بازگشت را بدون فیلتر میفرستد؛ حذف حتی یک پارامتر امضا را میشکند.
|
||||
- سرور امضا را با چند قالب payload میسنجد (مقادیر string، بدون مقادیر خالی، `amount`/`timestamp` عددی) تا اختلافهای جزئی پیادهسازی پارتنر باعث رد شدن پرداخت واقعی نشود. دستکاری مقادیر همچنان رد میشود.
|
||||
- اگر امضا نخواند یا نتیجه هنوز قطعی نباشد، سرور `GET /external-payment/status` را از Montify میپرسد (`SupportsStatusQuery`) و در صورت `paid` کیف را idempotent شارژ میکند. redirect مرورگر هیچوقت منبع حقیقت نیست.
|
||||
- مالکیت `Withdraw` قبل از هر پاسخی با کاربر لاگینشده تطبیق داده میشود.
|
||||
|
||||
### سازگاری قدیمی
|
||||
|
||||
| مسیر قدیمی | معادل |
|
||||
@@ -263,6 +272,8 @@ app/Http/Controllers/pay/
|
||||
| `مشکل در ارتباط با درگاه` | ساعت سرور (NTP)، `stableStringify`، PATH دقیق، body خام همان hash |
|
||||
| شارژ دوبل | باید idempotent باشد (`sts=2` + lock) |
|
||||
| secret در Network | مسیر باید `api/get_settings` باشد نه admin؛ فیلتر `Setting::forPublicApi` |
|
||||
| `امضای نامعتبر` در verify-return | `php artisan montify:check-return "<کل URL بازگشت>"` را روی سرور بزنید؛ خروجی نشان میدهد کدام قالب میخواند یا اینکه `client_secret` غلط است. لاگ `montify.return_invalid_signature` هم کلیدهای دریافتی را دارد |
|
||||
| پرداخت موفق ولی کیف شارژ نشد | `GET /wallet/payment/status?reference_id=WD-…`؛ لاگ `montify.status_failed` و رسیدن webhook را بررسی کنید |
|
||||
|
||||
جزئیات امضای HMAC و خطاهای Montify: [`EXTERNAL_PAYMENT_PARTNER.md`](./EXTERNAL_PAYMENT_PARTNER.md)
|
||||
|
||||
@@ -275,6 +286,7 @@ server/docs/WALLET_ONLINE_PAYMENT.md ← این سند
|
||||
server/docs/EXTERNAL_PAYMENT_PARTNER.md ← پروتکل Montify
|
||||
server/app/Services/Payment/...
|
||||
server/app/Http/Controllers/pay/WalletPaymentController.php
|
||||
server/app/Console/Commands/MontifyCheckReturnCommand.php ← عیبیابی امضای بازگشت
|
||||
server/routes/customer.php
|
||||
server/app/Models/Setting.php ← فیلتر secret
|
||||
server/database/migrations/2026_07_24_000001_add_external_payment_settings.php
|
||||
|
||||
Reference in New Issue
Block a user