Una causa, quatre codis
| Codi SEPA Core | Text de GoCardless |
|---|---|
| MS02 | The customer refused to accept this payment. |
| MS03, RR04 | The payment failed but the reason for the failure was not provided, usually for regulatory reasons. |
| SL01 | The payment failed due to a restriction on Direct Debit payments from the payer's bank account. |
Les tres files provenen de la taula de fallades de pagament (payments · failed) de la documentació de GoCardless per a SEPA Core. A diferència d'altres causes, cap no diu que el mandat es cancel·li: el client continua autoritzat perquè li cobris, encara que aquest adeudament concret no hagi passat.

Què hi ha darrere de cada codi
MS02 és la resposta més clara: el client va dir al seu banc que no pagués aquell rebut. El connector anota al seu codi que és la combinació que va veure en un pagament SEPA de prova del sandbox de GoCardless. MS03 i RR04 són el contrari: el pagament falla i el banc no dona el motiu, normalment per raons regulatòries, així que l'única manera de saber què passa és preguntar al client. SL01 apunta al compte: el seu banc limita els adeudaments directes que se li poden carregar, i això només ho pot canviar el titular amb el seu banc.
Amb MS02, RR04 i SL01, tornar a presentar l'adeudament sense parlar abans amb el client sol acabar igual i pot costar una altra comissió. MS03 té una excepció: segons la guia de Success+, a Àustria, Bèlgica, Alemanya, Luxemburg i Eslovàquia MS03 compta com a falta de fons, i Success+ el pot reintentar. Si és així, l'esdeveniment arriba amb will_attempt_retry a true.
Què fa Odoo amb el connector
La transacció s'obre 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. El connector guarda la causa al camp «GoCardless Cause», no el codi SEPA, i mostra «GoCardless could not collect this payment (refer_to_payer).». Després segueix el que digui l'esdeveniment:
- Si
will_attempt_retryve atrue, la transacció queda «Pendent», la casella «Success+ Will Retry» es marca i el missatge ho diu: «Success+ will retry it automatically; there is nothing to do.». El botó de reintentar no surt. - Si no, la transacció passa a «Error» i surt el botó «Retry collection», si queden reintents. Si Odoo ja donava el cobrament per fet, el connector anul·la el seu pagament i la factura torna a estar pendent de cobrament.
- El mandat no es toca.
refer_to_payerno és entre les causes amb què el connector arxiva un mandat, així que el mètode de pagament del client continua disponible per al següent cobrament.
Aquest últim punt és deliberat: arxivar el mandat per un rebuig puntual obligaria el client a signar-ne un altre sense motiu.
Els dos missatges els escriu el connector en aplicar l'esdeveniment, sense ningú al 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: «GoCardless could not collect this payment (refer_to_payer).» i «Success+ will retry it automatically; there is nothing to do.».
Què fer segons el codi
Odoo no et diu quin dels quatre codis va arribar: el connector només guarda la causa. El codi el veus a GoCardless. Segons el seu centre d'ajuda, el motiu de cada fallada surt a la cronologia del pagament, al Dashboard («You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.»). En el mode avançat, el codi exacte també va a l'esdeveniment (details.reason_code), i el Dashboard guarda els enviaments dels últims 3 mesos a Developers > Webhooks, amb el seu contingut.
| Codi | Primer pas |
|---|---|
| MS02 | Pregunta al client per què va rebutjar el rebut: import, data o un desacord amb la factura. |
| MS03 | Mira «Success+ Will Retry»: a Àustria, Bèlgica, Alemanya, Luxemburg i Eslovàquia, Success+ pot reintentar MS03 com a falta de fons. Si no està marcada, demana al client que consulti el seu banc. |
| RR04 | Demana al client que consulti el seu banc: GoCardless no rep el motiu. |
| SL01 | El client ha d'aixecar la limitació d'adeudaments del seu compte, o donar-te'n un altre. |
Quan el client confirmi que el cobrament passarà, usa «Retry collection» a la transacció i confirma l'avís de la comissió. El connector respon «Retry requested. GoCardless will confirm the new charge date.» i la deixa pendent. Recorda el límit: un pagament es pot reintentar com a màxim 3 vegades («Payments can be retried up to 3 times.»).
Es cancel·la el mandat si el client rebutja un cobrament?
No. Ni la documentació de GoCardless ho diu per a aquesta causa ni el connector arxiva el mandat amb refer_to_payer. Si el client vol deixar de pagar-te per domiciliació, cancel·larà el mandat al seu banc i això arriba amb una altra causa, mandate_cancelled.

Amb el nostre connector
A Odoo 17, 18, 19 i 20 el connector converteix refer_to_payer en una factura pendent amb la causa a la vista i un mandat que continua valent. No endevina el codi SEPA: Odoo guarda la causa a la transacció, i el codi el consultes a GoCardless. La decisió de tornar a cobrar és teva, després de parlar amb el client.
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/events/payment
- docs.gocardless.com/docs/api-reference/payment
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 15 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 79 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 76 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 71 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 725 a 17.0 (d203ee6), línia 725 a 18.0 (e2ab18b), línia 724 a 19.0 (ce7f5a3) i línia 748 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 729 a 17.0 (d203ee6), línia 729 a 18.0 (e2ab18b), línia 728 a 19.0 (ce7f5a3) i línia 752 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 754 a 17.0 (d203ee6), línia 754 a 18.0 (e2ab18b), línia 753 a 19.0 (ce7f5a3) i línia 777 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 122 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: views/payment_transaction_views.xml, línia 13 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 436 a 17.0 (d203ee6), línia 436 a 18.0 (e2ab18b), línia 436 a 19.0 (ce7f5a3) i línia 438 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 356 a 17.0 (d203ee6), línia 356 a 18.0 (e2ab18b), línia 356 a 19.0 (ce7f5a3) i línia 358 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1016 a 17.0 (d203ee6), línia 1016 a 18.0 (e2ab18b), línia 1016 a 19.0 (ce7f5a3) i línia 1031 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1022 a 17.0 (d203ee6), línia 1022 a 18.0 (e2ab18b), línia 1022 a 19.0 (ce7f5a3) i línia 1037 a 20.0 (688d86b)
- 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)
- docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
- 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: 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: views/payment_transaction_views.xml, línia 27 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/payment/views/payment_transaction_views.xml
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1083 a 17.0 (d203ee6), línia 1083 a 18.0 (e2ab18b), línia 1083 a 19.0 (ce7f5a3) i línia 1090 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1063 a 17.0 (d203ee6), línia 1063 a 18.0 (e2ab18b), línia 1063 a 19.0 (ce7f5a3) i línia 1070 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 567 a 17.0 (d203ee6), línia 567 a 18.0 (e2ab18b), línia 567 a 19.0 (ce7f5a3) i línia 569 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 461 a 17.0 (d203ee6), línia 461 a 18.0 (e2ab18b), línia 460 a 19.0 (ce7f5a3) i línia 479 a 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/webhooks
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- support.gocardless.com/hc/en-gb/articles/360001467265
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 66 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
