Què diu GoCardless
| Resposta | Text de 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. |
Qualsevol altra resposta que no sigui 2xx fa que GoCardless torni a intentar-ho: 9 intents d'entrega en total, el primer més 8 reintents, cada cop més espaiats. A més, espera la resposta com a màxim 10 segons.

Com es comprova la signatura
GoCardless signa cada enviament amb un HMAC SHA256 en hexadecimal del cos tal qual, amb el secret del endpoint, i l'envia a la capçalera Webhook-Signature. Si el secret que té Odoo no és el de l'endpoint, cap signatura no quadra. Passa en copiar malament el secret, en regenerar-lo al Dashboard sense actualitzar-lo a Odoo, o en enviar a un Odoo els esdeveniments d'un altre compte.
El connector no es queda amb la primera configuració de GoCardless que troba: busca la que té el secret que signa aquell enviament. Així, una configuració de proves oblidada no rebutja els esdeveniments reals.
Què respon Odoo amb el connector
| Situació | Odoo 17, 18 i 19 | Odoo 20 |
|---|---|---|
| Cap secret no quadra amb la signatura | 498 | 401 |
| Signatura bona, cap esdeveniment és seu | 204 | 204 |
| Esdeveniments aplicats | 200 | 200 |
La diferència d'Odoo 20 no és una elecció del connector: el seu servidor HTTP no deixa respondre un codi que no sigui estàndard, i 498 no ho és. El que passa després depèn de com arriben els esdeveniments. En el mode avançat van directes de GoCardless a Odoo: amb 401, GoCardless reintenta un enviament que continuarà sense quadrar, i un secret mal posat es nota com una sèrie de reintents fallits al Dashboard de GoCardless. Amb la connexió en dos clics arriben a través de FlexigoTech Cloud, que tracta aquell 401 com a final, igual que un 498.
Si un esdeveniment no arriba
GoCardless garanteix que cada esdeveniment arriba almenys una vegada, no exactament una: pot repetir-se. El connector guarda cada esdeveniment que aplica, un per esdeveniment i per configuració de GoCardless, i si el mateix arriba una altra vegada no l'aplica dues vegades. Això importa amb els diners: un pagament confirmat dues vegades no ha de registrar dos cobraments a la factura. I si un esdeveniment es perd, la tasca programada que cada hora demana a GoCardless els esdeveniments que falten el recupera, fins a 100 per passada.
Què fer
- Si uses la connexió en dos clics («Connect my GoCardless account»), els webhooks els munta FlexigoTech Cloud: no hi ha secret que copiar.
- En el mode avançat («Paste an access token (advanced)»), l'endpoint i el seu secret els crees tu al Dashboard de GoCardless: copia el secret exacte a la configuració de GoCardless a Odoo.
- Si regeneres el secret, actualitza'l a Odoo de seguida; fins llavors, cada enviament fallarà.
- Revisa al Dashboard de GoCardless els enviaments fallits: des d'allà es poden rellançar a mà.

Per què no respondre 500 quan la signatura falla?
Perquè GoCardless reintentaria un enviament que mai no quadrarà. El 498 li diu que s'aturi; a Odoo 20, on no es pot enviar, el connector respon 401, i a través de FlexigoTech Cloud aquell 401 també compta com a final.
Amb el nostre connector
A Odoo 17, 18, 19 i 20 el connector comprova la signatura de cada enviament contra el secret de cada configuració de GoCardless, respon amb els codis que GoCardless entén i, per si alguna cosa es perd, recupera els esdeveniments cada hora.
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/webhooks
- Codi del mòdul: flexigo_payment_gocardless: models/gocardless_webhook_event.py, línia 7 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: controllers/main.py, línia 110 a 17.0 (d203ee6), 18.0 (e2ab18b) i 19.0 (ce7f5a3)
- Codi del mòdul: flexigo_payment_gocardless: controllers/main.py, línia 113 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: controllers/main.py, línia 128 a 17.0 (d203ee6), línia 128 a 18.0 (e2ab18b), línia 128 a 19.0 (ce7f5a3) i línia 131 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: controllers/main.py, línia 103 a 17.0 (d203ee6), línia 103 a 18.0 (e2ab18b), línia 103 a 19.0 (ce7f5a3) i línia 106 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 117 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 71 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: __manifest__.py, línia 6 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_token.py, línia 83 a 17.0 (d203ee6), línia 83 a 18.0 (e2ab18b), línia 83 a 19.0 (ce7f5a3) i línia 82 a 20.0 (688d86b)
- 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)
- docs.gocardless.com/docs/api-reference/responses-and-errors
- Codi del mòdul: flexigo_payment_gocardless: controllers/main.py, línia 95 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 888 a 17.0 (d203ee6), línia 888 a 18.0 (e2ab18b), línia 888 a 19.0 (ce7f5a3) i línia 903 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 143 a 17.0 (d203ee6), línia 143 a 18.0 (e2ab18b), línia 143 a 19.0 (ce7f5a3) i línia 145 a 20.0 (688d86b)
