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_iden el registro del cliente si vas a necesitar cobros futuros.
