Cosa dice GoCardless
| Risposta | Testo di GoCardless |
|---|---|
| 498 Token Invalid | Signature verification failed. GoCardless will log this and not retry. |
| 204 No Content | Event 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.

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
| Situazione | Odoo 17, 18 e 19 | Odoo 20 |
|---|---|---|
| Nessun segreto torna con la firma | 498 | 401 |
| Firma corretta, nessun evento è suo | 204 | 204 |
| Eventi applicati | 200 | 200 |
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
- Se usi la connessione in due clic («Connect my GoCardless account»), i webhook li configura FlexigoTech Cloud: non c'è nessun segreto da copiare.
- 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.
- Se rigeneri il segreto, aggiornalo subito in Odoo; fino ad allora, ogni invio fallirà.
- Controlla nella Dashboard di GoCardless gli invii falliti: da lì si possono rilanciare a mano.

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
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)
