Wat GoCardless zegt
| Reason | Tipo | Texto de GoCardless |
|---|---|---|
internal_server_error | gocardless | An internal error occurred. Report to support with request_id. |
request_timed_out | gocardless | Request did not complete in time. Retry, report if persistent. |
GoCardless groepeert deze reasons onder het type gocardless, dat van fouten die binnen GoCardless ontstaan: "These errors occurred within GoCardless while processing your request.". Hun tabel met HTTP-codes zegt dit over de twee codes:
| HTTP | Texto de GoCardless |
|---|---|
| 500 | Server-side error. Retry, and report to support with the request_id if it persists. |
| 504 | Request timed out. Retry, and report with request_id if it persists. |
Op de pagina met limieten stelt GoCardless bovendien vast hoe lang een verzoek mag duren: 29 seconden ("Request timeout 29 seconds").

Drie gevallen die de connector niet hetzelfde behandelt
De connector wacht per verzoek tot 30 seconden op het antwoord van GoCardless. Bij een incasso, een terugbetaling of een nieuwe poging kan Odoo drie verschillende situaties tegenkomen:
- GoCardless antwoordt met een
500of een504, met de reason in het antwoord. - GoCardless antwoordt niet: de verbinding valt weg of de 30 seconden zijn voorbij.
- De fout komt bij het verwerken van een gebeurtenis, wanneer de connector bij GoCardless de betaling opvraagt waar de gebeurtenis over gaat.
Wat de connector doet
Bij een 500 of een 504. De connector herhaalt een verzoek alleen wanneer er geen antwoord komt of na een 429. Bij een 500 of een 504 is er wel een antwoord, dus wordt het als afgewezen beschouwd. Bij een incasso gaat de transactie naar "Fout" met "GoCardless rejected the request." en daaronder het bericht van GoCardless met de reason en de request_id tussen haken. De uurlijkse taak stuurt een transactie in fout niet opnieuw. Mocht GoCardless de incasso toch hebben aangemaakt, dan koppelt de eerste gebeurtenis die: elke incasso draagt in zijn metadata de referentie van de Odoo-transactie, de connector zoekt die op en past de betaalstatus toe. Een transactie in fout gaat zo terug naar "In behandeling" of wordt "Bevestigd".
Zonder antwoord. De connector herhaalt het verzoek één keer, met dezelfde idempotentiesleutel. Als ook dan niemand antwoordt, beschouwt hij de incasso niet als verloren: de transactie blijft in behandeling met "GoCardless did not answer, so it is not known yet whether it took the request. It will be sent again, safely, within the hour.". De uurlijkse taak stuurt het opnieuw met dezelfde sleutel; heeft GoCardless het al aangemaakt, dan antwoordt het met 409 en neemt de connector het bestaande over.
Bij het verwerken van een gebeurtenis. Bij elke gebeurtenis van een betaling vraagt de connector die betaling op bij GoCardless. Mislukt die opvraag, dan antwoordt de webhook met 500, zodat GoCardless de verzending opnieuw stuurt, en gebeurtenissen die al verwerkt zijn, worden niet twee keer verwerkt. Ook het uurlijkse herstel laat geen mislukte gebeurtenis liggen.
De connector is niet in het Nederlands vertaald: deze teksten verschijnen altijd in het Engels, ook in een Nederlandstalige Odoo, of een gebruiker of een geplande actie ze nu start: "GoCardless rejected the request." en "GoCardless did not answer, so it is not known yet whether it took the request. It will be sent again, safely, within the hour.".

