Vai al contenuto principale
GoCardless API · invalid_state · rimborsi

GoCardless total_amount_confirmation_invalid: il totale rimborsato non torna

Ogni rimborso richiesto a GoCardless porta una cifra di controllo: tutto quanto rimborsato su quel pagamento, incluso il nuovo. Se non coincide con quanto GoCardless ha registrato, rifiuta il rimborso con total_amount_confirmation_invalid. È una salvaguardia contro due sistemi che rimborsano lo stesso incasso senza sapere l'uno dell'altro.

FlexigoTech · Responsabile: Víctor Gómez · Aggiornato il 6 novembre 2026

In breve

Versioni
Odoo 17, 18, 19 e 20
Verificato
nel codice del connettore, versione 17.0, 18.0, 19.0 e 20.0 · nelle fonti collegate in fondo
Lettura
3 min

Cosa dice GoCardless

ReasonTipoTesto di GoCardless
total_amount_confirmation_invalidinvalid_stateTotal amount refunded does not match the confirmation value.
number_of_refunds_exceededinvalid_stateMaximum of 5 refunds per payment already reached.

Il riferimento dei rimborsi spiega il primo: «total_amount_confirmation_invalid if the confirmation amount doesn't match the total amount refunded for the payment.». E per cosa serve: «This safeguard is there to prevent two processes from creating refunds without awareness of each other.».

Quel campo, secondo GoCardless, è la somma dei rimborsi che il pagamento ha già più quello che si sta creando, in centesimi. Nel suo esempio, un rimborso di 100 porta un total_amount_confirmation di 150: su quel pagamento erano già stati restituiti 50.

Scheda dell'errore total_amount_confirmation_invalid di GoCardless
Il reason, il suo tipo invalid_state, il campo total_amount_confirmation e il limite di 5 rimborsi per pagamento.

Come calcola il connettore quella cifra

Per ogni rimborso, il connettore somma i rimborsi di quell'incasso che in Odoo risultano in attesa, autorizzati o eseguiti, e vi aggiunge il nuovo. Quelli in errore non contano. Questa somma va come total_amount_confirmation.

Che includa anche quelli in attesa conta: un rimborso in corso è già stato richiesto a GoCardless, e se non lo sommasse la cifra risulterebbe troppo bassa e GoCardless rifiuterebbe il successivo.

Quando non torna

La cifra viene da ciò che Odoo sa. Se qualcuno ha restituito denaro di quell'incasso per una strada che non passa da Odoo, per esempio con un altro programma collegato allo stesso account GoCardless, GoCardless lo ha registrato e Odoo no. Il totale inviato dal connettore risulta quindi inferiore, e GoCardless rifiuta il rimborso. È esattamente il caso per cui esiste questa salvaguardia: se lo accettasse, il cliente riceverebbe due volte lo stesso denaro.

number_of_refunds_exceeded è un'altra cosa: il connettore consente rimborsi parziali, e GoCardless ne ammette al massimo 5 per pagamento. Il sesto viene rifiutato anche se resta un importo da restituire.

Cosa fa Odoo con il connettore

In Odoo un incasso si rimborsa dal suo pagamento, con il pulsante di rimborso, e solo se la sua transazione è confermata. Il connettore invia il rimborso con la sua chiave di idempotenza e, se GoCardless lo rifiuta, la transazione del rimborso passa a «Errore» con «GoCardless rejected the request.» e, sotto, il messaggio di GoCardless con il reason e il request_id tra parentesi quadre.

Dalla versione 1.1.5, un rimborso in errore non mostra il pulsante «Retry collection»: un rimborso non è un incasso.

Schema: cosa risponde GoCardless quando il totale non torna e cosa fa Odoo con il connettore
Schema realizzato a partire dal codice del connettore (17.0, 18.0, 19.0 e 20.0) e dalla documentazione di GoCardless.

