Zum Inhalt springen

Checkout abschließen und Zahlung mit der Booking API abwickeln

Last verified
Last verified 23. Sept. 2026

Mit dieser Anleitung machen Sie aus einem gefüllten Warenkorb eine bezahlte Bestellung. Sie behandelt die Prüfungen vor dem Checkout, die rechtlichen Einwilligungen, die Übergabe an die gehostete Zahlungsseite, den Zahlungsstatus und die Bereitstellung der Tickets. Der Schnellstart für die Booking API zeigt den kürzesten Weg; diese Anleitung erklärt die Entscheidungen auf diesem Weg.

Bevor Sie beginnen

  • Ein Warenkorb mit mindestens einer Position und sein Warenkorb-Token.
  • Name, E-Mail-Adresse und Rechnungsadresse des Kunden.

Warenkorb vor dem Checkout prüfen

Lesen Sie den Warenkorb mit request(id: <cart token>) und werten Sie diese Felder aus:

FeldBedeutung und Vorgehen
checkoutPolicy.targetStateBOOKED wird mit requestPaymentInitiate abgeschlossen. RESERVED und REQUESTED lassen sich noch nicht über die Booking API abschließen; verlinken Sie stattdessen auf das Angebot im gehosteten Shop.
checkoutPolicy.compatible und conflictsBei false entfernen Sie die Positionen aus conflicts oder schließen sie in einem eigenen Warenkorb ab.
requiresShippingBei true braucht der Kunde eine Lieferadresse in einem Land aus shop.allowedShippingCountries.
customFieldsCompletion.allRequiredCompleteBei false starten Sie den Checkout nicht. Die Booking API kann diese Angaben nicht erfassen. Leiten Sie den Kunden zum Kaufabschluss in den gehosteten Shop weiter.
requestItems.requiresWithdrawalEarlyStartConsentBei true für eine Position holen Sie die unten beschriebene Einwilligung zum vorzeitigen Beginn ein.
checkoutHold.secondsRemainingVerbleibende Zeit, bis eine unbezahlte Bestellung storniert wird. Zeigen Sie sie an, bis die Zahlung erfolgreich ist.

Die Adresse eines Angebots im gehosteten Shop besteht aus der Domain des Shops, dem zweistelligen Sprachcode und shopSlug.slugTranslated des Angebots, zum Beispiel https://tickets.example.com/de/fuehrung.

Kunden hinzufügen

Übermitteln Sie den Kunden mit requestUpdate, wie im Schnellstart gezeigt. Kennzeichnen Sie die Rechnungsadresse mit billing: true und, wenn der Warenkorb einen Versand erfordert, eine Lieferadresse mit shipping: true. Dieselbe Adresse kann beide Kennzeichnungen haben.

Rechtliche Einwilligungen einholen

Laden Sie mit legalDocuments(required: [true]) die Dokumente, denen Kunden zustimmen müssen. Zeigen Sie für jedes Dokument ein Kontrollkästchen mit checkboxLabelTranslated an, oder mit nameTranslated, wenn keine Beschriftung hinterlegt ist. Zeigen Sie den Dokumenttext aus contentTranslated an; wenn isUrl den Wert true hat, ist der Inhalt ein Link auf das Dokument.

Senden Sie beim Checkout für jedes erforderliche Dokument eine Zustimmung. legalDocumentVersion muss dem publishedAt-Wert entsprechen, den der Kunde gesehen hat. Ändert sich ein Dokument zwischen Anzeige und Checkout, schlägt der Checkout mit einem Fehler zu legalDocumentAcceptances fehl. Laden Sie die Dokumente dann neu und fragen Sie den Kunden erneut.

Einwilligung zum vorzeitigen Beginn einholen

Manche Leistungen dürfen nur verkauft werden, wenn der Kunde zustimmt, dass die Leistung vor Ablauf der gesetzlichen Widerrufsfrist beginnt. Wenn eine Position requiresWithdrawalEarlyStartConsent hat, zeigen Sie ein Kontrollkästchen mit Ihrem Einwilligungstext an und senden Sie das Ergebnis beim Checkout mit:

json
{
  "withdrawalEarlyStartConsent": {
    "accepted": true,
    "requestItemIds": ["<cart line id>"],
    "text": "I agree that the service starts before the withdrawal period ends."
  }
}

text muss genau der Text sein, den der Kunde gesehen hat.

Checkout abschließen

