Vai al contenuto principale
GoCardless · webhook

Webhook di GoCardless: 498 Token Invalid, 204 e la firma Webhook-Signature

Gli eventi di GoCardless arrivano a Odoo tramite un webhook firmato, e la risposta di Odoo dice a GoCardless se deve riprovare. Due codici hanno un significato speciale: 498 per una firma che non torna e 204 per un evento che non viene riconosciuto. Con entrambi, GoCardless smette di riprovare.

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

RispostaTesto di GoCardless
498 Token InvalidSignature verification failed. GoCardless will log this and not retry.
204 No ContentEvent type is not recognised. GoCardless will not retry.

Qualsiasi altra risposta diversa da 2xx fa sì che GoCardless riprovi: 9 tentativi di consegna in totale, il primo più 8 nuovi tentativi, sempre più distanziati. Inoltre, attende la risposta al massimo 10 secondi.

Scheda delle risposte 498 e 204 al webhook di GoCardless
I due codici che bloccano i nuovi tentativi di GoCardless e il testo con cui li documenta.

Come si verifica la firma

GoCardless firma ogni invio con un HMAC SHA256 in esadecimale del corpo così com'è, con il segreto dell'endpoint, e lo invia nell'intestazione Webhook-Signature. Se il segreto che ha Odoo non è quello dell'endpoint, nessuna firma torna. Succede se si copia male il segreto, se lo si rigenera nella Dashboard senza aggiornarlo in Odoo, o se si inviano a un Odoo gli eventi di un altro account.

Il connettore non si ferma alla prima configurazione di GoCardless che trova: cerca quella che ha il segreto che firma quell'invio. Così una configurazione di test dimenticata non rifiuta gli eventi reali.

Cosa risponde Odoo con il connettore

SituazioneOdoo 17, 18 e 19Odoo 20
Nessun segreto torna con la firma498401
Firma corretta, nessun evento è suo204204
Eventi applicati200200

La differenza di Odoo 20 non è una scelta del connettore: il suo server HTTP non permette di rispondere con un codice che non sia standard, e 498 non lo è. Ciò che succede dopo dipende da come arrivano gli eventi. In modalità avanzata vanno direttamente da GoCardless a Odoo: con 401, GoCardless riprova un invio che resterà non valido, e un segreto impostato male si vede come una serie di tentativi falliti nella Dashboard di GoCardless. Con la connessione in due clic arrivano tramite FlexigoTech Cloud, che considera quel 401 come definitivo, come un 498.

Se un evento non arriva

GoCardless garantisce che ogni evento arrivi almeno una volta, non esattamente una: può ripetersi. Il connettore registra ogni evento che applica, uno per evento e per configurazione di GoCardless, e se lo stesso evento arriva di nuovo non lo applica due volte. Questo conta con i soldi: un pagamento confermato due volte non deve registrare due incassi sulla fattura. E se un evento va perso, l'azione pianificata che ogni ora chiede a GoCardless gli eventi mancanti lo recupera, fino a 100 per passaggio.

Cosa fare

  1. Se usi la connessione in due clic («Connect my GoCardless account»), i webhook li configura FlexigoTech Cloud: non c'è nessun segreto da copiare.
  2. In modalità avanzata («Paste an access token (advanced)»), l'endpoint e il suo segreto li crei tu nella Dashboard di GoCardless: copia il segreto esatto nella configurazione di GoCardless in Odoo.
  3. Se rigeneri il segreto, aggiornalo subito in Odoo; fino ad allora, ogni invio fallirà.
  4. Controlla nella Dashboard di GoCardless gli invii falliti: da lì si possono rilanciare a mano.
Schema: cosa invia GoCardless al webhook e cosa risponde 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.

Perché non rispondere 500 quando la firma non torna?

Perché GoCardless riproverebbe un invio che non tornerà mai. Il 498 le dice di fermarsi; in Odoo 20, dove non è possibile inviarlo, il connettore risponde 401, e tramite FlexigoTech Cloud quel 401 vale come definitivo.

Con il nostro connettore

In Odoo 17, 18, 19 e 20 il connettore verifica la firma di ogni invio rispetto al segreto di ogni configurazione di GoCardless, risponde con i codici che GoCardless comprende e, nel caso qualcosa vada perso, recupera gli eventi ogni ora.

Continua a leggere

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.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 invalid_bank_details: AC01 e BE06, il conto indicato non esisteGoCardless invalid_bank_details con AC01 o BE06: il conto del mandato non esiste. Perché arriva sul pagamento e sul mandato, e cosa fa Odoo con il connettore.
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/webhooks
  • Codice del modulo: flexigo_payment_gocardless: models/gocardless_webhook_event.py, riga 7 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: controllers/main.py, riga 110 in 17.0 (d203ee6), 18.0 (e2ab18b) e 19.0 (ce7f5a3)
  • Codice del modulo: flexigo_payment_gocardless: controllers/main.py, riga 113 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: controllers/main.py, riga 128 in 17.0 (d203ee6), riga 128 in 18.0 (e2ab18b), riga 128 in 19.0 (ce7f5a3) e riga 131 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: controllers/main.py, riga 103 in 17.0 (d203ee6), riga 103 in 18.0 (e2ab18b), riga 103 in 19.0 (ce7f5a3) e riga 106 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: const.py, riga 117 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 71 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: __manifest__.py, riga 6 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_token.py, riga 83 in 17.0 (d203ee6), riga 83 in 18.0 (e2ab18b), riga 83 in 19.0 (ce7f5a3) e riga 82 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/responses-and-errors
  • Codice del modulo: flexigo_payment_gocardless: controllers/main.py, riga 95 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 888 in 17.0 (d203ee6), riga 888 in 18.0 (e2ab18b), riga 888 in 19.0 (ce7f5a3) e riga 903 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 143 in 17.0 (d203ee6), riga 143 in 18.0 (e2ab18b), riga 143 in 19.0 (ce7f5a3) e riga 145 in 20.0 (688d86b)