Retour aux SDKs
P

PHP SDK

v1.0.0

SDK officiel pour PHP 8.1+ avec support Laravel et Symfony

GitHub

Installation

composer require simiz/simiz-php

Configuration

<?php

require_once 'vendor/autoload.php';

use Simiz\Client;

// Initialiser le client
$simiz = new Client(getenv('SIMIZ_SECRET_KEY'));

// Ou avec des options
$simiz = new Client(getenv('SIMIZ_SECRET_KEY'), [
    'apiVersion' => '2024-01',
    'timeout' => 30,
    'maxRetries' => 3,
]);

Utilisation

Créer une transaction

<?php

$transaction = $simiz->transactions->create([
    'amount' => 5000,
    'currency' => 'XAF',
    'payment_method' => 'ORANGE_MONEY',
    'payer' => [
        'phone' => '237690000000',
        'name' => 'John Doe',
        'email' => 'john@example.com',
    ],
    'description' => 'Achat sur Ma Boutique',
    'reference' => 'ORDER-123',
    'metadata' => [
        'order_id' => '123',
        'customer_id' => 'cust_456',
    ],
    'callback_url' => 'https://votre-site.com/webhooks/simiz',
    'return_url' => 'https://votre-site.com/payment/success',
]);

echo $transaction->id; // tx_xxx
echo $transaction->status; // PENDING
echo $transaction->payment_url; // URL de paiement

Récupérer une transaction

<?php

$transaction = $simiz->transactions->retrieve('tx_xxx');

if ($transaction->status === 'COMPLETED') {
    echo 'Paiement réussi!';
}

Lister les transactions

<?php

$transactions = $simiz->transactions->all([
    'limit' => 20,
    'status' => 'COMPLETED',
    'created_after' => '2024-01-01',
]);

foreach ($transactions->data as $tx) {
    echo $tx->id . ' - ' . $tx->amount . PHP_EOL;
}

// Pagination automatique
foreach ($simiz->transactions->autoPagingIterator() as $tx) {
    echo $tx->id . PHP_EOL;
}

Intégration Laravel

Le SDK inclut un ServiceProvider et une Facade pour Laravel.

Configuration (.env)

SIMIZ_SECRET_KEY=sk_live_xxx
SIMIZ_WEBHOOK_SECRET=whsec_xxx

Utilisation avec Facade

<?php

namespace App\Http\Controllers;

use Simiz\Laravel\Facades\Simiz;
use Illuminate\Http\Request;

class PaymentController extends Controller
{
    public function checkout(Request $request)
    {
        $validated = $request->validate([
            'amount' => 'required|numeric|min:100',
            'phone' => 'required|string',
        ]);

        $transaction = Simiz::transactions()->create([
            'amount' => $validated['amount'],
            'currency' => 'XAF',
            'payment_method' => 'ORANGE_MONEY',
            'payer' => ['phone' => $validated['phone']],
            'callback_url' => route('webhooks.simiz'),
            'return_url' => route('payment.success'),
        ]);

        return response()->json([
            'transaction_id' => $transaction->id,
            'payment_url' => $transaction->payment_url,
        ]);
    }
}

Webhooks

<?php

namespace App\Http\Controllers;

use Simiz\Webhook;
use Simiz\Exception\SignatureVerificationException;
use Illuminate\Http\Request;

class WebhookController extends Controller
{
    public function handle(Request $request)
    {
        $payload = $request->getContent();
        $signature = $request->header('X-Simiz-Signature');

        try {
            $event = Webhook::constructEvent(
                $payload,
                $signature,
                config('services.simiz.webhook_secret')
            );
        } catch (SignatureVerificationException $e) {
            return response('Invalid signature', 400);
        }

        switch ($event->type) {
            case 'transaction.completed':
                $transaction = $event->data;
                // Mettre à jour la commande
                Order::where('payment_id', $transaction->id)
                    ->update(['status' => 'paid']);
                break;

            case 'transaction.failed':
                // Gérer l'échec
                break;
        }

        return response('OK', 200);
    }
}

Gestion des erreurs

<?php

use Simiz\Exception\AuthenticationException;
use Simiz\Exception\InvalidRequestException;
use Simiz\Exception\ApiException;

try {
    $transaction = $simiz->transactions->create([...]);
} catch (AuthenticationException $e) {
    // Clé API invalide
    error_log('Vérifiez votre clé API');
} catch (InvalidRequestException $e) {
    // Paramètres invalides
    error_log('Erreur: ' . $e->getMessage());
    error_log('Paramètre: ' . $e->getParam());
} catch (ApiException $e) {
    // Erreur serveur
    error_log('Erreur API: ' . $e->getMessage());
}