Die erste Entscheidung fällt vor der Schnittstelle: Die Bestellung ist ein
eigenes Datenobjekt auf deinem Server — mit Positionen, Mengen, Einzel- und Gesamtpreisen,
Rabatten, Versandkosten und Steueranteilen. Erst wenn dieses Objekt vollständig ist und exakt die
Zahlen ergibt, die im Warenkorb stehen, startet die Zahlung. Klarna prüft nämlich nicht nur einen
Betrag, sondern einen Vorgang; unvollständige oder abweichende Daten sind die häufigste Ursache
für Bestellungen, die im letzten Schritt nicht zustande kommen.
Danach läuft der dokumentierte Dreischritt. Der Server erzeugt die
Bezahlsitzung und übergibt dabei den Warenkorb. Der Browser bekommt daraus nur ein kurzlebiges
Token, mit dem Klarnas eigenes Frontend-SDK das Auswahlformular anzeigt. Wählt der Käufer und gibt
frei, kommt ein Autorisierungs-Token zurück — und den nimmt wieder der
Server, um die Bestellung abzuschließen. Zugangsdaten liegen dabei
ausschließlich serverseitig, nie im Markup und nie im JavaScript-Bundle.
Der Teil, der in Angeboten regelmäßig fehlt, ist die Ablehnung. Sie ist
hier kein Fehler, sondern ein vorgesehener Ausgang, und sie kann früh auftreten — dann wird die
Zahlart erst gar nicht angezeigt — oder spät, beim Abschluss. Wir bauen die Kasse deshalb von
vornherein mehrspurig: Der Warenkorb bleibt erhalten, eine andere Zahlart steht sofort bereit, die
Meldung bleibt sachlich und kommentiert die Entscheidung nicht. Eine Bezahlstrecke mit nur einem
Weg verliert genau an dieser Stelle die Bestellung.
Statusmeldungen sind die Quelle der Wahrheit, nicht die Rückkehr des
Browsers. Ob eine Bestellung wirklich zustande gekommen ist, entscheidet der serverseitige
Abschluss und die Rückmeldung von Klarna — nicht die Frage, ob der Käufer die Bestätigungsseite
erreicht hat. Der eingehende Endpunkt prüft die Herkunft, verarbeitet jede Meldung
idempotent und verträgt es, dieselbe Nachricht zweimal zu bekommen.
Und schließlich der Betrieb: Erfassung, Teillieferung, Erstattung,
Stornierung. Das läuft nach dem Kauf über Klarnas Order-Management-API und hängt bei uns an
den Status im Shop oder in der Warenwirtschaft, damit niemand zwei Systeme von Hand
synchronisieren muss. Die buchbare Leistung dahinter beschreiben wir unter
Schnittstellenentwicklung.