Wat GoCardless zegt
| Antwoord | Tekst van 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. |
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.

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
| Situatie | Odoo 17, 18 en 19 | Odoo 20 |
|---|---|---|
| Geen enkel geheim klopt met de handtekening | 498 | 401 |
| Goede handtekening, geen enkel event is van hem | 204 | 204 |
| Events toegepast | 200 | 200 |
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
- 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.
- 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.
- Als je het geheim opnieuw genereert, werk het dan meteen bij in Odoo; tot dat moment mislukt elke verzending.
- Controleer in het Dashboard van GoCardless de mislukte verzendingen: vandaar kun je ze handmatig opnieuw afspelen.

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
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)