Wat te doen
- Open de transactie vanuit de factuur, met de knop "Betalingstransactie" bovenaan; het menu met transacties verschijnt alleen in de ontwikkelaarsmodus en bestaat niet in Odoo 20. Noemt het bericht
internal_server_errorofrequest_timed_out, dan lag de fout bij GoCardless en niet bij de klant of diens mandaat. - Zoek voordat u de factuur opnieuw int de incasso op in het Dashboard van GoCardless: de connector zet als omschrijving van elke incasso de referentie van zijn Odoo-transactie. Staat hij er, int dan niet opnieuw; de gebeurtenis koppelt de transactie.
- Staat hij er niet, int de factuur dan opnieuw met de opgeslagen betaalmethode van de klant. Een nieuwe incasso is een andere transactie, met een andere idempotentiesleutel: daarom is het verstandig eerst te kijken.
- Herhaalt het probleem zich, neem dan contact op met de support van GoCardless met de
request_iduit het bericht: hun documentatie vraagt om die bij contact met hun support te vermelden.
Waarom herhaalt de connector een 500 niet zoals bij geen antwoord?
Omdat hij alleen blind herhaalt wat zonder risico opnieuw kan: een verzoek zonder antwoord, met dezelfde sleutel, of een verzoek dat een 429 kreeg (volgens GoCardless kunnen die zonder probleem opnieuw worden verstuurd). Een 500 of een 504 is een antwoord, en de connector behandelt het als afwijzing.
Kan er een dubbele incasso ontstaan?
Met dezelfde sleutel niet: GoCardless antwoordt dan met 409 en de connector neemt de bestaande incasso over. Het risico zit in opnieuw innen vanaf de factuur, want dat maakt een nieuwe transactie met een nieuwe sleutel. Zoek daarom eerst de incasso op in het Dashboard.
Met onze connector
In Odoo 17, 18, 19 en 20 onderscheidt de connector een fout van GoCardless van een verzoek zonder antwoord: de eerste komt op fout met zijn request_id, het tweede blijft in behandeling en wordt opnieuw verstuurd met dezelfde sleutel, en in beide gevallen koppelt de gebeurtenis van een incasso die wel bestaat hem aan zijn transactie.
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/responses-and-errors
- docs.gocardless.com/docs/api-reference/limits
- Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 361 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 394 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 357 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 373 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 448 in 17.0 (d203ee6), regel 448 in 18.0 (e2ab18b), regel 448 in 19.0 (ce7f5a3) en regel 450 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 29 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 299 in 17.0 (d203ee6), regel 299 in 18.0 (e2ab18b), regel 299 in 19.0 (ce7f5a3) en regel 310 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 391 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 68 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 397 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 462 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 521 in 17.0 (d203ee6), regel 521 in 18.0 (e2ab18b), regel 521 in 19.0 (ce7f5a3) en regel 523 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 281 in 17.0 (d203ee6), regel 281 in 18.0 (e2ab18b), regel 281 in 19.0 (ce7f5a3) en regel 292 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 258 in 17.0 (d203ee6), regel 258 in 18.0 (e2ab18b), regel 258 in 19.0 (ce7f5a3) en regel 269 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 115 in 17.0 (d203ee6), regel 115 in 18.0 (e2ab18b), regel 115 in 19.0 (ce7f5a3) en regel 118 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 572 in 17.0 (d203ee6), regel 572 in 18.0 (e2ab18b), regel 571 in 19.0 (ce7f5a3) en regel 590 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 697 in 17.0 (d203ee6), regel 697 in 18.0 (e2ab18b), regel 696 in 19.0 (ce7f5a3) en regel 720 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 623 in 17.0 (d203ee6), regel 623 in 18.0 (e2ab18b), regel 623 in 19.0 (ce7f5a3) en regel 625 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 589 in 17.0 (d203ee6), regel 589 in 18.0 (e2ab18b), regel 588 in 19.0 (ce7f5a3) en regel 607 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: controllers/main.py, regel 124 in 17.0 (d203ee6), regel 124 in 18.0 (e2ab18b), regel 124 in 19.0 (ce7f5a3) en regel 127 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 603 in 17.0 (d203ee6), regel 603 in 18.0 (e2ab18b), regel 603 in 19.0 (ce7f5a3) en regel 605 in 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/nl.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
- 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)
