Guía de Integración de BunnyPay
Introducción
¡Bienvenido a BunnyPay! Esta guía le mostrará cómo integrar de forma rápida y segura nuestra pasarela de pagos en su tienda o aplicación web. El modelo de integración de BunnyPay es un flujo de redirección segura. Esto significa que su servidor nunca maneja información sensible del cliente (como PIN o CVC), lo que garantiza la máxima seguridad para usted y sus compradores.
El Flujo de Pago
El proceso se resume en 3 sencillos pasos:
- Iniciar la Transacción: Su servidor se comunica con la API de BunnyPay para solicitar un nuevo pago.
- Redirección del Cliente: BunnyPay responde con una URL de pago única. Su sitio web redirige al cliente a esta página segura.
- Confirmación y Retorno: Una vez completado el pago, BunnyPay redirige al cliente de vuelta a su tienda con la confirmación de la transacción.
Paso 1: Iniciar la Solicitud de Pago
Para comenzar una transacción, debe realizar una llamada POST
desde su servidor al endpoint de la API de BunnyPay, enviando los datos en formato JSON
.
Parámetros de la Solicitud
Parámetro | Tipo | Obligatorio | Descripción |
---|---|---|---|
api_key |
String | Sí | Su clave de API secreta para autenticar la tienda. |
monto |
Float | Sí | El monto total a cobrar. Use un punto como separador decimal (ej: 10.50 ). |
id_orden_tienda |
String | Sí | Un identificador único para esta orden en su sistema (ej: "ORDEN-2025-001"). |
url_exito |
String | Sí | La URL a la que se redirigirá al cliente si el pago es exitoso. |
url_fallo |
String | Sí | La URL a la que se redirigirá al cliente si el pago falla o es cancelado. |
Ejemplo de Código (PHP con cURL)
<?php
// Datos de la orden en su tienda
$datos_pago = [
'api_key' => 'SU_API_KEY_SECRETA_AQUI',
'monto' => 25.99,
'id_orden_tienda' => 'ORDEN-' . uniqid(),
'url_exito' => 'https://sutienda.com/pago_confirmado.php',
'url_fallo' => 'https://sutienda.com/pago_fallido.php'
];
// Iniciar la llamada a la API de BunnyPay
$ch = curl_init('https://api.bunnypay.me/iniciar_pago.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($datos_pago));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
$respuesta_json = curl_exec($ch);
curl_close($ch);
$respuesta = json_decode($respuesta_json, true);
// Procesar la respuesta
if (isset($respuesta['status']) && $respuesta['status'] === 'exitoso') {
// Redirigir al cliente a la pasarela de pago
header('Location: ' . $respuesta['data']['url_redireccion']);
exit();
} else {
// Hubo un error al iniciar el pago
$mensaje_error = $respuesta['data']['mensaje'] ?? 'Error desconocido al conectar con BunnyPay.';
echo "Error: " . htmlspecialchars($mensaje_error);
}
?>
Paso 2: Manejar la Respuesta de la API
BunnyPay le responderá con un objeto JSON.
Respuesta Exitosa
{
"status": "exitoso",
"data": {
"url_redireccion": "https://pagos.bunnypay.me/pagar.php?sesion=bpay_sess_xxxxxxxxxxxx"
}
}
Respuesta Fallida
{
"status": "fallido",
"data": {
"mensaje": "Clave de API no válida."
}
}
Paso 3: Verificar la Confirmación del Pago
Una vez que el cliente completa el pago, BunnyPay lo redirigirá a su url_exito
, incluyendo dos parámetros GET
en la URL.
URL de ejemplo: https://sutienda.com/pago_confirmado.php?orden=ORDEN-XXXXX&transaccion_id=bpay_sess_YYYYY
En su página de confirmación, debe buscar la orden en su base de datos usando el parámetro orden
y actualizar su estado a "completado". Esto previene que alguien acceda a la página de éxito directamente para obtener un producto sin haber pagado.
Ejemplo de pago_confirmado.php
<?php
// Conectar a la base de datos de su tienda
// require_once 'db_tienda.php';
$id_orden_recibida = $_GET['orden'] ?? '';
$id_transaccion_bunnypay = $_GET['transaccion_id'] ?? '';
if (empty($id_orden_recibida)) {
die("Error: No se recibió un identificador de orden.");
}
// 1. Buscar la orden en su base de datos y verificar que está "pendiente"
// $stmt = $db_tienda->prepare("SELECT estado FROM ordenes WHERE id_orden = ?");
// $stmt->execute([$id_orden_recibida]);
// $orden = $stmt->fetch();
// 2. Si la orden es válida, actualizar su estado a "completado"
// if ($orden && $orden['estado'] === 'pendiente') {
// $update_stmt = $db_tienda->prepare("UPDATE ordenes SET estado = 'completado' WHERE id_orden = ?");
// $update_stmt->execute([$id_orden_recibida]);
// 3. Mostrar mensaje de éxito
echo "<h1>¡Gracias por su compra!</h1>";
echo "<p>Su pago ha sido procesado exitosamente.</p>";
echo "<p>Número de Orden: " . htmlspecialchars($id_orden_recibida) . "</p>";
// } else {
// echo "<h1>Error de Validación</h1>";
// }
?>