承接 weexduunx/laravel-aida-gateway 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

weexduunx/laravel-aida-gateway

最新稳定版本:v1.0.0

Composer 安装命令:

composer require weexduunx/laravel-aida-gateway

包简介

Package Laravel pour intégrer facilement les paiements Mobile Money (Orange Money, Wave, Free Money, E-money)

README 文档

README

Latest Version on Packagist Total Downloads PHP Version Laravel Version License Made-In-Senegal

Un package Laravel pour intégrer facilement les paiements Mobile Money (Orange Money, Wave, Free Money, E-money) avec une API unifiée.

Fonctionnalités

  • Support de plusieurs gateways : Orange Money, Wave, Free Money, E-money
  • API unifiée : Utilisez la même interface pour tous les gateways
  • Webhooks automatiques : Réception automatique des confirmations de paiement
  • Middleware de sécurité : Protection contre les transactions en double et rate limiting
  • Événements Laravel : Écoutez les événements de paiement (succès, échec, en attente)
  • Logging complet : Suivi détaillé de toutes les transactions
  • Gestion des transactions : Modèle Eloquent pour gérer vos transactions
  • Facades pratiques : Aida::pay(), Aida::checkStatus(), Aida::refund()

Installation

Installez le package via Composer :

composer require weexduunx/laravel-aida-gateway

Le package s'enregistrera automatiquement grâce à Laravel Package Discovery.

Publication des fichiers

Publiez le fichier de configuration :

php artisan vendor:publish --tag=aida-config

Publiez et exécutez les migrations :

php artisan vendor:publish --tag=aida-migrations
php artisan migrate

Configuration

Ajoutez vos credentials dans le fichier .env :

# Configuration par défaut
AIDA_DEFAULT_GATEWAY=orange_money

# Orange Money
AIDA_ORANGE_MONEY_ENABLED=true
AIDA_ORANGE_MONEY_API_URL=https://api.orange.com/orange-money-webpay
AIDA_ORANGE_MONEY_MERCHANT_KEY=your_merchant_key
AIDA_ORANGE_MONEY_API_USERNAME=your_api_username
AIDA_ORANGE_MONEY_API_PASSWORD=your_api_password
AIDA_ORANGE_MONEY_CURRENCY=XOF
AIDA_ORANGE_MONEY_COUNTRY_CODE=SN

# Wave
AIDA_WAVE_ENABLED=true
AIDA_WAVE_API_URL=https://api.wave.com
AIDA_WAVE_API_KEY=your_api_key
AIDA_WAVE_API_SECRET=your_api_secret
AIDA_WAVE_CURRENCY=XOF

# Free Money
AIDA_FREE_MONEY_ENABLED=true
AIDA_FREE_MONEY_API_URL=https://api.free.sn
AIDA_FREE_MONEY_MERCHANT_ID=your_merchant_id
AIDA_FREE_MONEY_API_KEY=your_api_key
AIDA_FREE_MONEY_API_SECRET=your_api_secret
AIDA_FREE_MONEY_CURRENCY=XOF

# E-money
AIDA_EMONEY_ENABLED=true
AIDA_EMONEY_API_URL=https://api.emoney.sn
AIDA_EMONEY_MERCHANT_CODE=your_merchant_code
AIDA_EMONEY_API_KEY=your_api_key
AIDA_EMONEY_API_SECRET=your_api_secret
AIDA_EMONEY_CURRENCY=XOF

# Webhook
AIDA_WEBHOOK_ROUTE_PREFIX=aida/webhooks
AIDA_WEBHOOK_SECRET=your_webhook_secret

# Transaction
AIDA_TRANSACTION_TIMEOUT=300

# Logging
AIDA_LOGGING_ENABLED=true
AIDA_LOGGING_CHANNEL=stack

Utilisation

Initier un paiement

use Weexduunx\AidaGateway\Facades\Aida;

// Utiliser le gateway par défaut
$response = Aida::pay(
    phoneNumber: '+221771234567',
    amount: 5000,
    description: 'Paiement pour commande #12345'
);

// Utiliser un gateway spécifique
$response = Aida::gateway('wave')->pay(
    phoneNumber: '+221771234567',
    amount: 5000,
    description: 'Paiement Wave'
);

