Saltar al contenido principal
GoCardless API · invalid_api_usage · 401

GoCardless access_token_revoked: Odoo ya no puede hablar con tu cuenta

El token de acceso es la llave con la que Odoo habla con tu cuenta de GoCardless. Si se revoca o se desactiva, GoCardless rechaza cada petición y no se puede cobrar nada. Con la conexión en dos clics, GoCardless avisa y el conector lo deja escrito; en el modo avanzado, te enteras por el rechazo de la siguiente petición.

FlexigoTech · Responsable: Víctor Gómez · Actualizado el 6 de noviembre de 2026

Lo esencial

Módulo
GoCardless
Versiones
Odoo 17, 18, 19 y 20
Comprobado
en el código del conector, versión 17.0, 18.0, 19.0 y 20.0 · en las fuentes enlazadas al final
Lectura
5 min

Qué dice GoCardless

ReasonTipoTexto de GoCardless
access_token_revokedinvalid_api_usageToken has been revoked by the user.
access_token_not_activeinvalid_api_usageToken has been disabled.
unauthorizedinvalid_api_usageCredentials not recognised.

Para Odoo los tres significan lo mismo: la credencial con la que pide las cosas ya no sirve. En su tabla de códigos HTTP, GoCardless reserva el 401 para ese caso: «Missing or invalid Authorization header, or the user has been disabled.». Son errores invalid_api_usage, los que vienen de cómo se hace la petición, y para esos GoCardless pide avisar al equipo técnico («alert your dev team»).

Tarjeta del error access_token_revoked de GoCardless
Los tres reasons de un token que ya no vale, su tipo invalid_api_usage y el código HTTP 401.

Cuándo deja de valer el token

El conector se conecta a GoCardless de dos maneras, y el token muere de forma distinta en cada una:

  • «Conectar mi cuenta de GoCardless» es la conexión en dos clics, a través de FlexigoTech: una integración de partner. Según la guía de partners de GoCardless, el comercio puede revocar ese acceso desde su Dashboard («they can revoke your access from the GoCardless dashboard») o cerrar su cuenta. Entonces GoCardless manda un último webhook y el token deja de funcionar: «Your access token stops working, so you can't make any more API calls for that user.».
  • «Pegar un token de acceso (avanzado)» es el modo en el que creas tú el token en el Dashboard de GoCardless y lo pegas en Odoo. Si lo revocas o lo desactivas allí, Odoo lo descubre en la siguiente petición, cuando GoCardless la rechaza.

Lo que hace Odoo con el conector

Con la conexión en dos clics, ese último webhook llega sin id de evento, como organisations · disconnected. El conector lo aplica así:

  1. Borra el token y el secreto del webhook, y la conexión del proveedor pasa a «Desconectado en GoCardless».
  2. Escribe en el contacto de tu empresa «GoCardless indica que la cuenta se desconectó de Odoo el … (…). No se podrá cobrar nada hasta que se vuelva a conectar.», con la fecha y la causa que manda GoCardless.
  3. Crea la actividad «GoCardless desconectado», para que alguien se entere sin abrir el proveedor.

Desde ese momento el conector no vuelve a llamar a GoCardless con ese proveedor: la tarea de cada hora lo salta, y un cobro con el método de pago guardado de un cliente pasa a «Error» con «Este proveedor ya no está conectado a GoCardless: vuelve a conectarlo primero.».

Sin ese aviso, el token sigue guardado y GoCardless rechaza cada petición. En un cobro, la transacción pasa a «Error» con «GoCardless rechazó la solicitud.» y, debajo, el mensaje de GoCardless con el reason (access_token_revoked, access_token_not_active o unauthorized) y el request_id entre corchetes. La factura sigue pendiente de cobro, y la tarea de cada hora no reenvía una transacción en error.

El aviso del contacto y la actividad los escribe el conector sin nadie delante, al aplicar el webhook. En una base de datos creada en castellano salen así; en una creada en inglés y pasada después a castellano, en inglés: «GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again.» y «GoCardless disconnected». Los mensajes de un cobro salen en el idioma de quien lo lanza; si lo lanza una tarea programada, como la renovación de una suscripción, siguen la misma regla: «This provider is not connected to GoCardless any more: connect it again first.» y «GoCardless rejected the request.».

Esquema: qué manda GoCardless cuando el token deja de valer y qué hace Odoo con el conector
Esquema hecho a partir del código del conector (17.0, 18.0, 19.0 y 20.0) y de la documentación de GoCardless.

Qué hacer

  1. Abre la transacción desde la factura, con el botón «Transacción de pago» de arriba; el menú de transacciones solo sale en modo desarrollador, y en Odoo 20 no existe. Si el mensaje dice que el proveedor ya no está conectado, o nombra uno de los tres reasons, el problema es la conexión, no el cliente ni su mandato.
  2. Con la conexión en dos clics, abre el proveedor de pago GoCardless y vuelve a conectar con «Conectar mi cuenta de GoCardless».
  3. En el modo avanzado, crea un token nuevo en el Dashboard de GoCardless, pégalo en «Token de acceso de GoCardless» y pulsa «Probar la conexión». El conector pide a GoCardless el acreedor de tu cuenta con ese token: si GoCardless lo rechaza, verás su error en ese momento y no en el siguiente cobro.
  4. Con la conexión otra vez en marcha, vuelve a cobrar las facturas que se quedaron sin cobrar. Las transacciones en error no se reenvían solas.
  5. Si necesitas a GoCardless, guarda el request_id del mensaje: su documentación pide incluirlo al contactar con su soporte.

