Salta al contingut principal
GoCardless API · gocardless · 500 · 504

GoCardless internal_server_error i request_timed_out: la fallada és a GoCardless

De vegades el problema no és a la teva petició ni al teu client, sinó a GoCardless: una fallada interna (500) o una petició que no acaba a temps (504). El connector d'Odoo no repeteix aquestes peticions pel seu compte, i deixa el cobrament en error amb el request_id. El que cal fer després és no cobrar dues vegades el mateix.

FlexigoTech · Responsable: Víctor Gómez · Actualitzat el 6 de novembre de 2026

L'essencial

Versions
Odoo 17, 18, 19 i 20
Comprovat
al codi del connector, versió 17.0, 18.0, 19.0 i 20.0 · a les fonts enllaçades al final
Lectura
4 min

Què diu GoCardless

ReasonTipusText de GoCardless
internal_server_errorgocardlessAn internal error occurred. Report to support with request_id.
request_timed_outgocardlessRequest did not complete in time. Retry, report if persistent.

GoCardless agrupa aquests reasons al tipus gocardless, el dels errors que es produeixen dins de GoCardless: «These errors occurred within GoCardless while processing your request.». La seva taula de codis HTTP diu això dels dos codis:

HTTPText de GoCardless
500Server-side error. Retry, and report to support with the request_id if it persists.
504Request timed out. Retry, and report with request_id if it persists.

A la pàgina de límits, GoCardless fixa a més quant pot durar una petició: 29 segons («Request timeout 29 seconds»).

Targeta de l'error internal_server_error de GoCardless
El reason d'una fallada interna de GoCardless, els codis HTTP 500 i 504, request_timed_out i el request_id.

Tres casos que el connector no tracta igual

El connector espera la resposta de GoCardless fins a 30 segons en cada petició. Amb un cobrament, un reemborsament o un reintent, Odoo pot trobar-se tres situacions diferents:

  • GoCardless contesta amb un 500 o un 504, amb el reason a la resposta.
  • GoCardless no contesta: la connexió es talla o s'acaben els 30 segons.
  • La fallada arriba en aplicar un esdeveniment, quan el connector demana a GoCardless el pagament del qual parla l'esdeveniment.

Què fa el connector

Amb un 500 o un 504. El connector només repeteix una petició quan es queda sense resposta o després d'un 429. Amb un 500 o un 504 sí que hi ha resposta, així que la dona per rebutjada. En un cobrament, la transacció passa a «Error» amb «GoCardless rejected the request.» i, a sota, el missatge de GoCardless amb el reason i el request_id entre corxetes. La tasca de cada hora no reenvia una transacció en error. Si GoCardless arribés a crear el cobrament igualment, el seu primer esdeveniment l'enllaça: cada cobrament porta a les seves metadades la referència de la transacció d'Odoo, el connector la busca amb ella i li aplica l'estat del pagament. Una transacció en error torna així a «Pendent» o passa a «Confirmat».

Sense resposta. El connector repeteix la petició una vegada, amb la mateixa clau d'idempotència. Si tampoc contesta ningú, no dona el cobrament per perdut: la transacció queda pendent amb «GoCardless did not answer, so it is not known yet whether it took the request. It will be sent again, safely, within the hour.». La tasca de cada hora la torna a enviar amb la mateixa clau; si GoCardless ja l'havia creat, contesta 409 i el connector adopta el que ja existeix.

En aplicar un esdeveniment. Amb cada esdeveniment d'un pagament, el connector demana aquest pagament a GoCardless. Si aquesta consulta falla, el webhook contesta 500 perquè GoCardless torni a enviar l'enviament, i els esdeveniments que ja s'han aplicat no s'apliquen dues vegades. La recuperació de cada hora tampoc deixa enrere un esdeveniment que ha fallat.

El connector no està traduït al català: aquests textos surten sempre en anglès, també en un Odoo en català, tant si els llança un usuari com una tasca programada: «GoCardless rejected the request.» i «GoCardless did not answer, so it is not known yet whether it took the request. It will be sent again, safely, within the hour.».

Esquema: què envia GoCardless amb un 500 o un 504 i què fa Odoo amb el connector
Esquema fet a partir del codi del connector (17.0, 18.0, 19.0 i 20.0) i de la documentació de GoCardless.

