Vai al contenuto principale
GoCardless API · invalid_state

Errore retry_failed di GoCardless nel nuovo tentativo di incasso da Odoo

Riprovare un incasso è un'azione dell'API di GoCardless con le sue regole: vale solo per pagamenti falliti, con un mandato attivo e al massimo 3 volte. Se il pagamento non è fallito, la risposta è retry_failed. Con il connettore, Odoo mostra il pulsante di riprova solo quando la sua regola lo consente.

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
5 min

Cosa dice GoCardless

ReasonTipoTesto di GoCardless
retry_failedinvalid_statePayment could not be retried.

La documentazione del nuovo tentativo (POST /payments/{id}/actions/retry) fissa le regole: il pagamento viene ritentato se il suo mandato è attivo, l'API restituisce retry_failed se il pagamento non è fallito e «Payments can be retried up to 3 times.». Come per tutti gli errori invalid_state, GoCardless chiede di avvisare chi usa il sistema e di non lasciargli ritentare. Il connettore annota nel suo codice che anche un quarto tentativo ha ricevuto retry_failed nella sandbox di GoCardless.

Scheda dell'errore retry_failed di GoCardless
Il reason, il suo tipo invalid_state e il testo di GoCardless.

Perché compare

Secondo la documentazione, retry_failed arriva quando il pagamento non è fallito, e il connettore l'ha visto anche richiedendo un quarto tentativo. Con un mandato non più attivo, la documentazione non dice quale errore arrivi: il connettore si aspetta retry_failed o mandate_is_inactive e li tratta allo stesso modo.

Un pagamento non fallito comprende più casi di quanto sembri. Un incasso in sospeso o confermato non è fallito, e nemmeno uno stornato (charged_back): il denaro è arrivato e la banca del cliente lo ha ritirato dopo. Secondo la documentazione di GoCardless, ognuno di questi riceverebbe retry_failed.

Con il limite di tentativi, ciò che confonde è Success+. Quando Success+ ritenta un pagamento, GoCardless invia un evento resubmission_requested, come per qualsiasi altro tentativo. Il connettore ne somma uno per ogni evento di questo tipo, provenga da Success+ o da un tentativo richiesto da Odoo, e annota nel suo codice che il limite di 3 di GoCardless include quelli di Success+. Poiché ogni incasso inviato dal connettore richiede retry_if_possible, con Success+ attivo è facile che una parte di quel margine sia già consumata quando guardi la fattura.

Cosa vedi in Odoo con il connettore

La transazione si apre 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. Il pulsante «Retry collection» della transazione compare solo quando il connettore accetterebbe il nuovo tentativo: lo controlla un campo calcolato con la stessa regola che il server verifica alla pressione. Se la regola dice di no, il pulsante non compare e il motivo non arriva a schermo. Quello che vedi è lo stato della transazione e il suo gruppo GoCardless:

SituazioneCosa vedi nella transazione
Success+ lo ritenteràStato «In sospeso», la casella «Success+ Will Retry» spuntata e, in «Messaggio», «GoCardless could not collect this payment (…). Success+ will retry it automatically; there is nothing to do.». Nessun pulsante.
Fallito, senza Success+, con meno di 3 tentativi e il mandato attivoStato «Errore» e il pulsante «Retry collection».
Sono già 3 tentativiStato «Errore» e «GoCardless Retries» a 3. Nessun pulsante.
Il mandato è archiviatoStato «Errore»; nel contatto, la nota del mandato e l'attività «GoCardless mandate lost». Nessun pulsante.
In sospeso o confermatoNessun pulsante.
Stornato, per esempio con MD06Stato «Errore», anche se il mandato è ancora attivo. Nessun pulsante: in GoCardless il pagamento è in charged_back, non in failed.

