Aller au contenu

SDK PHP

Le SDK sangho/sangho-php supporte PHP 8.0+ avec une interface orientée objet. Compatible avec Laravel, Symfony et tout projet PHP standard.

Installation

bash
composer require sangho/sangho-php

Configurez votre clé API via la méthode statique Sangho::setApiKey(). En production, utilisez des variables d’environnement plutôt que des valeurs hardcodées.

Laravel — façade Sangho

Avec Laravel, publiez le fichier de configuration via php artisan vendor:publish —provider=“Sangho\SanghoServiceProvider”, puis définissez SANGHO_SECRET_KEY dans votre .env. La façade Sangho:: est disponible automatiquement dans tous vos contrôleurs.

Initialisation

php
<?php
use Sangho\Sangho;
// Configuration globale (une seule fois, au bootstrap)
Sangho::setApiKey(getenv('SANGHO_SECRET_KEY'));
// Créer un PaymentIntent
$intent = Sangho::paymentIntents()->create([
    'amount'               => 5000,
    'currency'             => 'XAF',
    'payment_method_types' => ['mobile_money', 'card'],
    'metadata'             => ['order_id' => 'CMD-001'],
]);
echo $intent->client_secret;

Gestion des erreurs

Toutes les exceptions héritent de Sangho\Exception\SanghoException. Utilisez les sous-classes pour différencier les cas métier.

Pagination

Les endpoints de liste retournent un objet ListObject avec les propriétés count, data, has_more. Utilisez page et page_size pour naviguer.

Retry automatique

Le SDK retente automatiquement les erreurs 429 et 5xx avec un backoff exponentiel. Configurez via Sangho::setMaxNetworkRetries(3).

Gestion des erreurs

php
<?php
use Sangho\Exception\AuthenticationException;
use Sangho\Exception\InvalidRequestException;
use Sangho\Exception\RateLimitException;
use Sangho\Exception\SanghoException;


try {
    $intent = Sangho::paymentIntents()->create([
        'amount'   => 5000,
        'currency' => 'XAF',
    ]);
} catch (AuthenticationException $e) {
    // Clé API invalide ou expirée
} catch (InvalidRequestException $e) {
    echo $e->getParam();   // Champ invalide
    echo $e->getMessage();
} catch (RateLimitException $e) {
    // Trop de requêtes — retenter plus tard
} catch (SanghoException $e) {
    echo $e->getCode();    // Code métier Sangho
    echo $e->getMessage(); // Message lisible
    echo $e->getStatus();  // Code HTTP
}

Pagination

php
<?php
$page = Sangho::transactions()->list([
    'status'    => 'completed',
    'page'      => 1,
    'page_size' => 20,
]);
echo $page->count;          // Total de résultats
foreach ($page->data as $tx) {
    echo $tx->id . "\n";
}
// Page suivante
if ($page->has_more) {
    $page2 = Sangho::transactions()->list([
        'status'    => 'completed',
        'page'      => 2,
        'page_size' => 20,
    ]);
}