Was GoCardless sagt
| Antwort | Text von GoCardless |
|---|---|
| 498 Token Invalid | Signature verification failed. GoCardless will log this and not retry. |
| 204 No Content | Event type is not recognised. GoCardless will not retry. |
Jede andere Antwort, die kein 2xx ist, veranlasst GoCardless zu einem neuen Versuch: insgesamt 9 Zustellversuche, der erste plus 8 Wiederholungen, mit immer größeren Abständen. Außerdem wartet GoCardless höchstens 10 Sekunden auf die Antwort.

Wie die Signatur geprüft wird
GoCardless signiert jede Sendung mit einem HMAC SHA256 in Hexadezimal über den Textkörper unverändert, mit dem Geheimschlüssel des Endpunkts, und schickt sie im Header Webhook-Signature. Wenn der Geheimschlüssel in Odoo nicht der des Endpunkts ist, passt keine Signatur. Das passiert beim fehlerhaften Kopieren des Schlüssels, beim Neugenerieren im Dashboard ohne Aktualisierung in Odoo oder wenn die Ereignisse eines anderen Kontos an ein Odoo geschickt werden.
Der Konnektor nimmt nicht die erste GoCardless-Konfiguration, die er findet: Er sucht diejenige, deren Geheimschlüssel diese Sendung signiert hat. So lehnt eine vergessene Testkonfiguration die echten Ereignisse nicht ab.
Was Odoo mit dem Konnektor antwortet
| Situation | Odoo 17, 18 und 19 | Odoo 20 |
|---|---|---|
| Kein Geheimschlüssel passt zur Signatur | 498 | 401 |
| Signatur korrekt, kein Ereignis gehört dazu | 204 | 204 |
| Ereignisse angewendet | 200 | 200 |
Der Unterschied bei Odoo 20 ist keine Entscheidung des Konnektors: Sein HTTP-Server erlaubt keine Antwort mit einem Code, der nicht standardisiert ist, und 498 gehört nicht dazu. Was danach passiert, hängt davon ab, wie die Ereignisse ankommen. Im erweiterten Modus kommen sie direkt von GoCardless zu Odoo: Bei 401 versucht GoCardless eine Sendung erneut, die weiterhin nicht passen wird, und ein falsch eingetragener Schlüssel zeigt sich als Reihe fehlgeschlagener Versuche im Dashboard von GoCardless. Bei der Verbindung mit zwei Klicks laufen sie über FlexigoTech Cloud, die dieses 401 als endgültig behandelt, genauso wie ein 498.
Wenn ein Ereignis nicht ankommt
GoCardless garantiert, dass jedes Ereignis mindestens einmal ankommt, nicht genau einmal: Es kann sich wiederholen. Der Konnektor speichert jedes angewendete Ereignis, eines pro Ereignis und pro GoCardless-Konfiguration, und wenn dasselbe erneut eintrifft, wendet er es nicht zweimal an. Das ist bei Geld wichtig: Eine doppelt bestätigte Zahlung darf nicht zwei Zahlungseingänge in der Rechnung erzeugen. Und wenn ein Ereignis verloren geht, holt die geplante Aktion, die jede Stunde bei GoCardless die fehlenden Ereignisse anfordert, sie nach, bis zu 100 pro Durchlauf.
Was zu tun ist
- Wenn Sie die Verbindung mit zwei Klicks nutzen («Connect my GoCardless account»), richtet FlexigoTech Cloud die Webhooks ein: Es gibt keinen Schlüssel zu kopieren.
- Im erweiterten Modus («Paste an access token (advanced)») erstellen Sie den Endpunkt und seinen Geheimschlüssel selbst im Dashboard von GoCardless: Kopieren Sie den genauen Schlüssel in die GoCardless-Konfiguration in Odoo.
- Wenn Sie den Schlüssel neu generieren, aktualisieren Sie ihn sofort in Odoo; bis dahin schlägt jede Sendung fehl.
- Prüfen Sie im Dashboard von GoCardless die fehlgeschlagenen Sendungen: Von dort lassen sie sich manuell erneut auslösen.

Warum nicht mit 500 antworten, wenn die Signatur fehlschlägt?
Weil GoCardless eine Sendung wiederholen würde, die nie passen wird. Der 498 sagt ihm, dass er aufhören soll; in Odoo 20, wo er nicht gesendet werden kann, antwortet der Konnektor mit 401, und über FlexigoTech Cloud zählt dieses 401 ebenfalls als endgültig.
Mit unserem Konnektor
In Odoo 17, 18, 19 und 20 prüft der Konnektor die Signatur jeder Sendung gegen den Geheimschlüssel jeder GoCardless-Konfiguration, antwortet mit den Codes, die GoCardless versteht, und holt für den Fall, dass etwas verloren geht, jede Stunde die Ereignisse nach.
Weiterlesen
Geprüft im Quellcode des Connectors (Version 17.0, 18.0, 19.0 und 20.0) und in den verlinkten Quellen
Quellen
- docs.gocardless.com/docs/api-reference/webhooks
- Quellcode des Moduls: flexigo_payment_gocardless: models/gocardless_webhook_event.py, Zeile 7 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: controllers/main.py, Zeile 110 in 17.0 (d203ee6), 18.0 (e2ab18b) und 19.0 (ce7f5a3)
- Quellcode des Moduls: flexigo_payment_gocardless: controllers/main.py, Zeile 113 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: controllers/main.py, Zeile 128 in 17.0 (d203ee6), Zeile 128 in 18.0 (e2ab18b), Zeile 128 in 19.0 (ce7f5a3) und Zeile 131 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: controllers/main.py, Zeile 103 in 17.0 (d203ee6), Zeile 103 in 18.0 (e2ab18b), Zeile 103 in 19.0 (ce7f5a3) und Zeile 106 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 117 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 71 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 6 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_token.py, Zeile 83 in 17.0 (d203ee6), Zeile 83 in 18.0 (e2ab18b), Zeile 83 in 19.0 (ce7f5a3) und Zeile 82 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/responses-and-errors
- Quellcode des Moduls: flexigo_payment_gocardless: controllers/main.py, Zeile 95 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 888 in 17.0 (d203ee6), Zeile 888 in 18.0 (e2ab18b), Zeile 888 in 19.0 (ce7f5a3) und Zeile 903 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 143 in 17.0 (d203ee6), Zeile 143 in 18.0 (e2ab18b), Zeile 143 in 19.0 (ce7f5a3) und Zeile 145 in 20.0 (688d86b)
