dunopay/php-sdk

SDK PHP officiel DunoPay — paiements Mobile Money (MTN, MOOV, Wave, Orange…)

Maintainers

Package info

github.com/laurant94/dunopay-php

Homepage

pkg:composer/dunopay/php-sdk

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-07-24 20:03 UTC

This package is auto-updated.

Last update: 2026-07-24 22:38:40 UTC


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.