Was GoCardless meldet
| Reason | Typ | Text von GoCardless |
|---|---|---|
access_token_revoked | invalid_api_usage | Token has been revoked by the user. |
access_token_not_active | invalid_api_usage | Token has been disabled. |
unauthorized | invalid_api_usage | Credentials not recognised. |
Für Odoo bedeuten alle drei dasselbe: Die Zugangsdaten, mit denen angefragt wird, sind nicht mehr gültig. In seiner Tabelle der HTTP-Codes reserviert GoCardless den 401 für diesen Fall: «Missing or invalid Authorization header, or the user has been disabled.». Es handelt sich um invalid_api_usage-Fehler, also solche, die aus der Art der Anfrage entstehen; dafür verlangt GoCardless, das technische Team zu informieren («alert your dev team»).

Wann ein Token ungültig wird
Der Konnektor verbindet sich auf zwei Wegen mit GoCardless, und der Token erlischt bei jedem anders:
- «Connect my GoCardless account» ist die Verbindung mit zwei Klicks über FlexigoTech: eine Partner-Integration. Laut dem Partnerleitfaden von GoCardless kann der Händler diesen Zugriff im GoCardless-Dashboard widerrufen («they can revoke your access from the GoCardless dashboard») oder sein Konto schließen. Dann sendet GoCardless ein letztes Webhook, und der Token funktioniert nicht mehr: «Your access token stops working, so you can't make any more API calls for that user.».
- «Paste an access token (advanced)» ist der Modus, in dem Sie den Token selbst im GoCardless-Dashboard erstellen und in Odoo einfügen. Wenn Sie ihn dort widerrufen oder deaktivieren, bemerkt Odoo das bei der nächsten Anfrage, wenn GoCardless sie ablehnt.
Was der Konnektor in Odoo tut
Bei der Verbindung mit zwei Klicks kommt dieses letzte Webhook ohne Ereignis-ID an, als organisations · disconnected. Der Konnektor verarbeitet es so:
- Er löscht den Token und das Webhook-Geheimnis, und die Verbindung des Anbieters wechselt zu «Disconnected in GoCardless».
- Er schreibt in den Kontakt Ihres Unternehmens «GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again.», mit Datum und Ursache laut GoCardless.
- Er legt die Aktivität «GoCardless disconnected» an, damit jemand es erfährt, ohne den Anbieter öffnen zu müssen.
Ab diesem Moment ruft der Konnektor GoCardless mit diesem Anbieter nicht mehr auf: Die stündliche Aufgabe überspringt ihn, und eine Einziehung mit der gespeicherten Zahlungsmethode eines Kunden wird auf «Fehler» gesetzt, mit «This provider is not connected to GoCardless any more: connect it again first.».
Ohne diesen Hinweis bleibt der Token gespeichert, und GoCardless lehnt jede Anfrage ab. Bei einer Einziehung wird die Transaktion auf «Fehler» gesetzt mit «GoCardless rejected the request.» und darunter der Meldung von GoCardless mit dem Reason (access_token_revoked, access_token_not_active oder unauthorized) sowie der request_id in eckigen Klammern. Die Rechnung bleibt zur Einziehung offen, und die stündliche Aufgabe sendet eine fehlerhafte Transaktion nicht erneut.
Den Hinweis im Kontakt und die Aktivität schreibt der Konnektor ohne Beteiligung eines Benutzers beim Verarbeiten des Webhooks. Die Texte erscheinen immer auf Englisch: Der Konnektor ist nicht ins Deutsche übersetzt, auch in einem deutschen Odoo, egal ob ein Benutzer oder eine geplante Aktion sie auslöst. Die Meldungen einer Einziehung erscheinen so: «GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again.» und «GoCardless disconnected». Wird die Einziehung durch eine geplante Aktion ausgelöst, etwa die Verlängerung eines Abonnements, gilt dieselbe Regel: «This provider is not connected to GoCardless any more: connect it again first.» und «GoCardless rejected the request.».