Rufen Sie requestPaymentInitiate mit dem Warenkorb-Token, den rechtlichen Zustimmungen und bei Bedarf der Einwilligung zum vorzeitigen Beginn auf. Der Schnellstart zeigt die vollständige Mutation.

ErgebnisVorgehen
invoice mit paymentLinkLeiten Sie den Kunden zu paymentLink weiter.
invoice.paymentState ist PAIDEs ist nichts mehr zu zahlen, zum Beispiel weil ein Gutschein den gesamten Betrag deckt. Die Bestellung ist abgeschlossen; leiten Sie nicht weiter.
errorsZeigen Sie messageTranslated an. Der Warenkorb bleibt unverändert; korrigieren Sie die Eingabe und versuchen Sie es erneut.

Zahlung an die gehostete Zahlungsseite übergeben

paymentLink öffnet die Zahlungsseite des Shops für diese Rechnung in der Sprache Ihres Accept-Language-Headers. Der Kunde wählt dort eine Zahlungsart und bezahlt. Die Seite ermöglicht erneute Zahlungsversuche, erfasst aber keine erforderlichen benutzerdefinierten Buchungsfelder. Ist customFieldsCompletion.allRequiredComplete false, schließen Sie den Kauf im gehosteten Shop ab, bevor Sie den Checkout starten.

Speichern Sie das Rechnungs-Token aus invoice.accessToken. Sie brauchen es, um die Zahlung zu verfolgen.

Zahlung verfolgen

Lesen Sie die Rechnung mit dem Rechnungs-Token, zum Beispiel mit der Abfrage PaymentStatus aus dem Schnellstart. Fragen Sie den Status alle paar Sekunden ab, solange der Kunde bezahlt, und hören Sie auf, sobald die Zahlung endgültig ist.

FeldBedeutung
paymentState: PAIDDie Zahlung war erfolgreich.
paymentState: REQUIRES_PAYMENTNoch keine erfolgreiche Zahlung. payments listet die Versuche und ihren state.
paymentIntentCreateErrorWarum keine neue Zahlung starten kann: bereits bezahlt, bereits in Bearbeitung oder Bestellung storniert.
payments.providerInitializationFailedDer Zahlungsanbieter konnte diesen Versuch nicht starten. Der Kunde kann paymentLink erneut öffnen.
request.state: CANCELEDDie Bestellung wurde storniert, zum Beispiel weil der Checkout-Hold vor der Zahlung abgelaufen ist. Legen Sie einen neuen Warenkorb an.

Verlassen Sie sich auf die Rechnung und nicht darauf, dass der Kunde auf eine Seite zurückkehrt: Zahlungen können auch dann erfolgreich sein, wenn der Kunde den Browser schließt.

Tickets bereitstellen

Nach der Zahlung liefert request.shareablePublicTicketsUrl(format: PDF) einen Link zur Ticketseite des Kunden. Die Ticketaktivierung kann noch ausstehen, obwohl diese URL bereits vorhanden ist. Die Seite stellt die Tickets bereit, sobald die Aktivierung abgeschlossen ist. Verwenden Sie format: PKPASSES für Apple-Wallet-Pässe, sofern diese verfügbar sind.

Abgelaufenen Checkout-Hold behandeln

Erreicht checkoutHold.secondsRemaining vor der Zahlung null, storniert KORONA Event die Bestellung und gibt ihre Plätze frei. Rufen Sie requestCancelExpiredCheckoutHold mit dem Warenkorb-Token als requestId oder dem Rechnungs-Token als invoiceToken auf, um die Plätze sofort freizugeben, und bieten Sie dem Kunden danach einen neuen Warenkorb an.

Fehlerbehebung

ProblemWas Sie prüfen
Der Checkout schlägt mit legalDocumentAcceptances fehlJedes erforderliche Dokument ist mit seinem aktuellen publishedAt als legalDocumentVersion zugestimmt.
Eine Warenkorbänderung schlägt mit checkoutHold fehlDer Checkout-Hold ist abgelaufen und die Bestellung wurde storniert. Legen Sie einen neuen Warenkorb an.
Nach dem Checkout fehlt eine AntwortLesen Sie den Warenkorb mit seinem Token, bevor Sie es erneut versuchen. Ist state gleich BOOKED, war der Checkout bereits erfolgreich; das Rechnungs-Token steht in invoices { accessToken }.

Verwandte Artikel