🎯 نمای کلی
این پوشه شامل هسته مرکزی سیستم IFNEX است که شامل پنج بخش اصلی میشود:
۱. REST API کامل
ارتباط با WordPress از طریق Sanctum Token + Bridge Auth (بدون رمز عبور) — ۳۰+ endpoint برای تمام عملیات مشتری (سفارش، پرداخت، کیف پول، نوتیفیکیشن، رهگیری).
۲. پنل مدیریت Filament 3.3
پنل کامل برای اپراتورها و مدیران شامل مدیریت مرسولهها، نرخها، ارزها، کاربران، گزارشهای مالی و تنظیمات سیستم.
۳. موتور قیمتگذاری
محاسبه قیمت بر اساس ۴ زون (Export/Import × Parcel/Doc) و ۳ نوع سرویس با پشتیبانی از تخفیف، VAT، هزینههای داخلی و تبدیل ارز (درهم ↔ ریال).
۴. سیستم مالی و سندسازی
کیف پول دیجیتال، درگاه پرداخت Zarinpal، تولید خودکار PDF (AWB, Invoice, Label) با بارکد استاندارد و سیستم نوتیفیکیشن دیتابیس.
۵. Multi-Package و Invoice (فاز ۳.۵)
پشتیبانی از چند بسته در یک سفارش، فرم اقلام گمرکی (Invoice) برای محمولههای PARCEL، و محاسبه خودکار وزن حجمی از ابعاد.
۶. فلوی تأیید سفارش و اعلانها (فاز ۳.۶)
ثبت سفارش با وضعیت pending_approval → تأیید/رد توسط کارمند (پنل یا API) → باز شدن پرداخت → processed بعد از پرداخت. بههمراه تعهدنامهها (آپلود مدیر، دانلود/امضا/آپلود مشتری)، دانلود PDFها در پورتال مشتری، وضعیت مالی مشتری برای کارمندان، Audit Log و اعلانهای SMS کاوهنگار.
🚀 نصب و راهاندازی سریع
پیشنیازها
| ابزار |
حداقل نسخه |
توضیحات |
| PHP |
8.2+ |
با extensions: pdo_mysql, mbstring, xml, gd, zip |
| Composer |
2.x |
مدیریت وابستگیها |
| MySQL |
8.0+ |
دیتابیس اصلی |
| Node.js |
18+ |
برای build assets (اختیاری) |
مراحل نصب
# ۱. ورود به پوشه لاراول
cd 04_Laravel
# ۲. نصب وابستگیها
composer install
# ۳. تنظیم فایل محیط
cp .env.example .env
php artisan key:generate
# ۴. ایجاد دیتابیس
mysql -u root -p -e "CREATE DATABASE ifnex_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# ۵. ویرایش .env — مقادیر کلیدی (مشاهده جدول زیر)
# ۶. اجرای migrations و seeders
php artisan migrate --force
php artisan db:seed --force
# ۷. اجرای سرور
php artisan serve
# پنل ادمین: http://127.0.0.1:8000/panel
🔐 دسترسی پیشفرض
⚙️ تنظیمات مهم .env
# DATABASE
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ifnex_db
DB_USERNAME=root
DB_PASSWORD=
# IFNEX API
IFNEX_API_KEY=ifnex-local-dev-key
IFNEX_BRIDGE_API_KEY=ifnex-bridge-secret-key-2026-vernasoft # مهم برای وردپرس
IFNEX_TRACKING_RATE_LIMIT=60
# CORS (فقط دامنههای مجاز وردپرس)
CORS_ALLOWED_ORIGINS=http://localhost,http://127.0.0.1
# PAYMENT GATEWAY (Zarinpal)
ZARINPAL_MERCHANT_ID=fake-merchant-id-for-testing # برای Mock Mode
ZARINPAL_SANDBOX=true
ZARINPAL_CALLBACK_URL=http://localhost:8000/api/v1/payment/callback
ZARINPAL_FRONTEND_SUCCESS_URL=http://localhost/IFNEX-Logistics/03_WordPress/wallet
ZARINPAL_FRONTEND_FAILURE_URL=http://localhost/IFNEX-Logistics/03_WordPress/wallet
# CURRENCY API (برای بروزرسانی نرخ ارز)
CURRENCY_API_KEY=your_api_key_here
CURRENCY_API_URL=https://api.freecurrencyapi.com/v1/latest
# WALLET
WALLET_MIN_DEPOSIT=10000
WALLET_MAX_DEPOSIT=500000000
WALLET_AUTO_CREATE=true
WALLET_ALLOW_WITHDRAWAL=false
⚠️ نکته مهم: اگر ZARINPAL_MERCHANT_ID برابر fake-merchant-id-for-testing باشد، سیستم از MockZarinpalService استفاده میکند که برای تست لوکال مناسب است.
📡 API Endpoints
🔓 API عمومی (با API Key یا بدون احراز هویت)
| متد |
Endpoint |
توضیح |
| GET |
/api/v1/track/{awb_no} |
رهگیری مرسوله (API Key) |
| POST |
/api/v1/calculate |
محاسبه قیمت |
| GET |
/api/v1/countries |
لیست کشورها با پیششماره (عمومی) |
| GET |
/api/v1/discount-codes |
لیست کدهای تخفیف ⚠️ باید محدود شود |
| POST |
/api/v1/discount-codes/validate |
اعتبارسنجی کد تخفیف |
| POST |
/api/v1/bridge/login |
Bridge Auth (وردپرس ← لاراول) |
| POST |
/api/v1/auth/login |
ورود مشتری (ایمیل + رمز) |
| POST |
/api/v1/auth/logout |
خروج (Sanctum) |
| GET |
/api/v1/commitment-forms[/{direction}] |
لیست فرمهای تعهدنامه فعال |
| POST |
/api/v1/verify/send-code |
ارسال کد تأیید موبایل (SMS) |
| POST |
/api/v1/verify/check-code |
بررسی کد تأیید موبایل |
🔐 API مشتری (Sanctum Token)
| متد |
Endpoint |
توضیح |
| GET |
/api/v1/customer/profile |
پروفایل + آمار + مانده حساب |
| GET |
/api/v1/customer/orders |
لیست سفارشات (paginated) |
| POST |
/api/v1/customer/orders |
ثبت سفارش جدید (با packages[] و items[]) — وضعیت pending_approval |
| GET |
/api/v1/customer/orders/{id} |
جزئیات سفارش |
| POST |
/api/v1/customer/orders/{id}/cancel |
لغو سفارش |
| GET |
/api/v1/customer/orders/{id}/pdf/awb |
دانلود AWB |
| GET |
/api/v1/customer/orders/{id}/pdf/invoice |
دانلود فاکتور (فقط PARCEL) |
| GET |
/api/v1/customer/orders/{id}/pdf/label |
دانلود لیبل |
| GET |
/api/v1/customer/orders/{id}/pdf/import-invoice |
دانلود فاکتور واردات |
| GET |
/api/v1/customer/orders/{id}/commitment-forms |
تعهدنامههای سفارش + وضعیت آپلود |
| POST |
/api/v1/customer/orders/{id}/commitment-forms/{form}/upload |
آپلود تعهدنامه امضاشده |
| POST |
/api/v1/customer/orders/{id}/pay-wallet |
پرداخت با کیف پول (فقط بعد از تأیید) |
| POST |
/api/v1/customer/orders/{id}/pay-gateway |
پرداخت با درگاه (فقط بعد از تأیید) |
| GET |
/api/v1/customer/notifications |
لیست اعلانها |
| POST |
/api/v1/customer/notifications/{id}/read |
علامتگذاری خواندهشده |
👷 API کارمندان (Sanctum Token) ⚠️ چک نقش در حال تکمیل
| متد |
Endpoint |
توضیح |
| GET |
/api/v1/staff/orders/pending-approval |
سفارشات در انتظار تأیید |
| POST |
/api/v1/staff/orders/{id}/approve |
تأیید سفارش |
| POST |
/api/v1/staff/orders/{id}/reject |
رد سفارش |
| GET |
/api/v1/staff/customers/search |
جستجوی مشتری |
| GET |
/api/v1/staff/customers/{id}/financial-status |
وضعیت مالی مشتری (بدهی به تفکیک ارز) |
💰 API کیف پول (Sanctum Token)
| متد |
Endpoint |
توضیح |
| GET |
/api/v1/wallet/balance |
موجودی + آمار |
| GET |
/api/v1/wallet/transactions |
تراکنشها (paginated) |
| GET |
/api/v1/wallet/{wallet}/activity-log |
لاگ فعالیتها |
| POST |
/api/v1/wallet/{wallet}/freeze |
مسدود کردن کیف پول (admin) |
| POST |
/api/v1/wallet/{wallet}/unfreeze |
آزاد کردن کیف پول (admin) |
| POST |
/api/v1/wallet/admin-adjust |
تراکنش دستی (admin) |
💳 API پرداخت
| متد |
Endpoint |
توضیح |
| POST |
/api/v1/payment/redirect |
انتقال به درگاه (شارژ کیف پول) |
| GET |
/api/v1/payment/check/{transaction} |
بررسی وضعیت تراکنش |
| ANY |
/api/v1/payment/callback |
Callback از درگاه (Zarinpal) |
🧪 Mock Gateway (تست لوکال)
| متد |
Endpoint |
توضیح |
| GET |
/api/v1/payment/mock-gateway |
صفحه شبیهسازی درگاه |
| GET |
/api/v1/payment/mock-gateway/success |
شبیهسازی پرداخت موفق |
| GET |
/api/v1/payment/mock-gateway/failure |
شبیهسازی پرداخت ناموفق |
📥 مثال: ثبت سفارش
curl -X POST http://localhost:8000/api/v1/customer/orders \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"direction": "export",
"type": "PARCEL",
"from_country_id": 1,
"to_country_id": 2,
"weight": 2.5,
"volumetric_weight": 2.5,
"sender_name": "John Doe",
"sender_phone": "+98 9123456789",
"sender_city": "Tehran",
"sender_address": "No 1, ValiAsr Street",
"receiver_name": "Ahmed Ali",
"receiver_phone": "+971 501234567",
"receiver_city": "Dubai",
"receiver_address": "Sheikh Zayed Road 100"
}'
🗂️ ساختار پروژه
04_Laravel/
├── app/
│ ├── Enums/ # ShipmentStatus (۱۲ وضعیت), ShipmentDirection, ShipmentType, PaymentGateway, TransactionType, TransactionStatus, CarrierCode, TrackingSource, UserRole
│ ├── Filament/
│ │ ├── Resources/ # ۱۶ Resources
│ │ │ ├── ShipmentResource/ # مدیریت مرسولهها + اکشن تأیید/رد + RelationManagers
│ │ │ ├── ShipmentChecklistResource/ # چکلیست کارمند
│ │ │ ├── CommitmentFormResource/ # فرمهای تعهدنامه (آپلود مدیر)
│ │ │ ├── CustomerCreditResource/ # اعتبار مشتریان
│ │ │ ├── AuditLogResource/ # لاگ تغییرات
│ │ │ ├── CountryResource/ # مدیریت کشورها + calling_code
│ │ │ ├── ShippingRateResource/
│ │ │ ├── CurrencyResource/ # مدیریت ارزها
│ │ │ ├── UserResource/ # مدیریت کاربران
│ │ │ ├── WalletResource/ # کیف پولها
│ │ │ ├── WalletTransactionResource/
│ │ │ ├── PaymentResource/ # پرداختها
│ │ │ ├── DiscountCodeResource/
│ │ │ ├── ShipmentItemResource/
│ │ │ ├── ExchangeRateHistoryResource/
│ │ │ └── RoleResource/ # مدیریت نقشها
│ │ ├── Pages/
│ │ │ ├── IfnexSettingsPage.php # تنظیمات سیستم + کلیدهای SMS
│ │ │ ├── PriceTestPage.php # تست محاسبه قیمت
│ │ │ ├── ImportRatesPage.php # آپلود اکسل نرخها
│ │ │ ├── BulkTrackingImport.php # ایمپورت گروهی وضعیت ترکینگ (CSV)
│ │ │ └── Reports/FinancialReport.php # گزارش مالی
│ │ └── Widgets/ # DashboardInfo, ExchangeRate, FinanceOverview, WalletStats, ...
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Api/
│ │ │ │ ├── AuthController.php # لاگین/لاگاوت مشتری
│ │ │ │ ├── BridgeAuthController.php # Bridge Auth (وردپرس)
│ │ │ │ ├── TrackController.php # رهگیری عمومی
│ │ │ │ ├── PricingController.php # محاسبه قیمت
│ │ │ │ ├── DiscountCodeController.php
│ │ │ │ ├── PaymentController.php # درگاه + Callback (با فلوی تأیید سفارش)
│ │ │ │ ├── MockGatewayController.php # شبیهسازی درگاه
│ │ │ │ ├── WalletController.php
│ │ │ │ ├── StaffOrderController.php # تأیید/رد سفارشات
│ │ │ │ ├── CustomerFinancialController.php # وضعیت مالی مشتری
│ │ │ │ ├── CommitmentFormController.php # تعهدنامهها + آپلود امضاشده
│ │ │ │ ├── MobileVerificationController.php # تأیید موبایل (SMS)
│ │ │ │ └── Customer/
│ │ │ │ └── CustomerOrderController.php # سفارشات مشتری (packages/items/PDF/تعهدنامه)
│ │ │ ├── ShipmentPdfController.php # AWB/Invoice/Label/Import-Invoice PDFs
│ │ │ └── OrderController.php # فلوی legacy Blade (deprecated)
│ │ └── Middleware/
│ │ └── ApiKeyMiddleware.php # برای APIهای عمومی
│ ├── Models/ # ۲۲ مدل Eloquent
│ ├── Notifications/ # DB + SMS: ShipmentApprovedSms, ShipmentRejectedSms, PaymentSuccessSms, TrackingUpdatedSms, SmsChannel
│ ├── Observers/
│ │ └── ShipmentObserver.php # تریگر نوتیفیکیشن/SMS روی تغییر وضعیت
│ ├── Traits/
│ │ └── Auditable.php # لاگ خودکار تغییرات مدلها
│ ├── Services/
│ │ ├── PriceCalculatorService.php # موتور قیمتگذاری
│ │ ├── WalletService.php # مدیریت کیف پول
│ │ ├── OrderPaymentService.php # پرداخت سفارش (کیف پول + درگاه)
│ │ ├── ZarinpalService.php # درگاه واقعی
│ │ ├── MockZarinpalService.php # درگاه شبیهسازی
│ │ ├── KavenegarSmsService.php # سرویس پیامک
│ │ ├── ExchangeRateService.php
│ │ ├── PdfService.php # تولید PDF با بارکد
│ │ └── TrackingService.php
│ ├── Imports/ # Excel imports (OldShipments, ShippingRates)
│ ├── Exports/ # ShippingRatesTemplateExport
│ └── Console/Commands/
│ ├── ifnex:import:rates # ایمپورت نرخها از اکسل
│ ├── ifnex:import:shipments # ایمپورت مرسولات تاریخی
│ ├── ifnex:import:tracking # ایمپورت دادههای ترکینگ
│ ├── ifnex:sync-wp-users # همگامسازی کاربران وردپرس
│ ├── ifnex:update-rates # بروزرسانی نرخ ارز (--source=ecb|freecurrencyapi)
│ └── ifnex:token # تولید API Token برای ادمین
│
├── database/
│ ├── migrations/ # ۴۰ migration
│ └── seeders/
│ ├── CountriesTableSeeder.php # ۲۳۳ کشور + calling_code
│ ├── SystemSettingSeeder.php
│ ├── RoleAndPermissionSeeder.php
│ ├── SampleShippingRatesSeeder.php
│ ├── SampleDataSeeder.php
│ └── DatabaseSeeder.php
│
├── resources/views/
│ ├── pdfs/
│ │ ├── awb.blade.php # Air Waybill PDF با بارکد
│ │ ├── invoice.blade.php # فاکتور PDF (PARCEL)
│ │ ├── label.blade.php # لیبل A5 با بارکد
│ │ └── import-invoice.blade.php # فاکتور واردات (مطابق شیت ENG)
│ └── filament/pages/ # صفحات Filament
│
├── routes/
│ ├── api.php # ۵۰+ REST API endpoint
│ └── web.php # Web (PDF قدیمی، payment-result، دانلود template)
│
└── config/
├── ifnex.php # تنظیمات اختصاصی IFNEX
└── cors.php
🗃️ Models
| Model |
جدول |
توضیح |
فاز |
| Country |
countries |
۲۳۳ کشور با ۴ زون + calling_code |
۰ |
| Shipment |
shipments |
مرسولهها (مدل مرکزی) |
۰+۲+۳.۵ |
| ShipmentItem |
shipment_items |
اقلام گمرکی (Invoice) |
۰+۳.۵ |
| ShipmentPackage |
shipment_packages |
بستههای چندگانه (Multi-Package) |
۳.۵ |
| ShipmentCarrierMapping |
shipment_carrier_mappings |
نگاشت شرکتهای حمل |
۰ |
| ShipmentTrackingEvent |
shipment_tracking_events |
رویدادهای ترکینگ |
۰+۲ |
| ShipmentStatusHistory |
shipment_status_histories |
تاریخچه تغییرات وضعیت |
۲ |
| ShippingRate |
shipping_rates |
تعرفههای حمل |
۰ |
| SystemSetting |
system_settings |
تنظیمات key-value |
۰ |
| Currency |
currencies |
ارزهای پشتیبانی (IRR, AED, USD, EUR, CNY) |
۲ |
| ExchangeRateHistory |
exchange_rate_histories |
تاریخچه نرخ ارز |
۲ |
| User |
users |
کاربران سیستم (admin + customer) |
۰ |
| Wallet |
wallets |
کیف پول کاربران |
۲ |
| WalletTransaction |
wallet_transactions |
تراکنشهای کیف پول |
۲ |
| WalletActivityLog |
wallet_activity_logs |
لاگ فعالیتهای کیف پول |
۲ |
| DiscountCode |
discount_codes |
کدهای تخفیف |
۲ |
| Payment |
payments |
پرداختها |
۲ |
| CommitmentForm |
commitment_forms |
فرمهای تعهدنامه (آپلود مدیر) |
۳.۶ |
| ShipmentCommitmentForm |
shipment_commitment_forms |
تعهدنامه امضاشده هر سفارش |
۳.۶ |
| ShipmentChecklist |
shipment_checklists |
چکلیست کارمند برای هر سفارش |
۳.۶ |
| AuditLog |
audit_logs |
لاگ تغییرات مدلها (polymorphic) |
۳.۶ |
| Role |
roles |
نقشها (spatie/laravel-permission) |
۲ |
جمع: ۲۲ مدل
🎨 Filament Resources
Resources اصلی
| Resource |
توضیح |
ویژگیها |
| ShipmentResource |
مدیریت مرسولهها |
جدول + فرم + View + اکشن تأیید/رد + CSV Export + Bulk Actions |
| ShipmentChecklistResource |
چکلیست کارمند |
CRUD — ⚠️ اتصال خودکار به سفارش باقی است |
| CommitmentFormResource |
تعهدنامهها |
آپلود فرم + direction (export/import/both) |
| CustomerCreditResource |
اعتبار مشتریان |
افزایش/کاهش اعتبار — ⚠️ نیازمند رفع و بازطراحی |
| AuditLogResource |
لاگ تغییرات |
مشاهده لاگهای Audit |
| CountryResource |
مدیریت کشورها |
CRUD + calling_code + ۴ زون |
| ShippingRateResource |
مدیریت تعرفهها |
CRUD + فیلتر + Import از اکسل |
| CurrencyResource |
مدیریت ارزها |
CRUD + بروزرسانی خودکار نرخ |
| UserResource |
مدیریت کاربران |
CRUD + Role + Wallet link |
| WalletResource |
مدیریت کیف پول |
View + Freeze/Unfreeze + Activity Log |
| WalletTransactionResource |
تراکنشها |
View + فیلتر + گزارش |
| PaymentResource |
پرداختها |
View + بررسی وضعیت |
| DiscountCodeResource |
کدهای تخفیف |
CRUD + اعتبارسنجی |
| RoleResource |
نقشها |
مدیریت Roles + Permissions |
| ShipmentItemResource |
اقلام گمرکی |
CRUD |
| ExchangeRateHistoryResource |
تاریخچه نرخ ارز |
View |
RelationManagers (ثبتشده در ShipmentResource)
| RelationManager |
توضیح |
| TrackingEventsRelationManager |
رویدادهای ترکینگ با فیلد source |
| CarrierMappingsRelationManager |
نگاشت شرکتهای حمل |
صفحات سفارشی
| صفحه |
توضیح |
| IfnexSettingsPage |
تنظیمات سیستم — نرخ درهم، VAT، حاشیه سود، کلید کاوهنگار و سوییچهای SMS |
| PriceTestPage |
تست محاسبه قیمت با پارامترهای مختلف — ⚠️ با مقادیر type فعلی خراب است |
| ImportRatesPage |
آپلود اکسل نرخها + دانلود Template |
| BulkTrackingImport |
ایمپورت گروهی وضعیت ترکینگ با CSV |
| FinancialReport |
گزارش مالی (درآمد، تخفیف، کارمزد) |
🔧 Artisan Commands
# Import / Migration
php artisan ifnex:import:rates {path} # ایمپورت نرخها از اکسل
php artisan ifnex:import:shipments {path} # ایمپورت مرسولات تاریخی از اکسل
php artisan ifnex:import:tracking {path} # ایمپورت دادههای ترکینگ
php artisan ifnex:sync-wp-users # همگامسازی کاربران وردپرس با لاراول
# Currency
php artisan ifnex:update-rates # بروزرسانی نرخ ارز (--source=ecb یا freecurrencyapi)
# Token
php artisan ifnex:token # تولید API Token برای ادمین
# Standard
php artisan migrate # اجرای migrations
php artisan db:seed # اجرای seeders
php artisan serve # اجرای سرور
php artisan tinker # محیط تعاملی
php artisan route:list # لیست روتها
php artisan config:clear # پاکسازی کش کانفیگ
🔴 خط قرمزها (ممنوعیتها)
| ❌ هرگز |
✅ همیشه |
| برگرداندن countries به ۲ زون |
۴ زون مجزا (Export/Import × Parcel/Doc) |
| استفاده از ۲ نوع سرویس |
۳ نوع (DOC_NORMAL, DOC_ECONOMY, PARCEL) |
| ذخیره تاریخ شمسی در DB |
ذخیره timestamp میلادی + تبدیل در نمایش |
CORS * در Production |
CORS محدود به دامنه وردپرس |
کامیت .env در Git |
در .gitignore باشد |
APP_DEBUG=true در Production |
APP_DEBUG=false |
| PDF فارسی (AWB/Invoice/Label) |
همیشه انگلیسی (برای حمل بینالمللی) |
| کپی از DHL |
طراحی منحصر به فرد IFNEX |
استفاده از wire:click برای دانلود |
استفاده از <a href> با روت مستقیم |
getFormActions() در Custom Pages |
استفاده از wire:click در Blade |
هدایت AJAX به redirect() |
استفاده از payment_url در response JSON |
| متدهای نوتیفیکیشن بیرون از کلاس |
داخل کلاس IFNEX_User_Bridge |
🧪 تست
Mock Gateway
برای تست پرداخت بدون اتصال به Zarinpal واقعی، ZARINPAL_MERCHANT_ID=fake-merchant-id-for-testing را در .env تنظیم کنید. سپس:
- پرداختها از طریق
MockZarinpalService پردازش میشوند
- URL پرداخت:
/api/v1/payment/mock-gateway
- شبیهسازی موفق:
/api/v1/payment/mock-gateway/success
- شبیهسازی ناموفق:
/api/v1/payment/mock-gateway/failure
Bridge Token Test
curl -X POST http://localhost:8000/api/v1/bridge/login \
-H "Content-Type: application/json" \
-d '{
"bridge_api_key": "YOUR_BRIDGE_KEY",
"wp_user_id": 1,
"wp_user_email": "user@example.com",
"wp_user_name": "Test User",
"token_name": "test"
}'
📚 مستندات
🚀 مراحل بعدی
وضعیت دقیق و جزئیات فاز ۳.۶: AGENT.md و IFNEX_Roadmap.md
© 2026 VernaSoft Group. All Rights Reserved.