Skip to content

Exemples de code

Exemples fonctionnels dans les langages les plus utilisés pour intégrer Genius Checkout.

PHP — Créer une session et rediriger

php
$response = Http::withToken($api_key)
    ->post('https://app.geniuscheckout.com/api/v1/checkout-sessions', [
        'amount' => 2500,
        'currency' => 'USD',
        'success_url' => 'https://maboutique.com/success',
        'failure_url' => 'https://maboutique.com/failed',
        'customer' => ['name' => 'Jane', 'email' => '[email protected]'],
        'metadata' => ['order_id' => '1042'],
    ]);

return redirect($response->json('checkout_url'));

Node.js — Créer une session

javascript
const res = await fetch('https://app.geniuscheckout.com/api/v1/checkout-sessions', {
    method: 'POST',
    headers: {
        Authorization: `Bearer ${apiKey}`,
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        amount: 2500,
        currency: 'USD',
        success_url: 'https://maboutique.com/success',
        failure_url: 'https://maboutique.com/failed',
    }),
})
const { checkout_url } = await res.json()

Python — Vérifier la session

python
import requests

r = requests.get(
    f'https://app.geniuscheckout.com/api/v1/checkout-sessions/{session_id}',
    headers={'Authorization': f'Bearer {api_key}'},
)
session = r.json()
if session['status'] == 'completed':
    txn_id = session['transaction']['id']
    token = session['transaction']['token_id']

Webhook handler (PHP)

php
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_GC_SIGNATURE'];
$timestamp = $_SERVER['HTTP_X_GC_TIMESTAMP'];

$expected = hash_hmac('sha256', "$timestamp.$payload", $secret);
if (! hash_equals($expected, $signature)) {
    http_response_code(401);
    exit;
}

// Rejette les événements de plus de 5 minutes (protection anti-rejeu)
if (abs(time() - (int) $timestamp) > 300) {
    http_response_code(401);
    exit;
}

$event = json_decode($payload, true);
$data = $event['payload_redacted'];

if ($event['event_type'] === 'payment.completed') {
    mark_order_paid($data['metadata']['order_id'], $data['transaction_id']);
    store_token($data['token_id']); // Pour la récurrence
}

http_response_code(200);

Facturation récurrente

php
$r = Http::withToken($api_key)
    ->post('https://app.geniuscheckout.com/api/v1/charge-token', [
        'token_id' => $stored_token,
        'amount' => 999,
        'currency' => 'USD',
    ]);

if ($r->json('status') === 'captured') {
    // Renouvellement réussi
}

Remboursement

php
$r = Http::withToken($api_key)
    ->post("https://app.geniuscheckout.com/api/v1/payments/{$txn_id}/refund", [
        'amount' => 500, // Remboursement partiel 5,00 $
        'reason' => 'Customer request',
    ]);

Bonnes pratiques

  • Incluez toujours un Idempotency-Key (un UUID) sur les requêtes POST.
  • Considérez le webhook comme la source de vérité pour la livraison, pas la redirection.
  • Rendez votre logique de livraison idempotente sur transaction_id.
  • Stockez token_id sur la fiche client si vous prévoyez des paiements futurs.

Released under the proprietary Genius Checkout license.