Entwicklerdokumentation

Payment Intents

Einen anbieterneutralen Payment Intent für die Anzahlung anlegen – was Sie senden, was zurückkommt und warum Kartendaten diese API nie berühren.

Ein Payment Intent hält fest, dass für eine Reservierung eine Anzahlung fällig ist, und liefert Ihnen, was ein Zahlungsanbieter zum Einziehen braucht. Die API sieht nie Kartennummern: Der Intent trägt ein clientSecret für den clientseitigen Ablauf des Anbieters oder eine checkoutUrl, zu der Sie den Gast schicken. Er folgt denselben Schlüsselregeln wie der Rest von /api/venues/**. Das einbettbare Widget ruft ihn nicht auf – es endet bei der Reservierung und überlässt die Anzahlung der Konsole der Location oder Ihrem Server (Buchungsablauf); eine eigene Seite kann ihn mit einem veröffentlichbaren Schlüssel aufrufen, nach einer Reservierung mit depositRequired: true, genau wie unten gezeigt.

Endpunkte

POST /api/venues/{venueSlug}/payment-intents

Request-Body (Content-Type: application/json)

Feld Erforderlich Bedeutung
reservationReference ja Die reference der Reservierung (BDP-XXXX)
amount ja 0,01–100000, normalerweise der depositAmount der Reservierung
currency ja Dreibuchstabiger ISO-4217-Code, die currency der Reservierung
provider nein Reserviert für die Anbieterwahl, sobald mehr als einer konfiguriert ist; heute wird es ignoriert – der Anbieter ergibt sich aus der Serverkonfiguration (fake standardmäßig, stripe sobald Stripe:SecretKey gesetzt ist)

Antwort 201 Created

Feld Typ Bedeutung
id GUID Der Intent
reservationReference string Wofür er zahlt
amount, currency decimal, string Was fällig ist
status string Der Status des Anbieters – anbieterspezifisch, z. B. RequiresConfirmation bei fake, ein Stripe-Checkout-Session-Status wie open bei stripe
provider string Welcher Anbieter ihn angelegt hat
clientSecret string Übergeben Sie es der Client-Bibliothek des Anbieters auf dem Gerät des Gastes – nie protokollieren
checkoutUrl string oder null Wenn gesetzt, leiten Sie den Gast stattdessen dorthin
createdAt ISO-8601-Zeitpunkt Wann der Intent angelegt wurde
{
  "id": "79501bb3-1e05-4827-82ed-1086e889b3bd",
  "reservationReference": "BDP-KSQS",
  "amount": 20.00,
  "currency": "EUR",
  "status": "RequiresConfirmation",
  "provider": "fake",
  "clientSecret": "pi_fake_156d81370b0445619159a5028cc87bff_secret_82d75f634cbb4beaaf530982b18e492c",
  "createdAt": "2026-09-15T12:55:15.2187185+00:00",
  "checkoutUrl": null
}

Fehler

Status Wann
400 Ein Feld scheitert an der Validierung (errors nennt es)
404 Keine Location mit diesem Slug oder keine Reservierung mit dieser Referenz an dieser Location
409 Diese Location hat Online-Zahlungen nicht aktiviert – den Anzahlungsschritt überspringen und die Reservierung als von der Location bestätigt behandeln

curl

curl -X POST "https://api.bookdineplay.com/api/venues/your-venue/payment-intents" \
  -H "X-BookDinePlay-Key: bdp_pk_your_publishable_key" \
  -H "Origin: https://www.your-venue.example" \
  -H "Content-Type: application/json" \
  -d '{ "reservationReference": "BDP-7K2Q", "amount": 20.00, "currency": "EUR" }'

JavaScript

const intent = await (await fetch('https://api.bookdineplay.com/api/venues/your-venue/payment-intents', {
  method: 'POST',
  headers: { 'X-BookDinePlay-Key': 'bdp_pk_your_publishable_key', 'Content-Type': 'application/json' },
  body: JSON.stringify({ reservationReference: reservation.reference, amount: reservation.depositAmount, currency: reservation.currency })
})).json();
if (intent.checkoutUrl) location.assign(intent.checkoutUrl);

C#

var intent = await client.CreatePaymentIntentAsync("your-venue", new CreatePaymentIntentRequest
{
    ReservationReference = reservation.Reference,
    Amount = reservation.DepositAmount ?? 0m,
    Currency = reservation.Currency
}, cancellationToken);

Nächste Schritte

  • Reservierungen – woher depositAmount kommt.
  • .NET-SDKCreatePaymentIntentAsync und die Ausnahme, die es bei 409 wirft.