geniuspay/laravel-geniuspay

Laravel SDK pour l'intégration des paiements GeniusPay (Wave, Orange Money, MTN Money, Carte)

Maintainers

Package info

github.com/Genius-Groupsgit/geniuspay-laravel

Homepage

pkg:composer/geniuspay/laravel-geniuspay

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v2.0.1 2026-06-10 15:47 UTC

This package is not auto-updated.

Last update: 2026-06-10 17:19:39 UTC


README

Latest Version Laravel PHP License

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.