dunopay / php-sdk
SDK PHP officiel DunoPay — paiements Mobile Money (MTN, MOOV, Wave, Orange…)
v1.0.0
2026-07-24 20:03 UTC
Requires
- php: >=8.0
- ext-curl: *
- ext-json: *
README
SDK PHP officiel de DunoPay — paiements Mobile Money (MTN, MOOV, Wave, Orange…). Zéro dépendance (curl + json).
Installation
composer require dunopay/php-sdk
Créer un paiement
use DunoPay\DunoPayClient; // Le mode (live/sandbox) est déduit du préfixe de la clé $dunopay = new DunoPayClient('sk_live_xxxxx'); $transaction = $dunopay->createTransaction([ 'amount' => 5000, // XOF, entier 'currency' => ['code' => 'XOF'], 'description' => 'Commande #42', 'callback_url' => 'https://boutique.example/webhooks/dunopay', 'return_url' => 'https://boutique.example/merci', 'customer' => [ 'firstname' => 'Awa', 'lastname' => 'Diallo', 'email' => 'awa@example.com', ], 'custom_metadata' => ['order_id' => '42'], ], idempotencyKey: 'order-42'); // rejoué sans doublon en cas de retry // Rediriger le client vers la page de paiement hébergée : header('Location: ' . $transaction['payment_url']);
Vérifier le statut
$tx = $dunopay->getTransaction($transaction['id']); if ($tx['status'] === 'approved') { /* commande payée */ }
Recevoir les webhooks
Configurez un webhook dans le dashboard (Webhooks) et vérifiez toujours la signature avant de traiter l'événement :
use DunoPay\Webhook; use DunoPay\DunoPayException; $payload = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_DUNOPAY_SIGNATURE'] ?? ''; try { $event = Webhook::constructEvent($payload, $signature, $webhookSecret); } catch (DunoPayException $e) { http_response_code(403); exit; } match ($event['event']) { 'transaction.approved' => markOrderPaid($event['transaction']['reference']), 'transaction.declined' => markOrderFailed($event['transaction']['reference']), 'refund.approved' => markOrderRefunded($event['refund']['transaction_id']), default => null, }; http_response_code(200);
Erreurs
Toutes les méthodes lèvent DunoPay\DunoPayException (->httpStatus,
->responseBody) en cas d'erreur API ou réseau.
⚠️ La clé secrète (sk_…) ne doit jamais être exposée côté client.