Què diu GoCardless
| Reason | Tipus | Text de GoCardless |
|---|---|---|
total_amount_confirmation_invalid | invalid_state | Total amount refunded does not match the confirmation value. |
number_of_refunds_exceeded | invalid_state | Maximum of 5 refunds per payment already reached. |
La referència dels reemborsaments explica el primer: «total_amount_confirmation_invalid if the confirmation amount doesn't match the total amount refunded for the payment.». I per a què serveix: «This safeguard is there to prevent two processes from creating refunds without awareness of each other.».
Aquest camp, diu GoCardless, és la suma dels reemborsaments que ja té el pagament més el que es crea, en cèntims. En el seu exemple, un reemborsament de 100 du un total_amount_confirmation de 150: d'aquest pagament ja s'havien retornat 50.

Com calcula el connector aquesta xifra
Per a cada reemborsament, el connector suma els reemborsaments d'aquest cobrament que a Odoo estan pendents, autoritzats o fets, i hi afegeix el nou. Els que estan en error no compten. Aquesta suma va com a total_amount_confirmation.
Que compti també els pendents importa: un reemborsament en camí ja està demanat a GoCardless, i si no el sumés, la xifra es quedaria curta i GoCardless rebutjaria el següent.
Quan no quadra
La xifra surt del que Odoo sap. Si algú ha retornat diners d'aquest cobrament per un camí que no passa per Odoo, per exemple amb un altre programa connectat al mateix compte de GoCardless, GoCardless ho té apuntat i Odoo no. El total que envia el connector es queda curt, i GoCardless rebutja el reemborsament. És exactament el cas per al qual existeix aquesta salvaguarda: si l'acceptés, el client rebria dues vegades els mateixos diners.
number_of_refunds_exceeded és una altra cosa: el connector permet reemborsaments parcials, i GoCardless admet com a molt 5 per pagament. El sisè es rebutja encara que quedi import per retornar.
Què fa Odoo amb el connector
A Odoo, un cobrament es reemborsa des del seu pagament, amb el botó de reemborsament, i només si la seva transacció està confirmada. El connector envia el reemborsament amb la seva clau d'idempotència i, si GoCardless el rebutja, 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 entre claudàtors.
Des de la versió 1.1.5, un reemborsament en error no mostra el botó «Retry collection»: un reemborsament no és un cobrament.

Què fer
- 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.
- Amb
total_amount_confirmation_invalid, mira al Dashboard de GoCardless els reemborsaments d'aquest pagament. Si n'hi ha algun fet fora d'Odoo, els diners ja han tornat al client: no els retornis una altra vegada des d'Odoo. - Amb
number_of_refunds_exceeded, aquest pagament ja no admet més reemborsaments a GoCardless. Si encara has de retornar alguna cosa, haurà de ser per una altra via. - Per no arribar al límit, ajunta en un sol reemborsament el que s'hagi de retornar d'un mateix cobrament.
- Si necessites GoCardless, guarda el
request_iddel missatge: la seva documentació demana incloure'l en contactar amb el seu suport.
Per què Odoo no veu els reemborsaments fets per un altre camí?
GoCardless avisa per webhook de cada reemborsament creat, però el connector només aplica aquests avisos als reemborsaments que té a Odoo: un creat per un altre camí no té transacció, i no entra a la xifra.
Puc retornar només una part d'un cobrament?
Sí. El connector permet reemborsaments parcials, fins al límit de 5 per pagament que posa GoCardless; cadascun porta a la seva xifra de control els anteriors.
Amb el nostre connector
A Odoo 17, 18, 19 i 20 el connector envia en cada reemborsament el total del reemborsat d'aquest cobrament, comptant els que són en camí, perquè GoCardless aturi un reemborsament doble en lloc de pagar-lo, i deixa el rebuig a la transacció amb el seu request_id.
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/api-reference/refund
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 550 a 17.0 (d203ee6), línia 550 a 18.0 (e2ab18b), línia 549 a 19.0 (ce7f5a3) i línia 568 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 389 a 17.0 (d203ee6), línia 389 a 18.0 (e2ab18b), línia 388 a 19.0 (ce7f5a3) i línia 403 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 383 a 17.0 (d203ee6), línia 383 a 18.0 (e2ab18b), línia 382 a 19.0 (ce7f5a3) i línia 397 a 20.0 (688d86b)
- 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: 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 352 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 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)
- 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
- 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
- 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)
- github.com/odoo/odoo/blob/17.0/odoo/http.py
