Search by

SDK PHP officiel, sans dépendance de runtime, pour l'API marchand AsukaPay (/api/v1).

v1.0.0 2026-09-30 16:01 UTC

This package is auto-updated.

Last update: 2026-10-25 23:24:59 UTC


README

SDK PHP officiel, sans dépendance de runtime (juste ext-curl et ext-json), pour l'API marchand AsukaPay v1 — Mobile Money et carte bancaire en Afrique de l'Ouest et du Centre.

Requiert PHP 8.1+.

Installation

composer require asukapay/sdk

Utilisation

use Asukapay\Client;

$client = new Client($_ENV['ASUKAPAY_SECRET_KEY']);

$payment = $client->payments->create([
    'amount' => 5000,
    'operator' => 'mtn',
    'phone_number' => '22997000000',
    'external_id' => 'cmd_1042', // rend l'appel idempotent — voir reference.html
]);

L'environnement (production ou bac à sable) suit le préfixe de la clé (sk_… ou sk_test_…), jamais un paramètre séparé.

Ressources disponibles

Ressource Méthodes
$client->payments create, list, get, refund
$client->refunds list, get
$client->paymentLinks create, list, get
$client->paymentModes list, fees
$client->balance get
$client->webhooks getEndpoint, setEndpoint, test, deliveries

Chaque méthode renvoie un tableau associatif décodé directement du JSON — voir reference.html pour la forme exacte de chaque objet.

Gérer les erreurs

Toute erreur API lève Asukapay\Exception\ApiException, avec un code stable (liste complète) — c'est lui qu'il faut tester, jamais getMessage() (texte humain, peut changer sans préavis).

use Asukapay\Exception\ApiException;

try {
    $client->payments->create(['amount' => 5000, 'operator' => 'mtn', 'phone_number' => '22997000000']);
} catch (ApiException $e) {
    match ($e->getErrorCode()) {
        'invalid_request' => afficherErreursChamps($e->getDetails() ?? []),
        'rate_limited' => reprogrammer($e->getRetryAfter()),
        default => incidentTechnique($e->getErrorCode()), // code inconnu = incident récupérable, pas une rupture
    };
}

Ne rejouez un payments->create(...) après un timeout que si vous aviez fourni external_id — sans lui, vous débitez le client deux fois.

Vérifier un webhook

use Asukapay\Webhook;
use Asukapay\Exception\WebhookSignatureException;

$raw = file_get_contents('php://input'); // corps BRUT, avant tout parsing
$header = $_SERVER['HTTP_X_ASUKAPAY_SIGNATURE'] ?? '';

try {
    $event = Webhook::verifySignature($raw, $header, $_ENV['ASUKAPAY_WEBHOOK_SECRET']);
    // … traitement idempotent sur $event['id'], puis :
    http_response_code(204);
} catch (WebhookSignatureException $e) {
    http_response_code(400);
    echo $e->getMessage();
}

Voir webhooks.html pour le détail du calcul et des réessais.

Développement

composer install
composer test   # phpunit