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í | د.إ |