Cosa fare

  1. Apri la transazione dell'incasso dalla fattura, con il pulsante «Transazione di pagamento» in alto; il menu delle transazioni compare solo in modalità sviluppatore, e in Odoo 20 non esiste. Da lì, il pulsante dei rimborsi porta alla transazione del rimborso e al suo messaggio.
  2. Con total_amount_confirmation_invalid, controlla nella Dashboard di GoCardless i rimborsi di quel pagamento. Se ce n'è uno eseguito fuori da Odoo, il denaro è già tornato al cliente: non restituirlo di nuovo da Odoo.
  3. Con number_of_refunds_exceeded, quel pagamento non accetta più rimborsi in GoCardless. Se devi ancora restituire qualcosa, dovrà passare da un'altra via.
  4. Per non arrivare al limite, raggruppa in un unico rimborso quanto da restituire su uno stesso incasso.
  5. Se ti serve GoCardless, conserva il request_id del messaggio: la loro documentazione chiede di includerlo quando si contatta il supporto.

Perché Odoo non vede i rimborsi fatti per altra via?

GoCardless segnala via webhook ogni rimborso creato, ma il connettore applica questi avvisi solo ai rimborsi presenti in Odoo: uno creato per altra via non ha una transazione e non entra nella cifra.

Posso restituire solo una parte di un incasso?

Sì. Il connettore consente rimborsi parziali, fino al limite di 5 per pagamento fissato da GoCardless; ciascuno porta nella sua cifra di controllo quelli precedenti.

Con il nostro connettore

In Odoo 17, 18, 19 e 20 il connettore invia in ogni rimborso il totale di quanto rimborsato su quell'incasso, inclusi quelli in corso, così che GoCardless blocchi un rimborso doppio invece di pagarlo, e lascia il rifiuto nella transazione con il suo request_id.

Continua a leggere

GoCardless refund_payment_invalid_state: questo addebito non si può ancora rimborsareGoCardless risponde refund_payment_invalid_state se il pagamento non è confirmed né paid_out. Le regole di attesa di GoCardless e del connettore per Odoo.GoCardless 409 idempotent_creation_conflict: l'addebito esisteva giàGoCardless risponde 409 idempotent_creation_conflict se una chiave di idempotenza ha già creato qualcosa. Non è un errore: ecco come evita il doppio addebito.GoCardless MD06: il cliente chiede alla propria banca di stornare un addebitoIl cliente chiede alla propria banca di stornare un addebito GoCardless: charged_back, refund_requested e MD06. Cosa succede in Odoo con fattura e mandato.
Verificato nel codice del connettore (versione 17.0, 18.0, 19.0 e 20.0) e nelle fonti collegate

Fonti

  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • docs.gocardless.com/docs/api-reference/refund
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 550 in 17.0 (d203ee6), riga 550 in 18.0 (e2ab18b), riga 549 in 19.0 (ce7f5a3) e riga 568 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 389 in 17.0 (d203ee6), riga 389 in 18.0 (e2ab18b), riga 388 in 19.0 (ce7f5a3) e riga 403 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 383 in 17.0 (d203ee6), riga 383 in 18.0 (e2ab18b), riga 382 in 19.0 (ce7f5a3) e riga 397 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 256 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 397 in 17.0 (d203ee6), riga 397 in 18.0 (e2ab18b), riga 396 in 19.0 (ce7f5a3) e riga 411 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 352 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 397 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 462 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 521 in 17.0 (d203ee6), riga 521 in 18.0 (e2ab18b), riga 521 in 19.0 (ce7f5a3) e riga 523 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 424 in 17.0 (d203ee6), riga 424 in 18.0 (e2ab18b), riga 423 in 19.0 (ce7f5a3) e riga 438 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 418 in 17.0 (d203ee6), riga 418 in 18.0 (e2ab18b), riga 417 in 19.0 (ce7f5a3) e riga 432 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 63 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 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/it.po
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
  • Codice del modulo: flexigo_payment_gocardless: __manifest__.py, riga 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • github.com/odoo/odoo/blob/17.0/odoo/http.py