Zum Inhalt springen

Webhooks und ERP: doppelte Aufträge verhindern

Trennen Sie Ereignis und Auftrag. Ein ausgearbeitetes Beispiel zeigt Wiederholungen, gleichzeitige Zustellung und eine verlorene ERP-Antwort.

Tobias Krüger3 Min. Lesezeit
Eine Glocke am Webhook-Symbol mit einem gebogenen blauen Wiederholungspfeil.

Planen Sie Wiederholungen als regulären Fall Ihrer Shop-Anbindung ein. Ein Webhook ist eine vom sendenden System ausgelöste HTTP-Nachricht. Bleibt eine Bestätigung aus, kann die Nachricht erneut eintreffen. Daraus darf kein zusätzlicher ERP-Auftrag entstehen.

Stripe dokumentiert sowohl wiederholte Ereignisse als auch mögliche Mehrfachmeldungen für denselben Gegenstand. Welche Regeln gelten, müssen Sie beim tatsächlichen Absender prüfen. Das folgende Beispiel ist fiktiv und beschreibt keine Stripe-API.

Zwei Kennungen mit verschiedenen Aufgaben

Der Shop shop-1 hat den Auftrag W-240. Das Ereignis evt-17 meldet dessen Anlage. Im ERP erhält der Auftrag die Kennung E-901. Die Ereigniskennung erkennt eine erneute Zustellung; die Kombination aus Shop und Auftragskennung ordnet den Geschäftsvorgang zu. Ein späteres Ereignis evt-18 kann eine Änderung desselben Auftrags melden.

Eingang oder Fehler

Erwartetes Ergebnis

evt-17 erstmals

Ein ERP-Auftrag E-901 wird angelegt und W-240 zugeordnet.

evt-17 erneut

Der bestehende Vorgang wird erkannt; kein weiterer Auftrag.

evt-17 gleichzeitig zweimal

Eine eindeutige Speicherung lässt nur einen Verarbeitungsvorgang entstehen.

evt-18 zu W-240

Die Änderung wird dem bestehenden Auftrag zugeordnet und nach den Änderungsregeln geprüft.

ERP verarbeitet die Anlage, Antwort geht verloren

Ergebnis zunächst unklar; mit derselben Vorgangskennung abgleichen, bevor erneut angelegt wird.

Annahme dauerhaft speichern

Prüfen Sie zuerst die Echtheit der Nachricht nach dem Verfahren des Absenders. Speichern Sie danach das Ereignis dauerhaft, bevor Sie seine Annahme bestätigen. Eine Eindeutigkeitsregel für Absender und Ereigniskennung verhindert, dass zwei gleichzeitig eintreffende Kopien getrennte Jobs erzeugen. Eine reine Suche vor dem Speichern reicht bei Gleichzeitigkeit nicht.

Die weitere Verarbeitung muss zuverlässig aus dieser Ablage entstehen. Ein Worker kann dafür gespeicherte offene Ereignisse übernehmen. So bleibt der Vorgang auch nach einem Absturz zwischen Empfang und Bearbeitung auffindbar.

Eine mögliche Antwort nach dieser Speicherung lautet:

{
  "eventId": "evt-17",
  "orderId": "W-240",
  "status": "queued"
}

Im Beispiel hat diese Antwort den HTTP-Status 202. Sie bestätigt die Aufnahme in die Verarbeitung. Eine ERP-Auftragsbestätigung liegt damit noch nicht vor. Kann die dauerhafte Aufnahme nicht gesichert werden, darf der Empfänger keine erfolgreiche Annahme vortäuschen.

Den ERP-Aufruf ebenfalls gegen Wiederholung schützen

Verwenden Sie für die Anlage einen stabilen Schlüssel wie shop-1:W-240:create, falls das Ziel solche Schlüssel unterstützt. Bei einem sicheren Wiederholungsversuch bleibt er gleich. Stripe zeigt dieses Prinzip für seine eigene API; die genaue Bedeutung und Aufbewahrung hängen vom Zielsystem ab.

Fehlt diese Unterstützung, braucht es eine andere verlässliche Zuordnung, etwa eine im Ziel eindeutig abgesicherte externe Auftragskennung und eine Abfrage des Ergebnisses. Ist nach einer Zeitüberschreitung unbekannt, ob der Auftrag entstanden ist, bleibt der Vorgang zur Klärung offen. Eine neue zufällige Kennung würde die Wiederholung als neue Anlage erscheinen lassen.

Ereignisspeicherung und ERP-Anlage in zwei Systemen bilden nicht automatisch eine gemeinsame Transaktion. Halten Sie deshalb Annahme, Verarbeitung, unklaren Ausgang und bestätigten Abschluss getrennt fest. Erst die bestätigte Zuordnung zu E-901 schließt die Anlage im Beispiel ab.

Mit Fehlern abnehmen

Senden Sie evt-17 nacheinander und gleichzeitig erneut. Unterbrechen Sie die Antwort nach einer erfolgreichen ERP-Anlage. Prüfen Sie anschließend evt-18 als echte Änderung. Erwartet werden ein einziger Anlagevorgang, die erhaltene Zuordnung und ein sichtbarer Klärungsstatus bei unbekanntem Ausgang. Legen Sie auch fest, wie lange die Kennungen für die möglichen Wiederholungen aufbewahrt werden.

Quellen

Geschrieben von

  • Tobias KrügerRedakteur für SystemintegrationTobias Krüger beschäftigt sich bei ASES mit dem Zusammenspiel verschiedener Softwaresysteme. In seinen Beiträgen erklärt er die Anbindung von ERP, CRM und Onlineshops sowie den Umgang mit Fehlern beim Datenaustausch.

ASES folgen

Weiterlesen

Alle Beiträge

Schnittstellen & Integration mit ASES

ERP, CRM und Shop sauber verbunden