Què diu GoCardless
| Reason | Tipus | Text de 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. |
Per a Odoo els tres significen el mateix: la credencial amb què demana les coses ja no serveix. A la seva taula de codis HTTP, GoCardless reserva el 401 per a aquest cas: «Missing or invalid Authorization header, or the user has been disabled.». Són errors invalid_api_usage, els que vénen de com es fa la petició, i per a aquests GoCardless demana avisar l'equip tècnic («alert your dev team»).

Quan deixa de valer el token
El connector es connecta a GoCardless de dues maneres, i el token mor de forma diferent a cadascuna:
- «Connect my GoCardless account» és la connexió en dos clics, a través de FlexigoTech: una integració de partner. Segons la guia de partners de GoCardless, el comerç pot revocar aquest accés des del seu Dashboard («they can revoke your access from the GoCardless dashboard») o tancar el seu compte. Aleshores GoCardless envia un últim webhook i el token deixa de funcionar: «Your access token stops working, so you can't make any more API calls for that user.».
- «Paste an access token (advanced)» és el mode en què crees tu el token al Dashboard de GoCardless i l'enganxes a Odoo. Si el revoques o el desactives allà, Odoo ho descobreix en la següent petició, quan GoCardless la rebutja.
Què fa Odoo amb el connector
Amb la connexió en dos clics, aquell últim webhook arriba sense id d'esdeveniment, com organisations · disconnected. El connector l'aplica així:
- Esborra el token i el secret del webhook, i la connexió del proveïdor passa a «Disconnected in GoCardless».
- Escriu al contacte de la teva empresa «GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again.», amb la data i la causa que envia GoCardless.
- Crea l'activitat «GoCardless disconnected», perquè algú se n'assabenti sense obrir el proveïdor.
Des d'aquell moment el connector no torna a trucar a GoCardless amb aquest proveïdor: la tasca de cada hora se'l salta, i un cobrament amb el mètode de pagament guardat d'un client passa a «Error» amb «This provider is not connected to GoCardless any more: connect it again first.».
Sense aquest avís, el token continua guardat i GoCardless rebutja cada petició. En un cobrament, la transacció passa a «Error» amb «GoCardless rejected the request.» i, a sota, el missatge de GoCardless amb el reason (access_token_revoked, access_token_not_active o unauthorized) i el request_id entre claudàtors. La factura continua pendent de cobrament, i la tasca de cada hora no reenvia una transacció en error.
L'avís del contacte i l'activitat els escriu el connector sense ningú al davant, en aplicar el webhook. 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 reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again.» i «GoCardless disconnected». Els missatges d'un cobrament surten en l'idioma de qui el llança; si el llança una tasca programada, com la renovació d'una subscripció, segueixen la mateixa regla: «This provider is not connected to GoCardless any more: connect it again first.» i «GoCardless rejected the request.».

Què fer
- 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 diu que el proveïdor ja no està connectat, o n'anomena un dels tres reasons, el problema és la connexió, no el client ni el seu mandat.
- Amb la connexió en dos clics, obre el proveïdor de pagament GoCardless i torna a connectar amb «Connect my GoCardless account».
- En el mode avançat, crea un token nou al Dashboard de GoCardless, enganxa'l a «GoCardless Access Token» i prem «Test connection». El connector demana a GoCardless el creditor del teu compte amb aquest token: si GoCardless el rebutja, veuràs el seu error en aquell moment i no en el següent cobrament.
- Amb la connexió de nou en marxa, torna a cobrar les factures que es van quedar sense cobrar. Les transaccions en error no es reenvien soles.
- Si necessites GoCardless, guarda el
request_iddel missatge: la seva documentació demana incloure'l en contactar amb el seu suport.
Per què el connector esborra el token en lloc de seguir intentant-ho?
Perquè GoCardless diu que aquell token ja no funciona. Així els cobraments següents expliquen què passa (que el proveïdor ja no està connectat) en lloc de rebre un rebuig rere un altre, i al contacte de l'empresa queda escrit quan i per què es va desconnectar.
Un token del sandbox serveix amb el compte de producció?
No. L'ajuda del camp del token ho diu: els tokens del sandbox comencen per sandbox_ i només funcionen amb l'API del sandbox. Per cobrar de debò cal un token de producció.
Amb el nostre connector
A Odoo 17, 18, 19 i 20 el connector no deixa que un token mort es converteixi en una cadena de cobraments fallits sense explicació: si GoCardless avisa de la desconnexió, ho diu a l'empresa i en una activitat, i si no avisa, cada rebuig porta el reason i el request_id de GoCardless.
Continua llegint
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/partner-integrations/connect-your-merchants
- docs.gocardless.com/docs/partner-integrations/webhooks-for-partners
- Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 71 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 143 a 17.0 (d203ee6), línia 143 a 18.0 (e2ab18b), línia 143 a 19.0 (ce7f5a3) i línia 145 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 888 a 17.0 (d203ee6), línia 888 a 18.0 (e2ab18b), línia 888 a 19.0 (ce7f5a3) i línia 903 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 1237 a 17.0 (d203ee6), línia 1237 a 18.0 (e2ab18b), línia 1237 a 19.0 (ce7f5a3) i línia 1234 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 1241 a 17.0 (d203ee6), línia 1241 a 18.0 (e2ab18b), línia 1241 a 19.0 (ce7f5a3) i línia 1238 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 265 a 17.0 (d203ee6), línia 265 a 18.0 (e2ab18b), línia 265 a 19.0 (ce7f5a3) i línia 267 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 545 a 17.0 (d203ee6), línia 545 a 18.0 (e2ab18b), línia 545 a 19.0 (ce7f5a3) i línia 547 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 456 a 17.0 (d203ee6), línia 456 a 18.0 (e2ab18b), línia 456 a 19.0 (ce7f5a3) i línia 458 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 732 a 17.0 (d203ee6), línia 732 a 18.0 (e2ab18b), línia 732 a 19.0 (ce7f5a3) i línia 734 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 336 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 1740 a 17.0 (d203ee6), línia 1740 a 18.0 (e2ab18b), línia 1740 a 19.0 (ce7f5a3) i línia 1745 a 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 247 a 17.0 (d203ee6), línia 247 a 18.0 (e2ab18b), línia 247 a 19.0 (ce7f5a3) i línia 258 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_provider.py, línia 742 a 17.0 (d203ee6), línia 742 a 18.0 (e2ab18b), línia 742 a 19.0 (ce7f5a3) i línia 744 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1100 a 17.0 (d203ee6), línia 1100 a 18.0 (e2ab18b), línia 1100 a 19.0 (ce7f5a3) i línia 1107 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 346 a 17.0 (d203ee6), línia 346 a 18.0 (e2ab18b), línia 346 a 19.0 (ce7f5a3) i línia 348 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1167 a 17.0 (d203ee6), línia 1167 a 18.0 (e2ab18b), línia 1167 a 19.0 (ce7f5a3) i línia 1174 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)