Was zu tun ist
- Öffnen Sie die Transaktion über die Rechnung mit der Schaltfläche «Zahlungstransaktion» oben; das Transaktionsmenü erscheint nur im Entwicklermodus und existiert in Odoo 20 nicht. Wenn die Meldung sagt, dass der Anbieter nicht mehr verbunden ist, oder einen der drei Reasons nennt, liegt das Problem an der Verbindung, nicht am Kunden oder seinem Mandat.
- Bei der Verbindung mit zwei Klicks öffnen Sie den Zahlungsanbieter GoCardless und verbinden Sie erneut über «Connect my GoCardless account».
- Im erweiterten Modus erstellen Sie im GoCardless-Dashboard einen neuen Token, fügen ihn in «GoCardless Access Token» ein und klicken auf «Test connection». Der Konnektor fragt mit diesem Token den Gläubiger Ihres Kontos bei GoCardless ab: Lehnt GoCardless ihn ab, sehen Sie den Fehler sofort und nicht erst bei der nächsten Einziehung.
- Wenn die Verbindung wieder steht, ziehen Sie die Rechnungen erneut ein, die offen geblieben sind. Fehlerhafte Transaktionen werden nicht automatisch erneut gesendet.
- Falls Sie GoCardless kontaktieren müssen, notieren Sie die
request_idaus der Meldung: Laut deren Dokumentation soll sie beim Support angegeben werden.
Warum löscht der Konnektor den Token, statt es weiter zu versuchen?
Weil GoCardless sagt, dass dieser Token nicht mehr funktioniert. So erklären die nächsten Einziehungen, was los ist (dass der Anbieter nicht mehr verbunden ist), statt eine Ablehnung nach der anderen zu erhalten, und im Kontakt des Unternehmens steht, wann und warum die Verbindung getrennt wurde.
Funktioniert ein Sandbox-Token mit dem Produktivkonto?
Nein. Der Hilfetext des Token-Feldes sagt es: Sandbox-Tokens beginnen mit sandbox_ und funktionieren nur mit der Sandbox-API. Für echte Einziehungen braucht man einen Produktiv-Token.
Mit unserem Konnektor
In Odoo 17, 18, 19 und 20 lässt der Konnektor nicht zu, dass ein ungültiger Token zu einer Kette fehlgeschlagener Einziehungen ohne Erklärung wird: Meldet GoCardless die Trennung, wird sie im Unternehmen und in einer Aktivität festgehalten, und wenn GoCardless nichts meldet, enthält jede Ablehnung den Reason und die request_id von GoCardless.
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/responses-and-errors
- docs.gocardless.com/docs/partner-integrations/connect-your-merchants
- docs.gocardless.com/docs/partner-integrations/webhooks-for-partners
- 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: 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)
- 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: models/payment_provider.py, Zeile 1237 in 17.0 (d203ee6), Zeile 1237 in 18.0 (e2ab18b), Zeile 1237 in 19.0 (ce7f5a3) und Zeile 1234 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 1241 in 17.0 (d203ee6), Zeile 1241 in 18.0 (e2ab18b), Zeile 1241 in 19.0 (ce7f5a3) und Zeile 1238 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 265 in 17.0 (d203ee6), Zeile 265 in 18.0 (e2ab18b), Zeile 265 in 19.0 (ce7f5a3) und Zeile 267 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 545 in 17.0 (d203ee6), Zeile 545 in 18.0 (e2ab18b), Zeile 545 in 19.0 (ce7f5a3) und Zeile 547 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 456 in 17.0 (d203ee6), Zeile 456 in 18.0 (e2ab18b), Zeile 456 in 19.0 (ce7f5a3) und Zeile 458 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 732 in 17.0 (d203ee6), Zeile 732 in 18.0 (e2ab18b), Zeile 732 in 19.0 (ce7f5a3) und Zeile 734 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 336 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 1740 in 17.0 (d203ee6), Zeile 1740 in 18.0 (e2ab18b), Zeile 1740 in 19.0 (ce7f5a3) und Zeile 1745 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 397 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 462 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 521 in 17.0 (d203ee6), Zeile 521 in 18.0 (e2ab18b), Zeile 521 in 19.0 (ce7f5a3) und Zeile 523 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 281 in 17.0 (d203ee6), Zeile 281 in 18.0 (e2ab18b), Zeile 281 in 19.0 (ce7f5a3) und Zeile 292 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 247 in 17.0 (d203ee6), Zeile 247 in 18.0 (e2ab18b), Zeile 247 in 19.0 (ce7f5a3) und Zeile 258 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 623 in 17.0 (d203ee6), Zeile 623 in 18.0 (e2ab18b), Zeile 623 in 19.0 (ce7f5a3) und Zeile 625 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 742 in 17.0 (d203ee6), Zeile 742 in 18.0 (e2ab18b), Zeile 742 in 19.0 (ce7f5a3) und Zeile 744 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 1100 in 17.0 (d203ee6), Zeile 1100 in 18.0 (e2ab18b), Zeile 1100 in 19.0 (ce7f5a3) und Zeile 1107 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 346 in 17.0 (d203ee6), Zeile 346 in 18.0 (e2ab18b), Zeile 346 in 19.0 (ce7f5a3) und Zeile 348 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 1167 in 17.0 (d203ee6), Zeile 1167 in 18.0 (e2ab18b), Zeile 1167 in 19.0 (ce7f5a3) und Zeile 1174 in 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/de.po
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
