Salta al contingut principal
API de GoCardless · invalid_state · reemborsaments

GoCardless refund_payment_invalid_state: aquest cobrament encara no es pot reemborsar

Un reemborsament de GoCardless retorna al client els diners d'un cobrament, i GoCardless només l'accepta si aquest cobrament està confirmat o ja liquidat. Si no, respon refund_payment_invalid_state. A més, GoCardless té un període de reemborsament segur de 7 dies naturals, i el connector d'Odoo afegeix la seva pròpia regla de 2 dies.

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
refund_payment_invalid_stateinvalid_statePayment must be confirmed or paid_out before it can be refunded.

A la referència dels reemborsaments, GoCardless afegeix un termini: «A refund can only be created once it is outside the safer refund period (7 calendar days after the charge date) otherwise an error is returned.». Aquest període es pot treure: «The safer refund period can be disabled by contacting GoCardless.». I recorda per què existeix: «A payment that has been (partially) refunded can still receive a late failure or chargeback from the customer's bank.».

Els reemborsaments per l'API, a més, vénen desactivats: «This endpoint is disabled by default. To enable it, you will need to enable refunds on your GoCardless Dashboard.».

Targeta de l'error refund_payment_invalid_state de GoCardless
El reason, el seu tipus invalid_state i els estats confirmed i paid_out que GoCardless demana per reemborsar.

Les regles de termini, d'un cop d'ull

Dies des del cobramentGoCardless, per defecteEl connector
Menys de 2dins del període segur: retorna un errorno envia el reemborsament
2 o més, però menys de 7dins del període segur: retorna un errorl'envia i deixa un avís al registre del servidor
7 o mésfora del període segurl'envia

Els dos no comptin des del mateix lloc. GoCardless compta des de la data de càrrec del pagament. El connector compta des de l'últim canvi d'estat de la transacció del cobrament a Odoo. Si GoCardless t'ha tret el període segur, entre 2 i 7 dies el reemborsament pot tirar endavant.

Quan surt refund_payment_invalid_state amb el connector

Odoo només deixa reemborsar una transacció confirmada, i el connector la confirma quan GoCardless diu confirmed o paid_out. Així que, amb el connector, aquest reason vol dir que el pagament ha canviat a GoCardless i Odoo encara no ho sap: una fallada tardana, que GoCardless pot comunicar amb el pagament ja confirmat, o una devolució del client l'esdeveniment de la qual encara no ha arribat.

Què fa el connector

  1. Amb menys de 2 dies, no envia res: Odoo s'atura amb «GoCardless cannot refund a collection until it has settled. This one was charged … day(s) ago; refunds are possible after 2 days.».
  2. Si no, envia el reemborsament a GoCardless amb la seva clau d'idempotència. Si GoCardless el rebutja, per aquest reason, pel període segur o per qualsevol altre motiu, la transacció del reemborsament passa a «Error» amb «GoCardless rejected the request.» i, a sota, el missatge de GoCardless amb el reason i el request_id.
  3. Si l'accepta, la transacció queda en «Pendent» amb «Refund submitted. GoCardless will deduct it from a future payout.», i passa a «Confirmat» quan GoCardless el paga o el descompta d'una liquidació.

Des de la versió 1.1.5, un reemborsament en error no mostra el botó «Retry collection»: un reemborsament no és un cobrament, i no hi ha res que GoCardless pugui reintentar. Si GoCardless no aconsegueix que els diners arribin al client, el connector passa el reemborsament a error amb «GoCardless could not pay this refund back (…).». Aquest text l'escriu en aplicar l'esdeveniment, sense ningú davant. 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.

Esquema: què respon GoCardless en reemborsar 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ó del cobrament 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. Des d'allí, el botó de reemborsaments porta a la transacció del reemborsament i al seu missatge.
  2. Si el reason és refund_payment_invalid_state, mira el pagament al Dashboard de GoCardless. Si ha fallat tard o el client l'ha retornat, no hi ha res a reemborsar: els diners ja no són amb tu. Odoo ho reflectirà quan arribi l'esdeveniment; la tasca que cada hora recupera els esdeveniments perduts el porta.
  3. Si el rebuig ve del període segur, espera que passin 7 dies des de la data de càrrec, o demana a GoCardless que el tregui.
  4. Per tornar a reemborsar, fes-ho des del pagament del cobrament, amb el seu botó de reemborsament. El connector admet reemborsaments parcials.

