GitHub

Referencja operacji

Konfiguracja transportu, retry, timeouty workflow, pola logowania i wznawialne referencje KSeF.

Na tej stronie

Ta strona zapisuje zachowania operacyjne ważne dla integracji produkcyjnych. Nie jest walkthrough wysyłki ani uwierzytelniania.

TransportConfig

TransportConfig jest używany tylko wtedy, gdy SDK tworzy wewnętrznego klienta httpx. Jeśli przekażesz http_client, ten klient posiada timeouty HTTP, pool, TLS, proxy, trust_env, HTTP/2, custom transport i event hooki.

TransportConfig(
    timeouts=TimeoutConfig(),
    pool=ConnectionPoolConfig(),
    retry=RetryConfig(),
    tls=TlsConfig(),
    proxy_url=None,
    trust_env=True,
    http2=True,
    auto_refresh_tokens=True,
    error_format="problem-details",
)
python
PoleTypDomyślniePrzekazywane do
timeoutsTimeoutConfigTimeoutConfig()httpx.Timeout
poolConnectionPoolConfigConnectionPoolConfig()httpx.Limits
retryRetryConfigRetryConfig()Middleware retry SDK
tlsTlsConfigTlsConfig()Weryfikacja TLS w httpx
proxy_url`strNone`None
trust_envboolTrueObsługa zmiennych środowiskowych przez httpx
http2boolTrueFlaga HTTP/2 w httpx
auto_refresh_tokensboolTrueOdświeżanie access tokenu przez klientów uwierzytelnionych, zobacz Odświeżanie access tokenu
error_formatLiteral["problem-details", "legacy"]"problem-details"Nagłówek X-Error-Format w żądaniach do API KSeF, zobacz Format błędów

auto_refresh_tokens i error_format nie konfigurują httpx, więc działają także wtedy, gdy przekażesz własny http_client.

TimeoutConfig

TimeoutConfig kontroluje pojedynczy request HTTP. Nie kontroluje tego, jak długo SDK odpytuje stan workflow KSeF.

PoleDomyślnieZnaczenie
connect5.0Czas na zestawienie połączenia.
read30.0Czas oczekiwania na bajty odpowiedzi.
write30.0Czas wysyłania bajtów requestu.
pool5.0Czas oczekiwania na połączenie z poola.

ConnectionPoolConfig

PoleDomyślnieZnaczenie
max_connections100Maksymalna liczba otwartych połączeń.
max_keepalive_connections20Maksymalna liczba bezczynnych połączeń keep-alive.
keepalive_expiry30.0Wygaśnięcie bezczynnego keep-alive w sekundach.

TlsConfig

PoleDomyślnieZnaczenie
verifyTruePrzekazywane do httpx, chyba że ustawiono ca_bundle_path.
ca_bundle_pathNoneŚcieżka bundle CA używana jako wartość verify w httpx.

RetryConfig

RetryConfig kontroluje middleware retry SDK. Obejmuje błędy transportu i ponawialne odpowiedzi HTTP dla ponawialnych typów requestów.

PoleDomyślnie
max_attempts3
initial_delay0.5
max_delay4.0
max_retry_after120.0
backoff_multiplier2.0
retryable_status_codes(429, 502, 503, 504)

Opóźnienie retry jest wykładnicze:

min(initial_delay * backoff_multiplier ** (attempt - 1), max_delay)
text

max_delay ogranicza tylko eksponencjalne backoffy. Nagłówek Retry-After (sekundy albo data HTTP) jest stosowany dokładnie, gdy mieści się w max_retry_after. Gdy go przekracza, SDK nie śpi i nie ponawia: poddaje się natychmiast i rzuca KSeFRateLimitError z prawdziwą wartością z nagłówka, żeby aplikacja mogła przełożyć pracę. Sufit chroni proces przed wiecznym oczekiwaniem na Retry-After rzędu wielu godzin.

Sufit ogranicza jedno zaśnięcie, nie cały request. Jeśli KSeF powtórzy ten sam Retry-After przy każdej próbie, pojedynczy request czeka maksymalnie (max_attempts - 1) * max_retry_after, zanim się podda. Przy domyślnych wartościach to 240 sekund, bo SDK śpi 120 sekund dwa razy. Zmniejsz max_attempts albo max_retry_after, gdy handler requestu nie może tyle czekać.

Ponawialne requesty

SDK ponawia tylko kształty requestów, które są wystarczająco bezpieczne do powtórzenia na poziomie transportu.

Typ requestuZachowanie retry
GETPonawialny.
DELETEPonawialny.
Większość POSTNie jest ponawiana automatycznie.
Wybrane POSTPonawiane automatycznie, gdy są na liście niżej.

Ponawialne grupy POST:

ObszarOperacje
Uwierzytelnianiechallenge, refresh token
Fakturyquery metadanych
Certyfikatyquery, retrieve
Uprawnieniaquery personal, authorization, EU entity, person, subordinate entity i subunit

Wysyłka faktury, nadawanie uprawnień, enrollment certyfikatu, generowanie tokenu, otwieranie sesji online i otwieranie sesji batch nie są ponawiane przez middleware retry SDK. Zapisz zwrócone referencje i wznawiaj przez status zamiast tworzyć te operacje ponownie w ciemno.

Redeem tokenu uwierzytelnienia także nigdy nie jest ponawiany, ponieważ KSeF zwraca parę access/refresh tylko raz. Utrata odpowiedzi redeem rzuca KSeFAuthTokenRedemptionError z outcome_ambiguous=True; nie powtarzaj tej operacji automatycznie.

Odświeżanie access tokenu

Klienci uwierzytelnieni odświeżają access token samodzielnie, używając refresh tokenu z uwierzytelnienia albo z AuthenticationResumeState, z którego zostali wznowieni.

WyzwalaczZachowanie
ProaktywnyRequest, który zastaje access token na mniej niż 60 sekund przed access_token_valid_until, najpierw go odświeża, a potem jest wysyłany z nowym tokenem.
ReaktywnyOdpowiedź 401 wywołuje jedno odświeżenie i jedną ponowną próbę tego samego requestu. Drugi 401 jest zgłaszany jako KSeFAuthError.
WspółbieżnośćRequesty współdzielą jedno odświeżenie: lock w Client, asyncio.Lock w AsyncClient.
Inne statusy403 i pozostałe błędy nie powodują odświeżenia.

Jedno odświeżenie to nie pełne ponowne uwierzytelnienie: SDK powtarza oryginalny request raz z odświeżonym tokenem. Jeżeli ten powtórzony request dostanie znowu 401, KSeFAuthError trafia do aplikacji i to ona decyduje, czy uwierzytelnić się ponownie, czy zgłosić błąd.

auth.auth_tokens, auth.access_token i auth.resume_state() zawsze zwracają bieżące tokeny, więc po długo trwającej pracy zapisz resume_state() ponownie.

Gdy refresh token wygasł albo KSeF go odrzucił, request rzuca KSeFAuthenticationExpiredError, podklasę KSeFAuthError. Jedynym wyjściem jest ponowne uwierzytelnienie. Jeśli refresh token już wygasł, ale access token ma jeszcze ważność, requesty nadal używają access tokenu, dopóki KSeF go nie odrzuci. Błędy transportu i inne błędy wywołania odświeżenia są propagowane bez zmian.

Odświeżanie nigdy nie dotyczy jednorazowego redeem uwierzytelnienia ani transferów presigned do zewnętrznego storage (upload części batch, pobieranie eksportów). Używają osobnych ścieżek i nie niosą tokenu bearer.

Aby zarządzać tokenami samodzielnie, wyłącz to zachowanie. Wygasłe tokeny ujawnią się wtedy jako KSeFAuthError, a client.authentication.refresh() pozostaje dostępne.

client = Client(Environment.PRODUCTION, transport_config=TransportConfig(auto_refresh_tokens=False))
python

Timeouty pollingu workflow

Helpery pollingowe używają argumentów timeout i poll_interval. Są to deadline'y workflow, nie timeouty requestu HTTP. Gdy zostanie rzucony timeout pollingu, zdalny workflow KSeF może nadal zakończyć się później.

WorkflowWyjątek timeoutIdentyfikator w wyjątku
Polling uwierzytelnianiaKSeFAuthPollingTimeoutErrorreference_number
Polling aktywacji/statusu tokenuKSeFTokenStatusTimeoutErrorreference_number
Polling widoczności metadanychKSeFInvoiceQueryTimeoutErrortylko timeout
Gotowość pobrania fakturyKSeFInvoiceDownloadTimeoutErrorksef_number
Przetwarzanie faktury onlineKSeFInvoiceProcessingTimeoutErrorinvoice_reference_number
Gotowość paczki eksportuKSeFExportTimeoutErrorreference_number
Nadanie albo cofnięcie uprawnieniaKSeFPermissionOperationTimeoutErrorreference_number
Wydanie certyfikatuKSeFCertificateEnrollmentTimeoutErrorreference_number
Zakończenie sesji batchKSeFBatchSessionTimeoutErrorreference_number
Zakończenie sesji onlineKSeFOnlineSessionTimeoutErrorreference_number

Po timeoutcie wznów polling zapisanymi identyfikatorami. Nie traktuj lokalnego deadline'u jako dowodu, że zdalna operacja się nie udała.

Rate limit

Odpowiedzi KSeF 429 są klasyfikowane jako KSeFRateLimitError. Wyjątek udostępnia:

AtrybutZnaczenie
retry_afterLiczba sekund z Retry-After (forma sekundowa albo data HTTP), jeśli KSeF zwrócił nagłówek; inaczej None.
status_codeZawsze 429.
responseSparsowany payload błędu KSeF, jeśli jest dostępny.

Dla 429 middleware retry stosuje dokładnie wartość Retry-After, gdy mieści się ona w max_retry_after, śpi i ponawia do max_attempts razy. Gdy nagłówek przekracza sufit, middleware poddaje się natychmiast: bez spania, bez ponawiania, a request kończy się KSeFRateLimitError z prawdziwą wartością nagłówka w retry_after. Sufit ogranicza każde zaśnięcie z osobna, więc powtarzający się nagłówek może trzymać request przez (max_attempts - 1) * max_retry_after, czyli domyślnie 240 sekund.

Co nadal należy do aplikacji: KSeFRateLimitError oznacza, że SDK już się poddał, więc zaplanuj pracę na później zamiast ponawiać na oślep. Używaj retry_after do planowania pracy w tle. W request handlerach lepiej zwrócić albo zakolejkować pracę do ponowienia niż usypiać request.

Granice sekretów i logowania

Nie loguj:

  • access tokenów;
  • refresh tokenów;
  • wartości tokenów KSeF;
  • kluczy prywatnych;
  • haseł PEM albo PKCS#12;
  • surowego XML faktury, chyba że polityka retencji na to pozwala;
  • zserializowanego stanu sesji online albo batch.

Przydatne pola logów produkcyjnych:

PoleZnaczenie
environmenttest, demo albo production.
workflowNazwa operacji na poziomie aplikacji.
session_reference_numberReferencja sesji online albo batch.
invoice_reference_numberReferencja faktury w sesji.
ksef_numberFinalny numer KSeF po przyjęciu faktury.
operation_reference_numberReferencja operacji tokenu, uprawnienia, certyfikatu, auth albo eksportu.
sdk_error_codeKSeFException.context["code"], gdy istnieje.
ksef_codeSurowy kod błędu KSeF z KSeFApiError.ksef_code, gdy istnieje.
trace_idIdentyfikator śledzenia KSeF z KSeFApiError.trace_id; podaj go, kontaktując się z pomocą KSeF.

Wznawialny stan workflow

Większość workflow KSeF zaczyna się referencją i kończy przez polling albo późniejsze pobranie. Zapisz referencję przed czekaniem.

WorkflowZapisz przed czekaniem
Uwierzytelnianiereferencję operacji auth i czas życia tymczasowego tokenu auth
Wysyłka faktury onlinereferencję sesji i numer referencyjny faktury
Upload batchreferencję sesji batch, referencje uploadu, metadane paczki i stan batch, dopóki jest potrzebny
Eksport fakturnumer referencyjny eksportu i chroniony materiał uchwytu eksportu
Generowanie tokenunumer referencyjny tokenu i zwrócony sekret tokenu
Nadanie/cofnięcie uprawnieńnumer referencyjny operacji uprawnień
Enrollment/revoke certyfikatureferencję operacji certyfikatu albo numer seryjny certyfikatu

Powiązana referencja