Quand Odoo se connecte
Odoo s'authentifie à deux moments : lorsque vous enregistrez le certificat KSeF avec sa clé privée dans les paramètres, et dans l'action planifiée « Refresh KSeF tokens », qui répète la connexion complète tous les 6 jours. Le contexte est le NIP de l'entreprise, donc le numéro de TVA de l'entreprise doit commencer par PL. Le défi (challenge) de KSeF est valable 10 minutes.

POST /auth/xades-signature.Les codes et leurs textes
| Code | Texte de KSeF |
|---|---|
| 9101 | « Nieprawidłowy dokument. » (document non valide) |
| 9102 | « Brak podpisu. » (signature absente) |
| 9103 | « Przekroczona liczba dozwolonych podpisów. » (trop de signatures) |
| 9105 | « Nieprawidłowy podpis. » (signature non valide) |
| 21111 | « Nieprawidłowe wyzwanie autoryzacyjne. » (défi d'autorisation non valide) |
| 21115 | « Nieprawidłowy certyfikat. » (certificat non valide) |
| 21117 | « Nieprawidłowy identyfikator podmiotu dla wskazanego typu kontekstu. » (identifiant de sujet non valide pour le type de contexte indiqué) |
| 21217 | « Nieprawidłowe kodowanie znaków. » (encodage de caractères non valide) |
| 21401 | « Dokument nie jest zgodny ze schemą (xsd). » Il s'agit ici du XML de connexion, et non de la facture. |
| 21406 | « Konflikt podpisu i typu uwierzytelnienia. » (conflit entre la signature et le type d'authentification) |
| 460 | « Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu », avec details : « Nieważny certyfikat », « Błąd weryfikacji łańcucha certyfikatów », « Niezaufany łańcuch certyfikatów », « Certyfikat odwołany », « Certyfikat zawieszony » ou « Niepoprawny certyfikat » (expiré, erreur de chaîne, chaîne non fiable, révoqué, suspendu, incorrect). |
Les dix premiers arrivent immédiatement, sous forme de réponse HTTP 400 à la signature. Le statut 460 arrive plus tard, lorsqu'on consulte le statut de la connexion. Attention à la spécification elle-même : les exemples de cette requête donnent, pour les mêmes motifs, le code 400 avec la description « Uwierzytelnianie zakończone niepowodzeniem », alors que son tableau des statuts donne 460. Le texte de details compte davantage que le numéro.
Ce qu'Odoo n'affiche pas
Si la signature échoue, Odoo écrit « Failed to authenticate with XAdES: » suivi du texte de l'exception de la bibliothèque requests, du type « 400 Client Error: Bad Request for url: …/auth/xades-signature ». Le code du tableau n'arrive jamais à l'écran : Odoo ne prend le corps de la réponse que lorsque l'objet réponse est « vrai », et dans requests une réponse avec un code de 400 à 599 est fausse. Il en va de même lors de la demande du défi, de la consultation du statut et de l'échange des tokens.
Avec le statut 460, Odoo écrit « KSeF Authentication failed with status 460: … » avec la description et sans les details (en polonais dans les versions 18 et 19 : « Uwierzytelnianie KSeF nie powiodło się z kodem błędu 460: … »).
Si le renouvellement tous les 6 jours échoue, il ne laisse de trace que dans le journal du serveur. Le token de rafraîchissement de KSeF dure jusqu'à 7 jours ; ensuite, l'envoi se termine par « Failed to refresh KSeF access token. You may need to re-authenticate manually. ».
La liste des identifiants de notre module

Poland KSeF 2.0 Validator dispose, dans KSeF › Configuration › Credentials, d'une liste de certificats KSeF, de tokens, de cachets et de signatures qualifiées avec le nombre de jours restants : en orange à 30 jours ou moins, et en rouge une fois expirés. La date d'expiration est saisie par la personne qui crée l'entrée. Le module ne lit ni le certificat des paramètres d'Odoo ni son état dans KSeF, il ne signalera donc pas un certificat révoqué ou suspendu.
Que faire
- Vérifiez dans les paramètres que l'enregistrement choisi est un certificat KSeF avec sa clé privée.
- Contrôlez les dates de validité et si le certificat a été révoqué ou suspendu dans KSeF.
- Vérifiez que le numéro de TVA de l'entreprise commence par PL et correspond au NIP pour lequel le certificat a été émis.
- Enregistrez à nouveau le certificat dans les paramètres. Si l'erreur revient et qu'Odoo n'affiche que « 400 Client Error », demandez qu'on lise la réponse de KSeF avec son code.
À lire aussi
Vérifié dans le code du module (version 20.0) et dans les sources citées
Sources
- Code du module : flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): i18n/pl.po
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/open-api.json
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/uwierzytelnianie.
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/psf/requests/blob/v2.32.5/src/requests/models.py#L730
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/l10n_pl_edi/i18n
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/data
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/uwierzytelnianie.
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- Code du module : flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/ksef_credential_views.xml
- Code du module : flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_credential.py
