Looking to hire Laravel developers? Try LaraJobs

laravel-yabetoopay maintained by opennebel

Description
A Laravel integration for the YabetooPay API.
Author
Last update
2026/07/29 12:07 (dev-main)
License
Links
Downloads
0

Comments
comments powered by Disqus

Laravel YabetooPay

Latest Version on Packagist Total Downloads Software License

Une intégration Laravel simple, robuste et générique pour la passerelle de paiement YabetooPay (Mobile Money).

Fonctionnalités

  • Création d'intentions de paiement (Payment Intent).
  • Confirmation d'intentions de paiement (avec déclenchement du push USSD MoMo).
  • Récupération et vérification du statut d'un paiement.
  • Middleware de vérification de signature HMAC-SHA256 pour sécuriser vos webhooks.
  • Déclenchement d'un événement Laravel pour l'enregistrement et le suivi des journaux de requêtes (decoupled logging).

Installation

Option A : Depuis Packagist (une fois publié)

Installez le package via Composer :

composer require opennebel/laravel-yabetoopay

Option B : Utilisation en local (avant publication)

Si vous souhaitez utiliser ce package localement dans un autre projet sans le publier immédiatement sur Packagist, ajoutez ce qui suit au fichier composer.json de votre autre projet :

"repositories": [
    {
        "type": "path",
        "url": "../chemin/vers/yabetoo-laravel"
    }
],

Ensuite, exécutez la commande suivante dans votre autre projet :

composer require opennebel/laravel-yabetoopay:dev-main

Configuration

Publiez le fichier de configuration dans votre application Laravel :

php artisan vendor:publish --provider="Yabetoopay\Laravel\YabetooServiceProvider" --tag="yabetoo-config"

Cela va créer un fichier de configuration config/yabetoo.php. Vous pouvez configurer les variables dans votre fichier .env :

YABETOO_BASE_URL=https://pay.api.yabetoopay.com
YABETOO_SECRET_KEY=votre_cle_secrete_ici
YABETOO_WEBHOOK_SECRET=votre_secret_de_webhook_ici
YABETOO_VERIFY_SSL=true
YABETOO_COUNTRY=cg
YABETOO_CURRENCY=xaf

Utilisation

Le package enregistre automatiquement la Facade Yabetoo et résout le client singleton depuis le conteneur IoC.

1. Créer une intention de paiement (Payment Intent)

use Yabetoopay\Laravel\Facades\Yabetoo;
use Yabetoopay\Laravel\YabetooException;

try {
    $response = Yabetoo::createPaymentIntent(
        amount: 1000, // En centimes ou selon les spécifications de la devise
        currency: 'XAF',
        description: 'Achat de crédits SMS',
        metadata: ['payment_id' => 42],
        paymentId: 42 // Optionnel : identifiant local pour le traçage des logs
    );

    $intentId = $response['id'];
    $clientSecret = $response['clientSecret'];
    
    // Enregistrez ces informations sur votre paiement local
} catch (YabetooException $e) {
    // Gérer l'erreur
    $errorMessage = $e->getMessage();
    $errorData = $e->response; // Contenu brut de la réponse d'erreur de l'API
}

2. Confirmer un paiement (Déclencher le push USSD)

La confirmation déclenche la notification USSD sur le téléphone du client. Comme cet appel peut être long à répondre (attente réseau), il est fortement conseillé de l'exécuter dans un Job asynchrone (Queue).

use Yabetoopay\Laravel\Facades\Yabetoo;

$response = Yabetoo::confirmPaymentIntent(
    intentId: $intentId,
    clientSecret: $clientSecret,
    msisdn: '061234567',
    operator: 'mtn', // ex: mtn, airtel
    country: 'cg', // ex: cg
    paymentId: 42 // Optionnel
);

3. Récupérer le statut d'un paiement (Polling)

use Yabetoopay\Laravel\Facades\Yabetoo;

$response = Yabetoo::getPaymentIntent($intentId);

if ($response['status'] === 'succeeded') {
    // Le paiement est réussi !
}

Sécuriser vos Webhooks

YabetooPay envoie des événements à votre application par webhook. Pour sécuriser votre route et valider la signature de ces requêtes, utilisez le middleware inclus dans le package.

Enregistrement du Middleware

Laravel 11 / 12 / 13 (bootstrap/app.php) :

use Yabetoopay\Laravel\Http\Middleware\VerifyYabetooSignature;

->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'yabetoo.signature' => VerifyYabetooSignature::class,
    ]);
})

Laravel 10 (app/Http/Kernel.php) :

protected $routeMiddleware = [
    'yabetoo.signature' => \Yabetoopay\Laravel\Http\Middleware\VerifyYabetooSignature::class,
];

Utilisation dans les routes :

Route::post('/webhooks/yabetoopay', [YabetooWebhookController::class, 'handle'])
    ->middleware('yabetoo.signature');

Journalisation (Logging)

Pour garder le package indépendant de la structure de votre base de données, le client déclenche l'événement Yabetoopay\Laravel\Events\YabetooRequestLogged après chaque requête HTTP.

Vous pouvez écouter cet événement dans votre application pour enregistrer les requêtes dans votre table de logs ou votre système de journalisation.

1. Créer un Listener

Générez un Listener dans votre projet hôte :

php artisan make:listener LogYabetooRequest --event="Yabetoopay\Laravel\Events\YabetooRequestLogged"

2. Implémenter la logique d'enregistrement

Dans app/Listeners/LogYabetooRequest.php :

<?php

namespace App\Listeners;

use Yabetoopay\Laravel\Events\YabetooRequestLogged;
use App\Models\PaymentLog; // Votre propre modèle de log

class LogYabetooRequest
{
    public function handle(YabetooRequestLogged $event): void
    {
        PaymentLog::create([
            'payment_id' => $event->paymentId,
            'direction' => $event->direction,
            'method' => $event->method,
            'url' => $event->url,
            'payload' => $event->payload,
            'response' => $event->response,
            'response_status' => $event->responseStatus,
        ]);
    }
}

Licence

Ce package est distribué sous licence MIT. Voir le fichier LICENSE.md pour plus d'informations.