¿Por qué el conector borra el token en vez de seguir intentándolo?

Porque GoCardless dice que ese token ya no funciona. Así los cobros siguientes explican qué pasa (que el proveedor ya no está conectado) en lugar de recibir un rechazo tras otro, y en el contacto de la empresa queda escrito cuándo y por qué se desconectó.

¿Un token del sandbox sirve con la cuenta de producción?

No. La ayuda del campo del token lo dice: los tokens del sandbox empiezan por sandbox_ y solo funcionan con la API del sandbox. Para cobrar de verdad hace falta un token de producción.

Con nuestro conector

En Odoo 17, 18, 19 y 20 el conector no deja que un token muerto se convierta en una cadena de cobros fallidos sin explicación: si GoCardless avisa de la desconexión, lo dice en la empresa y en una actividad, y si no avisa, cada rechazo lleva el reason y el request_id de GoCardless.

Sigue leyendo

Webhook de GoCardless: 498 Token Invalid, 204 y la firma Webhook-SignatureGoCardless pide 498 si la firma Webhook-Signature no cuadra y 204 si no reconoce el evento. Qué contesta Odoo 17, 18, 19 y 20 y por qué en 20 es un 401.GoCardless internal_server_error y request_timed_out: el fallo está en GoCardlessGoCardless responde 500 internal_server_error o 504 request_timed_out cuando falla por su lado. Qué hace el conector en Odoo y cómo no cobrar dos veces.GoCardless 429 rate_limit_exceeded: demasiadas peticiones por minutoGoCardless responde 429 rate_limit_exceeded al pasar de 1.600 peticiones por minuto. Cómo espera y repite el conector y qué hacer si vuelve a fallar.
Comprobado en el código del conector (versión 17.0, 18.0, 19.0 y 20.0) y en las fuentes enlazadas

Fuentes

  • 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
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 71 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 153 en 17.0 (d203ee6), línea 153 en 18.0 (e2ab18b), línea 153 en 19.0 (ce7f5a3) y línea 158 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 958 en 17.0 (d203ee6), línea 958 en 18.0 (e2ab18b), línea 958 en 19.0 (ce7f5a3) y línea 979 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 1237 en 17.0 (d203ee6), línea 1237 en 18.0 (e2ab18b), línea 1237 en 19.0 (ce7f5a3) y línea 1234 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 1241 en 17.0 (d203ee6), línea 1241 en 18.0 (e2ab18b), línea 1241 en 19.0 (ce7f5a3) y línea 1238 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 284 en 17.0 (d203ee6), línea 284 en 18.0 (e2ab18b), línea 284 en 19.0 (ce7f5a3) y línea 289 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 590 en 17.0 (d203ee6), línea 590 en 18.0 (e2ab18b), línea 590 en 19.0 (ce7f5a3) y línea 595 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 485 en 17.0 (d203ee6), línea 485 en 18.0 (e2ab18b), línea 485 en 19.0 (ce7f5a3) y línea 490 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 732 en 17.0 (d203ee6), línea 732 en 18.0 (e2ab18b), línea 732 en 19.0 (ce7f5a3) y línea 734 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 336 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1934 en 17.0 (d203ee6), línea 1934 en 18.0 (e2ab18b), línea 1934 en 19.0 (ce7f5a3) y línea 1943 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 397 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 462 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 560 en 17.0 (d203ee6), línea 560 en 18.0 (e2ab18b), línea 560 en 19.0 (ce7f5a3) y línea 565 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 281 en 17.0 (d203ee6), línea 281 en 18.0 (e2ab18b), línea 281 en 19.0 (ce7f5a3) y línea 292 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 247 en 17.0 (d203ee6), línea 247 en 18.0 (e2ab18b), línea 247 en 19.0 (ce7f5a3) y línea 258 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 623 en 17.0 (d203ee6), línea 623 en 18.0 (e2ab18b), línea 623 en 19.0 (ce7f5a3) y línea 625 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 742 en 17.0 (d203ee6), línea 742 en 18.0 (e2ab18b), línea 742 en 19.0 (ce7f5a3) y línea 744 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1182 en 17.0 (d203ee6), línea 1182 en 18.0 (e2ab18b), línea 1182 en 19.0 (ce7f5a3) y línea 1193 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 370 en 17.0 (d203ee6), línea 370 en 18.0 (e2ab18b), línea 370 en 19.0 (ce7f5a3) y línea 375 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1262 en 17.0 (d203ee6), línea 1262 en 18.0 (e2ab18b), línea 1262 en 19.0 (ce7f5a3) y línea 1273 en 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/es.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
  • Código del módulo: flexigo_payment_gocardless: __manifest__.py, línea 31 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)