Què fer

  1. Obre la transacció des de la factura, amb el botó «Transacció de pagament» de dalt; el menú de transaccions només surt en mode desenvolupador, i a Odoo 20 no existeix. Si el missatge esmenta internal_server_error o request_timed_out, la fallada va ser de GoCardless, no del client ni del seu mandat.
  2. Abans de tornar a cobrar la factura, cerca el cobrament al Dashboard de GoCardless: el connector posa com a descripció de cada cobrament la referència de la seva transacció d'Odoo. Si hi és, no cobris una altra vegada; el seu esdeveniment enllaçarà la transacció.
  3. Si no hi és, torna a cobrar la factura amb el mètode de pagament desat del client. Un cobrament nou és una altra transacció, amb una altra clau d'idempotència: per això convé mirar abans.
  4. Si es repeteix, escriu al suport de GoCardless amb el request_id del missatge: la seva documentació demana incloure'l en contactar amb el seu suport.

Per què el connector no reintenta un 500 com fa sense resposta?

Perquè només repeteix a cegues el que es pot repetir sense risc: una petició sense resposta, amb la mateixa clau, o una que va rebre un 429 (segons GoCardless, aquestes es poden repetir sense problema). Un 500 o un 504 és una resposta, i el connector la tracta com un rebuig.

Pot quedar un cobrament duplicat?

Amb la mateixa clau, no: GoCardless contesta 409 i el connector adopta el cobrament que ja existeix. El risc és en cobrar una altra vegada des de la factura, perquè això crea una altra transacció amb una altra clau. Per això convé cercar abans el cobrament al Dashboard.

Amb el nostre connector

A Odoo 17, 18, 19 i 20 el connector separa un error de GoCardless d'una petició sense resposta: el primer queda en error amb el seu request_id, la segona queda pendent i es reenvia amb la mateixa clau, i en tots dos casos l'esdeveniment d'un cobrament que sí que existeix l'enllaça amb la seva transacció.

Continua llegint

GoCardless 409 idempotent_creation_conflict: el cobrament ja existiaGoCardless retorna 409 idempotent_creation_conflict si una clau d'idempotència ja ha creat res. Per què no és un error i com evita el connector cobrar dos cops.GoCardless 429 rate_limit_exceeded: massa peticions per minutGoCardless respon 429 rate_limit_exceeded en superar les 1.600 peticions per minut. Com espera i repeteix el connector i què fer si torna a fallar.GoCardless access_token_revoked: Odoo ja no pot parlar amb el teu compteGoCardless rebutja amb access_token_revoked, access_token_not_active o unauthorized les peticions d'un token mort. Què fa Odoo i com tornar a connectar.
Comprovat al codi del connector (versió 17.0, 18.0, 19.0 i 20.0) i a les fonts enllaçades

Fonts

  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • docs.gocardless.com/docs/api-reference/limits
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 361 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 394 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 357 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 373 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 448 a 17.0 (d203ee6), línia 448 a 18.0 (e2ab18b), línia 448 a 19.0 (ce7f5a3) i línia 450 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 29 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 299 a 17.0 (d203ee6), línia 299 a 18.0 (e2ab18b), línia 299 a 19.0 (ce7f5a3) i línia 310 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 391 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 68 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 397 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 462 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 521 a 17.0 (d203ee6), línia 521 a 18.0 (e2ab18b), línia 521 a 19.0 (ce7f5a3) i línia 523 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 281 a 17.0 (d203ee6), línia 281 a 18.0 (e2ab18b), línia 281 a 19.0 (ce7f5a3) i línia 292 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 258 a 17.0 (d203ee6), línia 258 a 18.0 (e2ab18b), línia 258 a 19.0 (ce7f5a3) i línia 269 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 115 a 17.0 (d203ee6), línia 115 a 18.0 (e2ab18b), línia 115 a 19.0 (ce7f5a3) i línia 118 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 572 a 17.0 (d203ee6), línia 572 a 18.0 (e2ab18b), línia 571 a 19.0 (ce7f5a3) i línia 590 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 697 a 17.0 (d203ee6), línia 697 a 18.0 (e2ab18b), línia 696 a 19.0 (ce7f5a3) i línia 720 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 623 a 17.0 (d203ee6), línia 623 a 18.0 (e2ab18b), línia 623 a 19.0 (ce7f5a3) i línia 625 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 589 a 17.0 (d203ee6), línia 589 a 18.0 (e2ab18b), línia 588 a 19.0 (ce7f5a3) i línia 607 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: controllers/main.py, línia 124 a 17.0 (d203ee6), línia 124 a 18.0 (e2ab18b), línia 124 a 19.0 (ce7f5a3) i línia 127 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 603 a 17.0 (d203ee6), línia 603 a 18.0 (e2ab18b), línia 603 a 19.0 (ce7f5a3) i línia 605 a 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/ca.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
  • Codi del mòdul: flexigo_payment_gocardless: __manifest__.py, línia 31 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)