laravel-geniuspay maintained by geniuspay
Description
Laravel SDK pour l'intégration des paiements GeniusPay (Wave, Orange Money, MTN Money, Carte)
Author
Last update
2026/06/10 17:47
(dev-main)
License
Downloads
5
Tags
payment - laravel - wave - africa - senegal - mobile-money - orange-money - cote-ivoire - mtn-money - geniuspay
Laravel GeniusPay
SDK Laravel officiel pour l'intégration des paiements GeniusPay (Wave, Orange Money, MTN Money, Carte bancaire).
🚀 Installation
composer require geniuspay/laravel-geniuspay
Installation automatique
php artisan geniuspay:install
Installation manuelle
# Publier la configuration
php artisan vendor:publish --tag=geniuspay-config
# Publier les migrations
php artisan vendor:publish --tag=geniuspay-migrations
# Exécuter les migrations
php artisan migrate
⚙️ Configuration
Ajoutez ces variables dans votre fichier .env :
GENIUSPAY_SANDBOX=true
GENIUSPAY_API_KEY=pk_sandbox_xxxxxxxxxxxx
GENIUSPAY_API_SECRET=sk_sandbox_xxxxxxxxxxxx
GENIUSPAY_WEBHOOK_SECRET=your_webhook_secret
Options de configuration
| Variable | Description | Défaut |
|---|---|---|
GENIUSPAY_SANDBOX |
Mode sandbox | true |
GENIUSPAY_API_KEY |
Clé API publique | - |
GENIUSPAY_API_SECRET |
Clé API secrète | - |
GENIUSPAY_WEBHOOK_SECRET |
Secret webhook | - |
GENIUSPAY_DEBUG |
Mode debug | false |
GENIUSPAY_CURRENCY |
Devise par défaut | XOF |
📖 Utilisation
Avec la Facade
use GeniusPay\Laravel\Facades\GeniusPay;
// Créer un paiement
$payment = GeniusPay::createPayment([
'amount' => 5000,
'currency' => 'XOF',
'payment_method' => 'wave', // Optionnel
'description' => 'Commande #123',
'customer' => [
'name' => 'John Doe',
'email' => 'john@example.com',
'phone' => '+221771234567',
],
'success_url' => route('payment.success'),
'error_url' => route('payment.error'),
'metadata' => [
'order_id' => 123,
],
]);
// Rediriger vers la page de paiement
return redirect($payment->paymentUrl);
Avec l'injection de dépendances
use GeniusPay\Laravel\GeniusPayClient;
class PaymentController extends Controller
{
public function __construct(
private GeniusPayClient $geniusPay
) {}
public function create(Request $request)
{
$payment = $this->geniusPay->createPayment([
'amount' => $request->amount,
'customer' => [
'email' => $request->user()->email,
],
]);
return redirect($payment->paymentUrl);
}
}
Récupérer un paiement
$payment = GeniusPay::getPayment('MTX-ABC123');
if ($payment->isCompleted()) {
// Paiement réussi
}
if ($payment->isPending()) {
// En attente
}
if ($payment->isFailed()) {
// Échoué
}
Lister les paiements
$result = GeniusPay::listPayments([
'status' => 'completed',
'from' => '2025-01-01',
'to' => '2025-12-31',
'per_page' => 50,
]);
foreach ($result['data'] as $payment) {
echo $payment->reference . ': ' . $payment->amount;
}
Vérifier le solde
$balance = GeniusPay::getBalance();
// ['available' => 150000, 'pending' => 25000]
🔔 Webhooks
Le package gère automatiquement les webhooks. Configurez l'URL dans votre dashboard GeniusPay :
https://votresite.com/geniuspay/webhook
Écouter les événements
// app/Providers/EventServiceProvider.php
use GeniusPay\Laravel\Events\PaymentCompleted;
use GeniusPay\Laravel\Events\PaymentFailed;
protected $listen = [
PaymentCompleted::class => [
\App\Listeners\HandlePaymentCompleted::class,
],
PaymentFailed::class => [
\App\Listeners\HandlePaymentFailed::class,
],
];
Créer un listener
// app/Listeners/HandlePaymentCompleted.php
namespace App\Listeners;
use GeniusPay\Laravel\Events\PaymentCompleted;
class HandlePaymentCompleted
{
public function handle(PaymentCompleted $event): void
{
$reference = $event->getReference();
$orderId = $event->getMetadata('order_id');
// Mettre à jour votre commande
$order = Order::find($orderId);
$order->markAsPaid($reference);
}
}
Événements disponibles
| Événement | Description |
|---|---|
WebhookReceived |
Webhook reçu (tous types) |
PaymentCompleted |
Paiement réussi |
PaymentFailed |
Paiement échoué |
PaymentCancelled |
Paiement annulé |
PaymentPending |
Paiement en attente |
RefundCompleted |
Remboursement effectué |
🔗 Trait HasGeniusPayPayments
Ajoutez facilement les paiements à vos modèles :
use GeniusPay\Laravel\Traits\HasGeniusPayPayments;
class Order extends Model
{
use HasGeniusPayPayments;
}
// Utilisation
$order = Order::find(1);
// Créer un paiement lié à la commande
$payment = $order->createGeniusPayPayment([
'amount' => $order->total,
'description' => "Commande #{$order->id}",
]);
// Récupérer les paiements
$order->geniusPayTransactions;
$order->completedPayments()->get();
$order->totalPaid();
🧪 Tests
Mode sandbox
En mode sandbox (GENIUSPAY_SANDBOX=true), aucune transaction réelle n'est effectuée.
Cartes de test
| Numéro | Résultat |
|---|---|
| 4084 0841 1111 1111 | Succès |
| 4084 0841 2222 2222 | Échec |
Test de connexion
if (GeniusPay::testConnection()) {
echo "Connexion OK";
}
🛠️ Commandes Artisan
# Installer le package
php artisan geniuspay:install
# Générer un secret webhook
php artisan geniuspay:webhook-secret
⚠️ Gestion des erreurs
use GeniusPay\Laravel\Exceptions\ApiException;
use GeniusPay\Laravel\Exceptions\AuthenticationException;
use GeniusPay\Laravel\Exceptions\ValidationException;
try {
$payment = GeniusPay::createPayment($data);
} catch (AuthenticationException $e) {
// Clés API invalides
} catch (ValidationException $e) {
// Données invalides
$errors = $e->getErrors();
} catch (ApiException $e) {
// Autre erreur API
}
📚 Ressources
📄 Licence
MIT License. Voir LICENSE.