nmdigitalhub / payment-gateway
Advanced Payment Gateway Package for Laravel with eSIM-based unified checkout, slug routing, CardCom API v11, Maya Mobile, and ResellerClub Integration
Fund package maintenance!
nm-digitalhub.com
Requires
- php: ^8.2
- filament/actions: ^3.0
- filament/filament: ^3.0
- filament/forms: ^3.0
- filament/notifications: ^3.0
- filament/support: ^3.0
- filament/tables: ^3.0
- guzzlehttp/guzzle: ^7.0
- laravel/framework: ^11.0|^12.0
- nesbot/carbon: ^2.0|^3.0
- ramsey/uuid: ^4.0
- spatie/laravel-enum: ^3.0
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-settings: ^3.0
- symfony/uid: ^6.0|^7.0
Requires (Dev)
- larastan/larastan: ^2.0
- mockery/mockery: ^1.4
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpunit/phpunit: ^10.0|^11.0
- rector/rector: ^0.18
README
חבילת שער תשלום מתקדמת ל-Laravel עם אינטגרציה מלאה לCardCom, Maya Mobile ו-ResellerClub - מבוססת על מערכת eSIM מאוחדת עם Slug routing ו-Frontend מלא
תכונות עיקריות
🚀 תכונות מתקדמות
- CardCom API v11 - תמיכה מלאה ב-LowProfile עם 3D Secure
- ניהול טוקנים - שמירת כרטיסי אשראי בצורה מאובטחת
- סנכרון קטלוגים - עדכון אוטומטי של מוצרים מספקים
- עמודי תשלום ציבוריים - יצירת עמודי checkout מותאמים אישית
- פאנלי Filament - ניהול מלא דרך ממשק האדמין
🛡️ אבטחה
- תמיכה מלאה ב-PCI DSS
- אימות HMAC עבור webhooks
- הצפנת נתוני תשלום במאגר הנתונים
- תמיכה מלאה ב-3D Secure
🌍 תמיכה רב-לשונית
- עברית (RTL) - ברירת המחדל
- אנגלית
- צרפתית
התקנה
דרישות מערכת
- PHP 8.2+
- Laravel 11.0+ או 12.0+
- Filament v3
- MySQL/PostgreSQL/SQLite
- הרחבות PHP: json, curl, mbstring, openssl, pdo
התקנה מהירה
# הוספת החבילה דרך Composer composer require nmdigitalhub/payment-gateway # התקנה אוטומטית מלאה php artisan payment-gateway:install --demo --optimize # או התקנה ידנית צעד אחר צעד php artisan payment-gateway:install --verbose
אפשרויות התקנה
# התקנה בכוח (עריפת הגדרות קיימות) php artisan payment-gateway:install --force # התקנה עם נתוני דמו php artisan payment-gateway:install --demo # התקנה ללא migrations php artisan payment-gateway:install --skip-migrations # התקנה עם אופטימיזציה php artisan payment-gateway:install --optimize # פרטי התקנה מלאים php artisan payment-gateway:install --verbose
הגדרת CardCom
קבלת פרטי החיבור
- פנה לשירות לקוחות של CardCom
- בקש מספר טרמינל וממשק API
- קבל את פרטי החיבור
הגדרה ב-.env
# CardCom Configuration CARDCOM_TERMINAL_NUMBER=172204 CARDCOM_API_NAME=your_api_name CARDCOM_API_PASSWORD=your_api_password CARDCOM_TEST_MODE=false # Payment Gateway PAYMENT_GATEWAY_ENABLED=true PAYMENT_GATEWAY_DEFAULT=cardcom
הגדרת Webhooks
# URL לקבלת webhooks מ-CardCom
https://your-domain.com/webhooks/cardcom
שימוש בחבילה
יצירת תשלום פשוט
use NMDigitalHub\PaymentGateway\Facades\Payment; // יצירת תשלום בסיסי $payment = Payment::amount(100) ->currency('ILS') ->customerEmail('customer@example.com') ->customerName('יוסי כהן') ->description('תשלום עבור מוצר') ->create(); // תוצאה: URL לדף התשלום של CardCom return redirect($payment->checkout_url);
יצירת תשלום מתקדם עם טוכן
use NMDigitalHub\PaymentGateway\Facades\Payment; $payment = Payment::amount(250.50) ->currency('ILS') ->customerEmail('customer@example.com') ->customerName('רחל לוי') ->customerPhone('0501234567') ->description('חידוש מנוי שנתי') ->savePaymentMethod() // שמירת כרטיס לעתיד ->successUrl('https://mysite.com/payment/success') ->failedUrl('https://mysite.com/payment/failed') ->webhookUrl('https://mysite.com/webhooks/cardcom') ->metadata(['order_id' => 123, 'user_id' => 456]) ->create();
תשלום עם טוכן שמור
// קבלת טוכנים שמורים של המשתמש $tokens = auth()->user()->paymentTokens()->active()->get(); // תשלום עם טוכן $payment = Payment::useToken($tokenId) ->amount(99.99) ->cvv('123') // נדרש לאימות 3D ->description('תשלום חוזר') ->create(); // תוצאה: תשלום מיידי או הפנייה ל-3D Secure if ($payment->requires_3ds) { return redirect($payment->three_ds_url); }
עבודה עם עמודי תשלום
יצירת עמוד תשלום
use NMDigitalHub\PaymentGateway\Models\PaymentPage; $page = PaymentPage::create([ 'title' => 'תשלום עבור קורס', 'slug' => 'course-payment', 'description' => 'תשלום מאובטח עבור הקורס שלנו', 'type' => 'checkout', 'status' => 'published', 'is_public' => true, 'language' => 'he', 'content' => [ [ 'type' => 'heading', 'data' => ['content' => 'תשלום מאובטח', 'level' => 'h1'] ], [ 'type' => 'payment_form', 'data' => ['allowed_methods' => ['cardcom']] ] ] ]); // URL לעמוד התשלום: /payment/course-payment
הצגת עמוד תשלום בנתיב
// routes/web.php use NMDigitalHub\PaymentGateway\Http\Controllers\CheckoutController; Route::get('/payment/{slug}', [CheckoutController::class, 'showPaymentPage']); Route::post('/payment/{slug}', [CheckoutController::class, 'processPayment']);
ניהול דרך פאנל האדמין
מעבר לפאנלים
- פאנל האדמין:
/admin/payment-transactions
- פאנל הלקוח:
/client/payment-tokens
תכונות האדמין
- צפייה בעסקאות
- ניהול דפי תשלום
- סנכרון קטלוגים
- ניהול ספקים
- דוחות ואנליטיקה
פקודות Artisan
פקודות ניהול
# בדיקת חיבור לספקים php artisan payment-gateway:health-check # סנכרון קטלוגים php artisan payment-gateway:sync # בדיקת ספק php artisan payment-gateway:test cardcom # יצירת עמוד תשלום php artisan payment-gateway:create-page
פקודות תחזוקה
# ניקוי טוכנים שפגו php artisan payment-gateway:cleanup-tokens # ייצוא עסקאות לדוח php artisan payment-gateway:export --from="2024-01-01" --to="2024-12-31" # גיבוי נתוני תשלום php artisan payment-gateway:backup
Webhooks
הגדרת Webhook Handler
use NMDigitalHub\PaymentGateway\Services\CardComLowProfileService; Route::post('/webhooks/cardcom', function (Request $request) { $service = app(CardComLowProfileService::class); $transaction = $service->handleWebhook($request->all()); if ($transaction && $transaction->status === 'success') { // עיבוד הזמנה מוצלחת $order = Order::where('reference', $transaction->reference)->first(); $order->markAsCompleted(); // שליחת מייל אישור Mail::to($transaction->customerEmail) ->send(new PaymentConfirmationMail($transaction)); } return response('OK', 200); });
מודלים ומידע
עבודה עם עסקאות
use NMDigitalHub\PaymentGateway\Models\PaymentTransaction; // קבלת עסקאות לפי משתמש $transactions = PaymentTransaction::where('customer_email', 'user@example.com') ->whereIn('status', ['success', 'completed']) ->orderBy('created_at', 'desc') ->get(); // קבלת עסקה לפי מזהה $transaction = PaymentTransaction::where('transaction_id', 'PAY-123')->first(); // סטטיסטיקות תשלומים $stats = PaymentTransaction::selectRaw(' COUNT(*) as total_transactions, SUM(CASE WHEN status = "success" THEN amount ELSE 0 END) as total_amount, AVG(amount) as average_amount ')->where('created_at', '>=', now()->subMonth())->first();
עבודה עם טוכנים
use App\Models\PaymentToken; // קבלת טוכנים פעילים של משתמש $tokens = PaymentToken::where('user_id', auth()->id()) ->active() ->notExpired() ->get(); // הגדרת טוכן כברירת מחדל $token->setAsDefault(); // ביטול טוכן $token->deactivate();
אבטחה ואופטימיזציה
הגדרות אבטחה מומלצות
// config/payment-gateway.php return [ 'security' => [ 'encryption_key' => env('PAYMENT_GATEWAY_ENCRYPTION_KEY'), 'hmac_secret' => env('PAYMENT_GATEWAY_HMAC_SECRET'), 'session_timeout' => 1800, // 30 דקות 'max_attempts' => 3, 'lockout_duration' => 900, // 15 דקות ], 'logging' => [ 'enabled' => true, 'include_sensitive' => false, // לא לכלול נתונים רגישים 'retention_days' => 30, ], ];
אופטימיזציה ביצועים
// שימוש ב-cache עבור שאילתות כבדות $providers = Cache::remember('active_payment_providers', 3600, function () { return ServiceProvider::active()->get(); }); // אינדקסים מומלצים במאגר הנתונים Schema::table('payment_transactions', function (Blueprint $table) { $table->index(['customer_email', 'status']); $table->index(['status', 'created_at']); $table->index(['provider', 'status']); });
פתרון בעיות נפוצות
שגיאת חיבור ל-CardCom
# בדיקת פרטי החיבור php artisan payment-gateway:test cardcom # בדיקת הגדרות php artisan config:cache php artisan config:clear
בעיות עם Webhooks
# בדיקת URL פנוי curl -X POST https://your-domain.com/webhooks/cardcom # בדיקת הגדרות HMAC php artisan tinker >>> config('payment-gateway.security.hmac_secret')
בעיות עם Filament
# ניקוי cache של Filament
php artisan filament:cache-components
php artisan filament:optimize
תמיכה ועזרה
קישורים חשובים
- תיעוד CardCom: developer.cardcom.solutions
- תיעוד Filament: filamentphp.com
- GitHub Issues: github.com/nmdigitalhub/payment-gateway/issues
פקודות עזרה
# מידע על החבילה php artisan payment-gateway:info # רשימת פקודות זמינות php artisan payment-gateway:help # בדיקת תקינות המערכת php artisan payment-gateway:doctor
יצירת קשר לתמיכה
- אימייל: support@nm-digitalhub.com
- אתר: https://nm-digitalhub.com
- טלפון: 03-1234567
רישיון
החבילה מופצת תחת רישיון MIT. ראה LICENSE לפרטים נוספים.
פותחה בידי NM Digital Hub עם ❤️
🔄 עדכונים אחרונים
- v1.1.0 - הטמעה מלאה מבוססת eSIM: Slug routing, זרימה מלאה מקטלוג לרכישה, Package Manager עם JavaScript מודולרי
- v1.0.3 - הוספת קונטרולרי PackageCheckout ו-PaymentHandler עם תמיכה מלאה בslug navigation
- v1.0.2 - אינטגרציה מלאה של API services (CardCom, Maya Mobile, ResellerClub) עם הגדרות admin-configurable
- v1.0.1 - תיקון שגיאת duplicate method ב-InstallCommand
- v1.0.0 - גרסה ראשונה עם תמיכה מלאה ב-CardCom, Maya Mobile, ResellerClub
🚀 תכונות חדשות ב-v1.1.0:
- מערכת eSIM מאוחדת: זרימה מלאה מבוססת על מערכת ההזמנות המאוחדת של eSIM
- Slug Navigation:
/payment-gateway/checkout/{package-slug}
עם תמיכה דינמית - JavaScript מודולרי: PackageManager, FormHandler, ConnectionTester עם RTL support
- Frontend מלא: קטלוג חבילות, חיפוש, סינון, וזרימה מלאה לרכישה
- אינטגרציה אוטומטית: רישום controllers, routes, ו-resources ב-Filament באופן אוטומטי