Zahlungen

Endpoints zur Verarbeitung von Zahlungen mit Stripe.

Stripe-Integration

SalonBookIt verwendet Stripe zur Zahlungsabwicklung. Das Widget handhabt den gesamten Ablauf automatisch. Diese Endpoints sind für benutzerdefinierte Integrationen.

POST /api/v1/pagos/intent/

Erstellt einen Stripe PaymentIntent zur Zahlungsabwicklung.

Body-Parameter

Parameter Typ Erforderlich Beschreibung
cliente_id integer Ja Kunden-ID
amount integer Ja Betrag in Cent (z.B.: 2500 = 25,00€)
type string Ja booking, order oder points
reference_id integer Ja ID der Buchung, Bestellung oder des Punktepakets

Anfrage-Beispiel

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

Antwort (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"
    }
}

Frontend-Verwendung

Verwenden Sie das client_secret mit Stripe.js, um die Zahlung abzuschließen:

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

// Kartenelement erstellen
const cardElement = elements.create('card');
cardElement.mount('#card-element');

// Zahlung bestätigen
const { error, paymentIntent } = await stripe.confirmCardPayment(
    response.data.client_secret,
    {
        payment_method: {
            card: cardElement,
            billing_details: {
                name: 'Juan Pérez',
                email: 'juan@email.com'
            }
        }
    }
);

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

Bestätigt eine Zahlung, nachdem Stripe sie verarbeitet hat.

Body-Parameter

Parameter Typ Beschreibung
payment_intent_id string Stripe PaymentIntent-ID

Antwort (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/..."
    }
}

Stripe-Webhook

SalonBookIt empfängt Stripe-Webhooks automatisch unter:

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

Verarbeitete Ereignisse:

Stripe-Ereignis Aktion
payment_intent.succeeded Markiert Zahlung als abgeschlossen, aktualisiert Buchung
payment_intent.payment_failed Markiert Zahlung als fehlgeschlagen, benachrichtigt Kunden
charge.refunded Registriert die Rückerstattung
charge.dispute.created Benachrichtigt das Geschäft über Streitfall
Sie müssen nichts konfigurieren

Der Stripe-Webhook wird automatisch konfiguriert, wenn Sie Ihr Stripe-Konto im Dashboard verbinden.

Zahlungsfehler

Code HTTP Beschreibung
STRIPE_NOT_CONFIGURED 400 Das Geschäft hat Stripe nicht konfiguriert
INVALID_AMOUNT 400 Ungültiger Betrag (muss positiv sein)
BOOKING_ALREADY_PAID 400 Die Buchung wurde bereits bezahlt
PAYMENT_FAILED 400 Fehler bei der Zahlungsabwicklung (siehe Stripe-Nachricht)
CARD_DECLINED 400 Karte abgelehnt

Unterstützte Währungen

Code Währung Symbol
EUR Euro
USD US-Dollar $
GBP Britisches Pfund £
AED VAE-Dirham د.إ