Per què el connector deixa reemborsar des dels 2 dies si GoCardless parla de 7?

Els 2 dies són el mínim del connector: per sota no envia res. GoCardless permet treure el seu període segur, i mentre és actiu és GoCardless qui rebutja el reemborsament abans de 7 dies. Entre 2 i 7 dies el connector avisa al registre, perquè una fallada SEPA encara pot arribar.

Un cobrament reemborsat pot fallar després?

Sí. GoCardless ho advereix: un pagament reemborsat, del tot o en part, encara pot rebre una fallada tardana o una devolució del banc del client. En aquest cas hauries retornat uns diners que no arribaves a quedar-te.

Amb el nostre connector

A Odoo 17, 18, 19 i 20 el connector no envia reemborsaments de cobraments de menys de 2 dies, deixa en error amb el seu request_id els que GoCardless rebutja i no ofereix reintentar un reemborsament, que no és un cobrament.

Continua llegint

GoCardless total_amount_confirmation_invalid: el total reemborsat no quadraGoCardless rebutja un reemborsament amb total_amount_confirmation_invalid si el total reemborsat no quadra, o amb number_of_refunds_exceeded després de 5.GoCardless MD06: el client demana al seu banc que li retorni un cobramentEl client demana al seu banc que li retorni un adeudament de GoCardless: charged_back, refund_requested i MD06. Què passa a Odoo amb la factura i el mandat.GoCardless insufficient_funds (AM04): el compte del client no tenia saldoUn deute de GoCardless falla amb insufficient_funds i el codi SEPA AM04. Què vol dir, quan el reintenta Success+ i què fa Odoo amb la factura.
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/refund
  • support.gocardless.com/hc/en-gb/articles/360001467265
  • Codi del mòdul: flexigo_payment_gocardless: const.py, línia 41 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/models/payment_transaction.py
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_payment_views.xml
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 256 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: const.py, línia 106 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 361 a 17.0 (d203ee6), línia 361 a 18.0 (e2ab18b), línia 360 a 19.0 (ce7f5a3) i línia 375 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 365 a 17.0 (d203ee6), línia 365 a 18.0 (e2ab18b), línia 364 a 19.0 (ce7f5a3) i línia 379 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 414 a 17.0 (d203ee6), línia 414 a 18.0 (e2ab18b), línia 414 a 19.0 (ce7f5a3) i línia 416 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 371 a 17.0 (d203ee6), línia 371 a 18.0 (e2ab18b), línia 370 a 19.0 (ce7f5a3) i línia 385 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 397 a 17.0 (d203ee6), línia 397 a 18.0 (e2ab18b), línia 396 a 19.0 (ce7f5a3) i línia 411 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 413 a 17.0 (d203ee6), línia 413 a 18.0 (e2ab18b), línia 412 a 19.0 (ce7f5a3) i línia 427 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 605 a 17.0 (d203ee6), línia 605 a 18.0 (e2ab18b), línia 604 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 352 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 987 a 17.0 (d203ee6), línia 987 a 18.0 (e2ab18b), línia 987 a 19.0 (ce7f5a3) i línia 1002 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 611 a 17.0 (d203ee6), línia 611 a 18.0 (e2ab18b), línia 610 a 19.0 (ce7f5a3) i línia 631 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 442 a 17.0 (d203ee6), línia 442 a 18.0 (e2ab18b), línia 442 a 19.0 (ce7f5a3) i línia 444 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 424 a 17.0 (d203ee6), línia 424 a 18.0 (e2ab18b), línia 423 a 19.0 (ce7f5a3) i línia 438 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 418 a 17.0 (d203ee6), línia 418 a 18.0 (e2ab18b), línia 417 a 19.0 (ce7f5a3) i línia 432 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 63 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: const.py, línia 117 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 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)