Alla pressione del pulsante, Odoo chiede conferma: «GoCardless will try to collect this payment again, which can cost a fee. Continue?». Se GoCardless accetta, la transazione passa a in sospeso con «Retry requested. GoCardless will confirm the new charge date.». Quando arriva l'evento resubmission_requested, il connettore somma il tentativo e scrive la data: «GoCardless will collect this payment again on … (retry requested, retry 1 of 3).». Alla pressione non somma nulla, così ogni tentativo conta una sola volta.

Ciò che arriva con gli eventi lo scrive il connettore senza nessuno davanti: il messaggio di Success+ della tabella, la nuova data di addebito e, se il mandato è morto per un evento, la nota e l'attività del contatto. Il connettore non è tradotto in italiano: questi testi compaiono sempre in inglese, anche in un Odoo in italiano, sia che li avvii un utente sia un'azione pianificata: «GoCardless could not collect this payment (…). Success+ will retry it automatically; there is nothing to do.», «GoCardless will collect this payment again on … (retry requested, retry 1 of 3).» e «GoCardless mandate lost». Ciò che esce dalla pressione del pulsante è nella tua lingua.

Schema: cosa risponde GoCardless con retry_failed 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.

Se GoCardless risponde retry_failed

Se comunque l'API risponde retry_failed o mandate_is_inactive, il connettore consulta il mandato prima di mostrare qualcosa:

  • Se il mandato è morto, lo archivia e lo dice nella transazione: «The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate.».
  • Se è ancora attivo, mostra l'errore di GoCardless così com'è: «GoCardless rejected the request.» e sotto il messaggio dell'API, con il suo reason e il request_id.

Con un incasso stornato non si arriva più qui: dalla versione 1.1.4, il connettore non offre il pulsante se il pagamento non è in failed in GoCardless, e uno stornato è in charged_back.

Cosa fare

  • Se il pulsante non compare, guarda lo stato della transazione, «Success+ Will Retry» e «GoCardless Retries»: una delle situazioni della tabella lo spiega.
  • Se i tentativi sono 3, parla con il cliente: il connettore non ne chiede più un altro.
  • Se il mandato è archiviato, chiedine uno nuovo e incassa con quello.
  • Con un incasso stornato non c'è pulsante: parla prima con il cliente e, se serve, incassa di nuovo la fattura con un nuovo incasso.

Ogni nuovo tentativo costa denaro?

Può. Il pulsante lo segnala prima di inviare qualsiasi cosa, e il connettore non lo offre mentre Success+ sta per ritentare l'incasso, perché un tentativo manuale aggiungerebbe solo una commissione. Le tariffe concrete dipendono dal tuo contratto con GoCardless.

Posso ritentare un incasso stornato dal cliente?

Con questo pulsante no: il connettore non lo offre su un incasso stornato, perché GoCardless ritenta solo pagamenti falliti e uno stornato non lo è. Uno storno, come un MD06, si risolve parlando con il cliente e, se serve, con un nuovo incasso.

Con il nostro connettore

In Odoo 17, 18, 19 e 20 il connettore conta i tentativi con gli eventi di GoCardless e mostra il pulsante solo quando la sua regola lo consente: non con Success+ in corso, non con 3 tentativi, non con il mandato archiviato. Se comunque arriva retry_failed, guarda il mandato prima di mostrarti l'errore.

Continua a leggere

