Naar hoofdinhoud
GoCardless · webhooks

GoCardless-webhook: 498 Token Invalid, 204 en de Webhook-Signature-handtekening

GoCardless-events komen via een ondertekende webhook bij Odoo binnen, en het antwoord van Odoo vertelt GoCardless of het opnieuw moet proberen. Twee codes hebben een bijzondere betekenis: 498 voor een handtekening die niet klopt en 204 voor een event dat niet herkend wordt. Bij beide stopt GoCardless met opnieuw proberen.

FlexigoTech · Verantwoordelijk: Víctor Gómez · Bijgewerkt op 6 november 2026

In het kort

Versies
Odoo 17, 18, 19 en 20
Gecontroleerd
in de broncode van de connector, versie 17.0, 18.0, 19.0 en 20.0 · in de bronnen onderaan
Leestijd
3 min

Wat GoCardless zegt

AntwoordTekst van GoCardless
498 Token InvalidSignature verification failed. GoCardless will log this and not retry.
204 No ContentEvent type is not recognised. GoCardless will not retry.

Elk ander antwoord dan 2xx zorgt ervoor dat GoCardless opnieuw probeert: 9 leverpogingen in totaal, de eerste plus 8 herhalingen, steeds met meer tussenruimte. Bovendien wacht het maximaal 10 seconden op het antwoord.

Overzicht van de antwoorden 498 en 204 op de webhook van GoCardless
De twee codes die de herhalingen van GoCardless stoppen, en de tekst waarmee ze gedocumenteerd zijn.

Hoe de handtekening wordt gecontroleerd

GoCardless ondertekent elke verzending met een HMAC SHA256 in hexadecimaal van de body zoals die is, met het geheim van het endpoint, en stuurt die mee in de header Webhook-Signature. Als het geheim in Odoo niet dat van het endpoint is, klopt geen enkele handtekening. Dat gebeurt bij een verkeerd gekopieerd geheim, bij het opnieuw genereren in het Dashboard zonder het in Odoo bij te werken, of wanneer events van een ander account naar een Odoo worden gestuurd.

De connector neemt niet de eerste GoCardless-configuratie die hij vindt: hij zoekt de configuratie met het geheim waarmee die verzending is ondertekend. Zo weigert een vergeten testconfiguratie de echte events niet.

Wat Odoo met de connector antwoordt

SituatieOdoo 17, 18 en 19Odoo 20
Geen enkel geheim klopt met de handtekening498401
Goede handtekening, geen enkel event is van hem204204
Events toegepast200200

Het verschil in Odoo 20 is geen keuze van de connector: de HTTP-server ervan laat geen antwoord toe met een code die niet standaard is, en 498 is dat niet. Wat er daarna gebeurt, hangt af van hoe de events binnenkomen. In de geavanceerde modus gaan ze rechtstreeks van GoCardless naar Odoo: bij een 401 probeert GoCardless opnieuw een verzending die niet zal kloppen, en een verkeerd geplaatst geheim zie je als reeks mislukte herhalingen in het Dashboard van GoCardless. Met de verbinding in twee klikken komen ze via FlexigoTech Cloud binnen, die dat 401 als definitief behandelt, net als een 498.

Als een event niet binnenkomt

GoCardless garandeert dat elk event minstens één keer aankomt, niet precies één keer: het kan herhaald worden. De connector slaat elk event op dat hij toepast, één per event en per GoCardless-configuratie, en als hetzelfde event opnieuw komt, past hij het niet twee keer toe. Dat is belangrijk bij geld: een tweemaal bevestigde betaling mag niet twee incasso's op de factuur registreren. Gaat een event verloren, dan haalt de geplande actie die elk uur de ontbrekende events bij GoCardless opvraagt ze terug, tot 100 per run.

Wat te doen

  1. Gebruik je de verbinding in twee klikken ("Connect my GoCardless account"), dan zet FlexigoTech Cloud de webhooks op: er is geen geheim om te kopiëren.
  2. In de geavanceerde modus ("Paste an access token (advanced)") maak jij het endpoint en het geheim aan in het Dashboard van GoCardless: kopieer het exacte geheim in de GoCardless-configuratie in Odoo.
  3. Als je het geheim opnieuw genereert, werk het dan meteen bij in Odoo; tot dat moment mislukt elke verzending.
  4. Controleer in het Dashboard van GoCardless de mislukte verzendingen: vandaar kun je ze handmatig opnieuw afspelen.
Schema: wat GoCardless naar de webhook stuurt en wat Odoo met de connector antwoordt
Schema opgesteld op basis van de code van de connector (17.0, 18.0, 19.0 en 20.0) en de documentatie van GoCardless.

Waarom niet 500 antwoorden als de handtekening faalt?

Omdat GoCardless dan een verzending zou herhalen die nooit zal kloppen. De 498 vertelt het te stoppen; in Odoo 20, waar die niet kan worden verstuurd, antwoordt de connector met 401, en via FlexigoTech Cloud telt dat 401 ook als definitief.

Met onze connector

In Odoo 17, 18, 19 en 20 controleert de connector de handtekening van elke verzending tegen het geheim van elke GoCardless-configuratie, antwoordt hij met de codes die GoCardless begrijpt en haalt hij, voor het geval er iets verloren gaat, elk uur de events op.

Lees verder

GoCardless 409 idempotent_creation_conflict: de incasso bestond alGoCardless geeft 409 idempotent_creation_conflict als een idempotentiesleutel al iets heeft aangemaakt. Geen fout: zo voorkomt de connector dubbele incasso.Fout mandate_is_inactive van GoCardless bij het aanmaken van een incasso vanuit OdooGoCardless antwoordt met mandate_is_inactive bij een betaling met een geannuleerd, mislukt of verlopen mandaat. Waarom het gebeurt en wat de connector doet.GoCardless invalid_bank_details: AC01 en BE06, de opgegeven rekening bestaat nietGoCardless invalid_bank_details met AC01 of BE06: de rekening van het mandaat bestaat niet. Waarom dit gebeurt en wat de connector in Odoo doet.
Gecontroleerd in de broncode van de connector (versie 17.0, 18.0, 19.0 en 20.0) en in de gelinkte bronnen

Bronnen

  • docs.gocardless.com/docs/api-reference/webhooks
  • Broncode van de module: flexigo_payment_gocardless: models/gocardless_webhook_event.py, regel 7 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: controllers/main.py, regel 110 in 17.0 (d203ee6), 18.0 (e2ab18b) en 19.0 (ce7f5a3)
  • Broncode van de module: flexigo_payment_gocardless: controllers/main.py, regel 113 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: controllers/main.py, regel 128 in 17.0 (d203ee6), regel 128 in 18.0 (e2ab18b), regel 128 in 19.0 (ce7f5a3) en regel 131 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: controllers/main.py, regel 103 in 17.0 (d203ee6), regel 103 in 18.0 (e2ab18b), regel 103 in 19.0 (ce7f5a3) en regel 106 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: const.py, regel 117 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 71 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: __manifest__.py, regel 6 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_token.py, regel 83 in 17.0 (d203ee6), regel 83 in 18.0 (e2ab18b), regel 83 in 19.0 (ce7f5a3) en regel 82 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: __manifest__.py, regel 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • Broncode van de module: flexigo_payment_gocardless: controllers/main.py, regel 95 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 888 in 17.0 (d203ee6), regel 888 in 18.0 (e2ab18b), regel 888 in 19.0 (ce7f5a3) en regel 903 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 143 in 17.0 (d203ee6), regel 143 in 18.0 (e2ab18b), regel 143 in 19.0 (ce7f5a3) en regel 145 in 20.0 (688d86b)