Dashboard

Pagos

Endpoints para procesar pagos con Stripe.

Integracion Stripe

SalonBookIt usa Stripe para procesar pagos. El widget maneja todo el flujo automaticamente. Estos endpoints son para integraciones personalizadas.

POST /api/v1/pagos/intent/

Crea un PaymentIntent de Stripe para procesar un pago.

Body parameters

Parametro Tipo Requerido Descripcion
cliente_id integer Si ID del cliente
amount integer Si Monto en centimos (ej: 2500 = 25.00€)
type string Si booking, order, o points
reference_id integer Si ID de la reserva, pedido o paquete de puntos

Ejemplo de peticion

cURL
curl -X POST "https://app.salonbookit.com/api/v1/pagos/intent/" \
  -H "X-API-Key: hh_live_abc123..." \
  -H "Authorization: Bearer eyJhbG..." \
  -H "Content-Type: application/json" \
  -d '{
    "cliente_id": 456,
    "amount": 2500,
    "type": "booking",
    "reference_id": 12345
  }'

Respuesta (200 OK)

JSON
{
    "success": true,
    "data": {
        "client_secret": "pi_3N...secret_abc123",
        "payment_intent_id": "pi_3N...",
        "amount": 2500,
        "currency": "eur",
        "stripe_publishable_key": "pk_live_...",
        "customer_id": "cus_abc123"
    }
}

Uso en frontend

Usa el client_secret con Stripe.js para completar el pago:

JavaScript
// Inicializar Stripe
const stripe = Stripe('pk_live_...');
const elements = stripe.elements({
    clientSecret: response.data.client_secret
});

// Crear elemento de tarjeta
const cardElement = elements.create('card');
cardElement.mount('#card-element');

// Confirmar pago
const { error, paymentIntent } = await stripe.confirmCardPayment(
    response.data.client_secret,
    {
        payment_method: {
            card: cardElement,
            billing_details: {
                name: 'Juan Perez',
                email: 'juan@email.com'
            }
        }
    }
);

if (error) {
    console.error('Error:', error.message);
} else if (paymentIntent.status === 'succeeded') {
    // Pago exitoso
    console.log('Pago completado:', paymentIntent.id);
}
POST /api/v1/pagos/confirmar/

Confirma un pago despues de que Stripe lo procese.

Body parameters

Parametro Tipo Descripcion
payment_intent_id string ID del PaymentIntent de Stripe

Respuesta (200 OK)

JSON
{
    "success": true,
    "data": {
        "pago_id": 789,
        "estado": "completado",
        "monto": 25.00,
        "moneda": "EUR",
        "reserva_actualizada": true,
        "puntos_otorgados": 25,
        "recibo_url": "https://pay.stripe.com/receipts/..."
    }
}

Webhook de Stripe

SalonBookIt recibe webhooks de Stripe automaticamente en:

POST https://app.salonbookit.com/api/v1/webhooks/stripe/

Eventos procesados:

Evento Stripe Accion
payment_intent.succeeded Marca el pago como completado, actualiza reserva
payment_intent.payment_failed Marca el pago como fallido, notifica al cliente
charge.refunded Registra el reembolso
charge.dispute.created Notifica al negocio de disputa
No necesitas configurar nada

El webhook de Stripe se configura automaticamente al conectar tu cuenta de Stripe en el Dashboard.

Errores de pago

Codigo HTTP Descripcion
STRIPE_NOT_CONFIGURED 400 El negocio no tiene Stripe configurado
INVALID_AMOUNT 400 Monto invalido (debe ser positivo)
BOOKING_ALREADY_PAID 400 La reserva ya fue pagada
PAYMENT_FAILED 400 Error al procesar el pago (ver mensaje de Stripe)
CARD_DECLINED 400 Tarjeta rechazada

Monedas soportadas

Codigo Moneda Simbolo
EUR Euro
USD Dolar estadounidense $
GBP Libra esterlina £
AED Dirham emiratí د.إ