PHP code example of haybtech / php-sdk

1. Go to this page and download the library: Download haybtech/php-sdk library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

haybtech / php-sdk example snippets


use HayBTech\HayBTech;

$result = HayBTech::payments()->create([...]);

HayBTech::configure('sk_live_votre_cle_secrete');

$result = HayBTech::payments()->create([
    'merchant_ref' => 'CMD-' . uniqid(),
    'amount'       => 25000,
    'currency'     => 'XOF',
    'success_url'  => 'https://monsite.sn/succes',
    'failed_url'   => 'https://monsite.sn/annulation',
    'callback_url' => 'https://monsite.sn/webhook',
]);

// Redirection automatique vers le guichet de paiement
$result->redirect();

$paymentUrl = $result['data']['payment_url'];
$txnId      = $result['data']['id'];

if ($result->successful()) {
    // La requete API a reussi
}

use HayBTech\Exceptions\SignatureException;

try {
    $event = HayBTech::webhook()::constructEvent(
        file_get_contents('php://input'),
        $_SERVER['HTTP_X_HAYBTECH_SIGNATURE'] ?? '',
        getenv('HAYBTECH_WEBHOOK_SECRET')
    );
} catch (SignatureException $e) {
    // Signature invalide ou attaque par rejeu detectee
    http_response_code(403);
    exit;
}

// Traitement de l'evenement
if ($event['event'] === 'payment.success') {
    $orderId = $event['data']['merchant_ref'];
}

use HayBTech\HayBTechClient;
use HayBTech\Webhook\AutoVerifier;
use HayBTech\Webhook\FilesystemWebhookSecretCache;

$client = new HayBTechClient(getenv('HAYBTECH_SECRET_KEY'));
$cache  = new FilesystemWebhookSecretCache(__DIR__ . '/storage/hayb-cache');
$auto   = new AutoVerifier($client, $cache);

try {
    $event = $auto->constructEvent(
        file_get_contents('php://input'),
        $_SERVER['HTTP_X_HAYBTECH_SIGNATURE'] ?? '',
        getenv('HAYBTECH_WEBHOOK_ENDPOINT_ID')
    );
} catch (\HayBTech\Exceptions\SignatureException $e) {
    http_response_code(403); exit;
} catch (\HayBTech\Exceptions\HayBTechException $e) {
    http_response_code(503); exit; // HayBTech injoignable → laisse retry
}

// Lister vos endpoints
$endpoints = HayBTech::webhooks()->all();

// Creer un nouvel endpoint
HayBTech::webhooks()->create([
    'url' => 'https://api.monsite.com/hooks',
    'subscribed_events' => ['payment.success']
]);

// Recuperer le secret HMAC d'un endpoint (utilise par AutoVerifier sous le capot).
// L'auth se fait via votre sk_live_*/sk_test_* ; pas d'OTP cote API merchant.
$res = HayBTech::webhooks()->revealSecret($id);
echo $res['secret'];

// Verifier qu'un endpoint joint correctement HayBTech (ping de test).
HayBTech::webhooks()->sendTestPing($id);

// Rechercher un endpoint par URL exacte (anti-doublon a l'installation).
HayBTech::webhooks()->lookup('https://monsite.sn/hooks');

use HayBTech\Exceptions\ApiException;
use HayBTech\Exceptions\HayBTechException;

try {
    $result = HayBTech::payments()->create($params);
} catch (ApiException $e) {
    $e->getMessage();    // message lisible
    $e->getHttpStatus(); // 400, 422, 500...
    $e->getErrorCode();  // ex. "insufficient_funds"
    $e->isRetryable();   // true si 5xx ou 429 -> retry avec backoff
} catch (HayBTechException $e) {
    // SDK non configure, curl indisponible, cle invalide...
    $e->getMessage();
}

HayBTech::configure('sk_test_...'); // aucun debit reel

// Client explicite (multi-compte, timeout custom)
// N'affecte pas le client partage configure via configure()
// Le mode test/live est determine par la cle (sk_test_… vs sk_live_…), pas par l'URL.
$client = HayBTech::client('sk_test_autre_compte', [
    'timeout' => 60,
]);

$client->payments->create([...]);

$result = HayBTech::payments()->create([
    'merchant_ref' => 'CMD-' . uniqid(),
    'amount'       => 25000,
    'currency'     => 'XOF',
    'provider'     => 'orange_money_sn',
    'callback_url' => 'https://monsite.sn/webhook',
    'metadata'     => [
        'payment_channel' => 'push',
        'customer_msisdn' => '+221771234567',
    ],
]);

// payments->retrieve() lit la ligne locale uniquement (rapide, peut etre perime).
$txn = HayBTech::payments()->retrieve('TXN-abc123');

// status->retrieve() pull aussi le PSP si la ligne locale est non-terminale.
// A privilegier quand vous soupconnez un statut periode (sandbox, timeout, etc.).
$txn = HayBTech::status()->retrieve('TXN-abc123');
text
Agis en tant qu'expert en développement PHP. Je souhaite intégrer la solution de paiement HayBTech (Afrique de l'Ouest) sur mon site marchand de A à Z avec le SDK PHP officiel `haybtech/php-sdk`.

Voici ma stack technique actuelle :
- Framework : [ex: Laravel, Symfony, PHP Pur/MVC]
- Base de données & ORM : [ex: Eloquent, Doctrine, PDO]
- Modèle de commande : [décrivez brièvement votre structure de table Order]

Tâches à accomplir dans le code généré :
1. **Configuration** : Initialiser le SDK HayBTech (`HayBTech::configure(...)` ou via la clé `HAYBTECH_SECRET_KEY` dans le fichier `.env`).
2. **Création du Paiement** : Créer un contrôleur de checkout. Récupérer la commande, appeler `HayBTech::payments()->create([...])` avec `merchant_ref`, `amount`, `currency` (XOF), `success_url`, `failed_url`, et `callback_url`. Rediriger automatiquement le client avec la méthode `$result->redirect()` ou renvoyer l'URL.
3. **Webhook de Validation** : Créer la route de webhook. Elle doit :
   - Récupérer le flux brut (`file_get_contents('php://input')`) et le header `HTTP_X_HAYBTECH_SIGNATURE`.
   - Valider la signature via `HayBTech::webhook()::constructEvent(...)` ou `AutoVerifier` pour sécuriser l'endpoint sans faille de sécurité.
   - Vérifier de manière idempotente si la commande n'est pas déjà validée en base de données.
   - Traiter `payment.success` (livrer la commande/passer le statut à payé) et `payment.failed` (annuler la commande).
   - Renvoyer un code HTTP 200.
4. **Sécurité & Gestion des Erreurs** : Gérer les exceptions `ApiException` et `SignatureException` de manière sécurisée en masquant les données sensibles dans les logs.

Génère un code propre, conforme aux bonnes pratiques PHP modernes (PSR), bien commenté et prêt à l'emploi.
bash
composer 
bash
git remote add origin https://github.com/haybtech/php-sdk.git
git push -u origin main --tags