Skip to content

Ejemplos de código

Ejemplos funcionales en los lenguajes más usados para integrar Genius Checkout.

PHP — Crear sesión y redirigir

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

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

Node.js — Crear sesión

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://mistore.com/success',
        failure_url: 'https://mistore.com/failed',
    }),
})
const { checkout_url } = await res.json()

Python — Verificar sesión

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;
}

// Rechaza eventos de más de 5 minutos (protección contra replay)
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']); // Para recurrencia
}

http_response_code(200);

Cobro recurrente

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') {
    // Renovación exitosa
}

Reembolso

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

Patrones idiomáticos

  • Incluye siempre un Idempotency-Key (un UUID) en solicitudes POST.
  • Trata el webhook como fuente de verdad para el cumplimiento, no la redirección.
  • Haz tu cumplimiento idempotente sobre transaction_id.
  • Guarda token_id en el registro del cliente si vas a necesitar cobros futuros.

Released under the proprietary Genius Checkout license.