GoCardless insufficient_funds (AM04): il conto del cliente non aveva fondi sufficientiUn addebito GoCardless fallisce con insufficient_funds e codice SEPA AM04. Cosa significa, quando lo riprova Success+ e cosa fa Odoo con la fattura.Errore mandate_is_inactive di GoCardless alla creazione di un incasso da OdooGoCardless risponde mandate_is_inactive se crei un pagamento con un mandato annullato, fallito o scaduto. Perché succede e come lo gestisce il connettore.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/payment
  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • Codice del modulo: flexigo_payment_gocardless: const.py, riga 119 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 680 in 17.0 (d203ee6), riga 680 in 18.0 (e2ab18b), riga 679 in 19.0 (ce7f5a3) e riga 703 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 449 in 17.0 (d203ee6), riga 449 in 18.0 (e2ab18b), riga 448 in 19.0 (ce7f5a3) e riga 463 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: const.py, riga 122 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 260 in 17.0 (d203ee6), riga 260 in 18.0 (e2ab18b), riga 260 in 19.0 (ce7f5a3) e riga 271 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, riga 13 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 63 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 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: views/payment_transaction_views.xml, riga 27 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, riga 28 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/it.po
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 729 in 17.0 (d203ee6), riga 729 in 18.0 (e2ab18b), riga 728 in 19.0 (ce7f5a3) e riga 752 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 713 in 17.0 (d203ee6), riga 713 in 18.0 (e2ab18b), riga 712 in 19.0 (ce7f5a3) e riga 736 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 430 in 17.0 (d203ee6), riga 430 in 18.0 (e2ab18b), riga 429 in 19.0 (ce7f5a3) e riga 444 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 437 in 17.0 (d203ee6), riga 437 in 18.0 (e2ab18b), riga 436 in 19.0 (ce7f5a3) e riga 451 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 442 in 17.0 (d203ee6), riga 442 in 18.0 (e2ab18b), riga 441 in 19.0 (ce7f5a3) e riga 456 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 435 in 17.0 (d203ee6), riga 435 in 18.0 (e2ab18b), riga 434 in 19.0 (ce7f5a3) e riga 449 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_token.py, riga 131 in 17.0 (d203ee6), riga 131 in 18.0 (e2ab18b), riga 131 in 19.0 (ce7f5a3) e riga 130 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 469 in 17.0 (d203ee6), riga 469 in 18.0 (e2ab18b), riga 468 in 19.0 (ce7f5a3) e riga 487 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 321 in 17.0 (d203ee6), riga 321 in 18.0 (e2ab18b), riga 321 in 19.0 (ce7f5a3) e riga 332 in 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: models/payment_transaction.py, riga 484 in 17.0 (d203ee6), riga 484 in 18.0 (e2ab18b), riga 483 in 19.0 (ce7f5a3) e riga 502 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 683 in 17.0 (d203ee6), riga 683 in 18.0 (e2ab18b), riga 682 in 19.0 (ce7f5a3) e riga 706 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1016 in 17.0 (d203ee6), riga 1016 in 18.0 (e2ab18b), riga 1016 in 19.0 (ce7f5a3) e riga 1031 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 567 in 17.0 (d203ee6), riga 567 in 18.0 (e2ab18b), riga 567 in 19.0 (ce7f5a3) e riga 569 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1063 in 17.0 (d203ee6), riga 1063 in 18.0 (e2ab18b), riga 1063 in 19.0 (ce7f5a3) e riga 1070 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 408 in 17.0 (d203ee6), riga 408 in 18.0 (e2ab18b), riga 408 in 19.0 (ce7f5a3) e riga 410 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 436 in 17.0 (d203ee6), riga 436 in 18.0 (e2ab18b), riga 436 in 19.0 (ce7f5a3) e riga 438 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1083 in 17.0 (d203ee6), riga 1083 in 18.0 (e2ab18b), riga 1083 in 19.0 (ce7f5a3) e riga 1090 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 495 in 17.0 (d203ee6), riga 495 in 18.0 (e2ab18b), riga 495 in 19.0 (ce7f5a3) e riga 497 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1022 in 17.0 (d203ee6), riga 1022 in 18.0 (e2ab18b), riga 1022 in 19.0 (ce7f5a3) e riga 1037 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 560 in 17.0 (d203ee6), riga 560 in 18.0 (e2ab18b), riga 560 in 19.0 (ce7f5a3) e riga 562 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1481 in 17.0 (d203ee6), riga 1481 in 18.0 (e2ab18b), riga 1481 in 19.0 (ce7f5a3) e riga 1488 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1233 in 17.0 (d203ee6), riga 1233 in 18.0 (e2ab18b), riga 1233 in 19.0 (ce7f5a3) e riga 1240 in 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: __manifest__.py, riga 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/payment
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml