Kiedy Odoo się loguje
Odoo uwierzytelnia się w dwóch momentach: gdy zapisujesz certyfikat KSeF z kluczem prywatnym w ustawieniach i w zaplanowanej akcji „Refresh KSeF tokens”, która co 6 dni powtarza pełne logowanie. Kontekstem jest NIP firmy, więc numer VAT firmy musi zaczynać się od PL. Wyzwanie (challenge) z KSeF jest ważne 10 minut.

POST /auth/xades-signature.Kody i ich teksty
| Kod | Tekst KSeF |
|---|---|
| 9101 | „Nieprawidłowy dokument.” |
| 9102 | „Brak podpisu.” |
| 9103 | „Przekroczona liczba dozwolonych podpisów.” |
| 9105 | „Nieprawidłowy podpis.” |
| 21111 | „Nieprawidłowe wyzwanie autoryzacyjne.” |
| 21115 | „Nieprawidłowy certyfikat.” |
| 21117 | „Nieprawidłowy identyfikator podmiotu dla wskazanego typu kontekstu.” |
| 21217 | „Nieprawidłowe kodowanie znaków.” |
| 21401 | „Dokument nie jest zgodny ze schemą (xsd).” Tu chodzi o XML logowania, nie o fakturę. |
| 21406 | „Konflikt podpisu i typu uwierzytelnienia.” |
| 460 | „Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu”, z details: „Nieważny certyfikat”, „Błąd weryfikacji łańcucha certyfikatów”, „Niezaufany łańcuch certyfikatów”, „Certyfikat odwołany”, „Certyfikat zawieszony” albo „Niepoprawny certyfikat”. |
Pierwszych dziesięć przychodzi od razu, jako odpowiedź HTTP 400 na podpis. Status 460 przychodzi później, przy sprawdzaniu stanu logowania. Uwaga na samą specyfikację: przykłady odpowiedzi tego zapytania pokazują dla tych samych przyczyn kod 400 z opisem „Uwierzytelnianie zakończone niepowodzeniem”, a tabela statusów podaje 460. Dlatego ważniejsza od numeru jest treść details.
Czego Odoo nie pokaże
Przy błędzie podpisu Odoo pisze „Failed to authenticate with XAdES:”, a potem tekst wyjątku z biblioteki requests, w rodzaju „400 Client Error: Bad Request for url: …/auth/xades-signature”. Kod z tabeli nie trafia na ekran: Odoo bierze treść odpowiedzi tylko wtedy, gdy obiekt odpowiedzi jest „prawdziwy”, a w requests odpowiedź z kodem od 400 do 599 jest fałszywa. Tak samo działa przy pobieraniu wyzwania, sprawdzaniu stanu i odbiorze tokenów.
Przy statusie 460 Odoo pisze „KSeF Authentication failed with status 460: …” z opisem, bez details (w 18 i 19 po polsku: „Uwierzytelnianie KSeF nie powiodło się z kodem błędu 460: …”).
Odnowienie co 6 dni, gdy się nie uda, zostawia ślad tylko w logu serwera. Token odświeżania KSeF działa do 7 dni, a potem wysyłka kończy się komunikatem „Failed to refresh KSeF access token. You may need to re-authenticate manually.”.
Lista danych uwierzytelniających w naszym module

Poland KSeF 2.0 Validator ma w KSeF › Configuration › Credentials (w polskim tłumaczeniu modułu „Poświadczenia”) listę certyfikatów KSeF, tokenów, pieczęci i podpisów kwalifikowanych z liczbą dni do wygaśnięcia: pomarańczowe, gdy zostało 30 dni lub mniej, czerwone po terminie. Datę ważności wpisuje osoba, która dodaje pozycję. Moduł nie czyta certyfikatu z ustawień Odoo ani stanu w KSeF, więc certyfikatu odwołanego albo zawieszonego nie oznaczy.
Co zrobić
- Sprawdź w ustawieniach, czy wybrany rekord to certyfikat KSeF z kluczem prywatnym.
- Sprawdź daty ważności i to, czy certyfikat nie jest odwołany albo zawieszony w KSeF.
- Sprawdź, czy numer VAT firmy zaczyna się od PL i jest NIP-em, dla którego wystawiono certyfikat.
- Zapisz certyfikat w ustawieniach jeszcze raz. Jeśli błąd wraca, a w Odoo widzisz tylko „400 Client Error”, poproś o odczyt odpowiedzi KSeF z kodem.
Czytaj dalej
Sprawdzone w kodzie źródłowym modułu (wersja 20.0) i w podlinkowanych źródłach
Źródła
- Kod modułu: 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
- Kod modułu: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/ksef_credential_views.xml
- Kod modułu: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_credential.py
