asukapay / sdk
SDK PHP officiel, sans dépendance de runtime, pour l'API marchand AsukaPay (/api/v1).
Requires
- php: >=8.1
- ext-curl: *
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^10.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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