// Vérifier le résultat
if ($response->isSuccessful()) {
    echo "Transaction ID: " . $response->getTransactionId();
    echo "Statut: " . $response->getStatus();

    // Récupérer l'URL de paiement si disponible
    $paymentUrl = $response->getData()['payment_url'] ?? null;

    if ($paymentUrl) {
        return redirect($paymentUrl);
    }
} else {
    echo "Erreur: " . $response->getMessage();
}

Vérifier le statut d'une transaction

$response = Aida::checkStatus('TRANSACTION_ID');

if ($response->isSuccessful()) {
    echo "Statut: " . $response->getStatus();
    echo "Montant: " . $response->getAmount();
}

Rembourser une transaction

// Remboursement complet
$response = Aida::refund('TRANSACTION_ID');

// Remboursement partiel
$response = Aida::refund('TRANSACTION_ID', 2500);

if ($response->isSuccessful()) {
    echo "Remboursement effectué";
}

Obtenir les gateways disponibles

$supportedGateways = Aida::getSupportedGateways();
$enabledGateways = Aida::getEnabledGateways();

Webhooks

Les webhooks sont automatiquement configurés aux URLs suivantes :

  • Orange Money : /aida/webhooks/orange-money
  • Wave : /aida/webhooks/wave
  • Free Money : /aida/webhooks/free-money
  • E-money : /aida/webhooks/emoney

Configurez ces URLs dans vos dashboards respectifs des différents gateways.

Écouter les événements

use Weexduunx\AidaGateway\Events\PaymentSuccessful;
use Weexduunx\AidaGateway\Events\PaymentFailed;
use Weexduunx\AidaGateway\Events\PaymentPending;

// Dans EventServiceProvider
protected $listen = [
    PaymentSuccessful::class => [
        \App\Listeners\SendPaymentConfirmation::class,
    ],
    PaymentFailed::class => [
        \App\Listeners\NotifyPaymentFailure::class,
    ],
    PaymentPending::class => [
        \App\Listeners\LogPendingPayment::class,
    ],
];

Exemple de Listener

namespace App\Listeners;

use Weexduunx\AidaGateway\Events\PaymentSuccessful;

class SendPaymentConfirmation
{
    public function handle(PaymentSuccessful $event)
    {
        $transaction = $event->transaction;

        // Envoyer une notification au client
        // Mettre à jour la commande
        // etc.
    }
}

Middleware de sécurité

Utilisez le middleware SecureTransaction pour protéger vos routes de paiement :

use Weexduunx\AidaGateway\Http\Middleware\SecureTransaction;

// Dans un contrôleur
Route::post('/payment', [PaymentController::class, 'process'])
    ->middleware(SecureTransaction::class);

Le middleware offre :

  • Protection contre les transactions en double
  • Rate limiting par IP
  • Validation des montants
  • Logging des tentatives

Modèle Transaction

Accédez aux transactions via le modèle Eloquent :

use Weexduunx\AidaGateway\Models\Transaction;

// Récupérer toutes les transactions réussies
$successfulTransactions = Transaction::successful()->get();

// Filtrer par gateway
$waveTransactions = Transaction::byGateway('wave')->get();

// Récupérer les transactions en attente
$pendingTransactions = Transaction::pending()->get();

// Récupérer une transaction spécifique
$transaction = Transaction::where('transaction_id', 'TXN_123')->first();

// Vérifier le statut
if ($transaction->isSuccessful()) {
    echo "Transaction réussie";
}

// Obtenir le montant formaté
echo $transaction->formatted_amount; // "5,000.00 XOF"

// Obtenir le nom du gateway
echo $transaction->gateway_display_name; // "Orange Money"

Gestion des erreurs

use Weexduunx\AidaGateway\Exceptions\GatewayNotFoundException;
use Weexduunx\AidaGateway\Exceptions\GatewayNotEnabledException;

try {
    $response = Aida::gateway('invalid_gateway')->pay(...);
} catch (GatewayNotFoundException $e) {
    // Gateway non supporté
} catch (GatewayNotEnabledException $e) {
    // Gateway désactivé dans la configuration
}

Tests

composer test

Sécurité

Si vous découvrez des problèmes de sécurité, veuillez envoyer un email à l'équipe de sécurité au lieu d'utiliser l'issue tracker.

Licence

Ce package est open-source et disponible sous la licence MIT.

Crédits

Support

Pour toute question ou problème, veuillez ouvrir une issue sur GitHub.

统计信息

  • 总下载量: 2
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-11-05