Testował ktoś ustawianie limitów wywołań API na testowym? https://ksef-test.mf.gov.pl/docs/v2/index.html#tag/Limity-i-ograniczenia/paths/~1api~1v2~1testdata~1rate-limits/post
Ustawiam niby 2/min , robię sobie sprawdzenie sesji (tych samych) w kółko i... nic się nie dzieje.
Krajowy system e-Faktur
- Rejestracja: dni
- Ostatnio: dni
- Postów: 185
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: 700m n.p.m.
- Postów: 680
Staram się zainicjować token na endpoincie
https://ksef-test.mf.gov.pl/api/online/Session/InitToken
ale zamiast tego dostaję w odp. status HTTP 503, oraz HTML z informacją, że 1 września kończy działanie środowisko testowe i przedprodukcyjne KSeF 1.0
- Robię to przez ceryfikat KSeF który wygenerowałem na https://mcu.mf.gov.pl
- mam dwa pliki: certyfikat i klucz prywatny
- kod PHP wygenerowało mi AI, i twierdzi, że jest prawidłowy
ktoś coś wie o co chodzi?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 82
Dla zainteresowanych tematem autoryzacji poprzez certyfikat KSeF z wykorzystaniem TMS Cryptography pack to wyszła wersja 5.1.0.2, która działa z certyfikatami wygenerowanymi w aplikacji MF.
W komponencie TXAdES trzeba dodać Xades.Template := xPlEnveloped; no i oczywiście certyfikat, klucz prywatny oraz hasło.
@JACA-RARA kod:
Xades.Password := 'HasłoKlucza';
Xades.KeyFilePath := Klucz;
Xades.CertFilePath := Cert;
Xades.PKCS11Param.isToken := False;
Xades.Packaging := Enveloped;
Xades.Template := xPlEnveloped;
Xades.GenerateSignature(FileToSign, FileToSign);
- Rejestracja: dni
- Ostatnio: dni
- Postów: 29
Potrzebuję pomocy, staram się podpisać XML-a za pomocą certyfikatu KSeF za pośrednictwem narzędzia własnej produkcji i coś robię źle.
Macie może jakieś porządne narzędzie do weryfikacji podpisanych XML-i, które by mi powiedziało dokładnie co mam nie tak, ze szczegółami, np:
że moja wyliczona SignatureValue jest zła, bo powinna być taka, bo ja do podpisu biorę dane inne, a powinny być inne, ze wskazaniem na to co powinno być uwzględnione ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 13
Ogrywacie jakoś automatyczne działanie trybów? Chodzi mi o to jaki tryb w przypadku awarii występuje. Na ten moment zapinam się na sam healthCheck (https://ksef-test.mf.gov.pl/api/v2) ale to mi daje tylko info czy w danym momencie ksef działa czy nie. Trochę średnio widzi mi się pisanie jakiegoś skryptu, który będzie analizował https://www.gov.pl/web/finanse. Jakieś pomysły, albo jakieś info od MF czy będą coś bardziej używalnego udostępniać, a jeżeli tak to kiedy?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
FYI: Napisałem do MF z zapytaniem co można a czego nie można umieszczać na potwierdzeniu transakcji, bo na ich stronce jest stwierdzenie "musi zawierać tylko" i nie jest jasne czy "może zawiereć też". Odpowiedź "Wyjaśniamy, damy znać" innymi słowy "Nie wiemy". Ehh... Gdyby potwierdzenie transakcji mogło pełnić funkcję faktury proforma to byłby przynajmniej jeden szablon mniej do drukowania.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3
Wygenerowałem sobie kod QR do weryfikacji certyfikatu offline na środowisku PROD ale gdy w niego wejdę dostaję prostego Stringa "Not Found". Czy powinno to już działać czy dopiero od oficjalnego startu 1 lutego?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 25
Powalczyłem trochę z tym generatorem PDF > https://github.com/lukasz-wojtanowski-softvig/ksef-pdf-generator/tree/feature/cli i udało mi się dorobić funkcje wstawienia QR kod 2 oraz OFFLINE. Jakieś sugestie zanim puszczę PR ?
Od razu uprzedzę, że obrazków nie da się za bardzo wyrównać, bo to nie CSS. Można jedynie ustawiać maksymalny "fit".
Link tekstowy tez musiałem skrócić bo dla certyfikatu wylatywał za ekran, wrap nie działa.
Wyrównałem też label w wersji ONLINE bo był krzywo.
ONLINE.pdf
OFFLINE-CERTYFIKAT-EC.pdf
OFFLINE-CERTYFIKAT-RSA.pdf
- Rejestracja: dni
- Ostatnio: dni
- Postów: 38
edit - nieaktualne, już działa, nic nie zmieniałem (chyba) :/
Mam problem z QR2. Mam taki link do podpisania: ksef-test.mf.gov.pl/client-app/certificate/Nip/5260305644/5260305644/01FAFA5273E4DAFA/47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU (hash to sha256 pustego stringa, ale to raczej nie powinno mieć znaczenia, to samo mam z prawdziwą fakturą)
private key:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIHzMF4GCSqGSIb3DQEFDTBRMDAGCSqGSIb3DQEFDDAjBBCmj0+SrP8r+lpMTxr9
9/QlAgMBhqAwCgYIKoZIhvcNAgkwHQYJYIZIAWUDBAEqBBAhQC4ZVrEAFsJr8RBv
PFDEBIGQIzucBBA3sMbnTuFcoUUIRMa3Os6nszZKzbOQDPdNI/oN6IQLtqL3Wpld
IVdILBNxGR+Jd6RV8d/LJiFvvJ3XQjW1wYWl6FZ1Eyj3QMFhFSeFxArzhOHWoAbu
+zOaKU9LmS9FZMcZBSIp9MMkzVPVfNajOqMmW9VMaXnVhNLkctSyI8AkwKLD7apE
Gs8ZOaiP
-----END ENCRYPTED PRIVATE KEY-----
cert:
-----BEGIN CERTIFICATE-----
MIIC3zCCAmKgAwIBAgIIAfr6UnPk2vowDAYIKoZIzj0EAwIFADBvMQswCQYDVQQG
EwJQTDEfMB0GA1UECgwWTWluaXN0ZXJzdHdvIEZpbmFuc8OzdzEnMCUGA1UECwwe
S3Jham93YSBBZG1pbmlzdHJhY2phIFNrYXJib3dhMRYwFAYDVQQDDA1URVNUIEND
SyBLU2VGMB4XDTI1MTEyNDE2MTg0N1oXDTI3MTEyNDE2MTg0N1owdzELMAkGA1UE
BhMCUEwxGTAXBgNVBGEMEFZBVFBMLTUyNjAzMDU2NDQxJDAiBgNVBAoMG0xpZXIg
RGFsbGFzIEZseW5zZWxsIEluYy4gTzEnMCUGA1UEAwweTGllciBEYWxsYXMgRmx5
bnNlbGwgKG9mZmxpbmUpMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQ8H1ctdg
gPXWET+ab/u9uEvQWsJJjrCFco5fJuzPH/ec0Tl/IXVdLJmzygobZkUAm9m4Px5a
B2j/NTu80kcuiaOB3TCB2jAfBgNVHSMEGDAWgBQ6OoEQH6i0N97Bg2P7OYj6iaQl
MjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIGQDAdBgNVHQ4EFgQULr5ZSjxi
wDh/VhGAiROQ+iR1+h0wSAYDVR0fBEEwPzA9oDugOYY3aHR0cHM6Ly9rc2VmLXRl
c3QubWYuZ292LnBsL3NlY3VyaXR5L2NybC90ZXN0bWZrc2VmLmNybDAwBggrBgEF
BQcBAwQkMCIwCwYGBACORgEDAgEAMBMGBgQAjkYBBjAJBgcEAI5GAQYCMAwGCCqG
SM49BAMCBQADaQAwZgIxAICTQAY0Dj0yRnwbBoCPbIBSFtSpFDByPJqdEdXfu2eQ
yVzXFBpwqoRzqLTs95NixgIxAIUGetWqDahbQM/tSdi0YrYY9WBwhLurl1XPQIj+
Ok8mK0o3N+k/EjlVZrYuOcoHQg==
-----END CERTIFICATE-----
hasło abcdABCD1234!@#$
Certyfikat (offline, można sprawdzić po zalogowaniu się na teście) wygenerowany w AP na teście po zalogowaniu się na nip 5260305644, strona pokazuje, że mam uprawnienia właścicielskie, więcj ok
Po podpisaniu linku (najpierw probowałem własną metodą, potem kodem od @N1ebieski ) dostaję
i na stronie jest błąd Podpis wystawcy nie jest prawidłowy / Wystawca nie posiada uprawnienia do wystawienia faktury
Gdzie popełniłem błąd? Obrazek bez związku

- Rejestracja: dni
- Ostatnio: dni
- Postów: 185
@EZ_55
Autoryzacja z ECDSA:
<?xml version="1.0" encoding="utf-8"?>
<AuthTokenRequest
xmlns="http://ksef.mf.gov.pl/auth/token/2.0">
<Challenge>20251125-CR-1BF60F9000-80FF98C386-B1</Challenge>
<ContextIdentifier>
<Nip>5170359458</Nip>
</ContextIdentifier>
<SubjectIdentifierType>certificateSubject</SubjectIdentifierType>
<ds:Signature
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-1363875271">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>H2XP5LTI9vX49BydxZDNu3efy05FS3f9PNrAgMSvVjo=</ds:DigestValue>
</ds:Reference>
<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-1834164476">
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>Iz5+sJvoWGiUu+Ozd/EW681mMnxdq6tuNwF3V/Czl8c=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>518joaBCMwS9cgYzA2ZtuoTiXgCqu2edS3gPnB53OW7IbZhh1CDyXS82fdReFZ4g7y/zeTC75jtrcjwbqwtDww==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509IssuerSerial>
<ds:X509IssuerName>CN=TEST CCK KSeF, OU=Krajowa Administracja Skarbowa, O=Ministerstwo Finansów, C=PL</ds:X509IssuerName>
<ds:X509SerialNumber>90797513945618327</ds:X509SerialNumber>
</ds:X509IssuerSerial>
<ds:X509SubjectName>CN=Test KSeF (uwierzytelnienie), O=Test KSeF, 2.5.4.97=#0C10564154504C2D35313730333539343538, C=PL</ds:X509SubjectName>
<ds:X509Certificate>MIICyjCCAk6gAwIBAgIIAUKT2503l5cwDAYIKoZIzj0EAwIFADBvMQswCQYDVQQGEwJQTDEfMB0GA1UECgwWTWluaXN0ZXJzdHdvIEZpbmFuc8OzdzEnMCUGA1UECwweS3Jham93YSBBZG1pbmlzdHJhY2phIFNrYXJib3dhMRYwFAYDVQQDDA1URVNUIENDSyBLU2VGMB4XDTI1MTEwNDEyNTIzOVoXDTI3MTEwNDEyNTIzOVowYzELMAkGA1UEBhMCUEwxGTAXBgNVBGEMEFZBVFBMLTUxNzAzNTk0NTgxEjAQBgNVBAoMCVRlc3QgS1NlRjElMCMGA1UEAwwcVGVzdCBLU2VGICh1d2llcnp5dGVsbmllbmllKTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCAS7tjJwlF022Bqek876N7SzN8Lix4J/Ugs0IoiyZ7xTobIS+C3ZvZ5ve2sWStMCRyDLDLk0OlDi+24ZV0vAIqjgd0wgdowHwYDVR0jBBgwFoAUOjqBEB+otDfewYNj+zmI+omkJTIwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFOI+Ujm3OdHH2Uz5OhGraFpPiaMNMEgGA1UdHwRBMD8wPaA7oDmGN2h0dHBzOi8va3NlZi10ZXN0Lm1mLmdvdi5wbC9zZWN1cml0eS9jcmwvdGVzdG1ma3NlZi5jcmwwMAYIKwYBBQUHAQMEJDAiMAsGBgQAjkYBAwIBADATBgYEAI5GAQYwCQYHBACORgEGAjAMBggqhkjOPQQDAgUAA2gAMGUCMEVCZpod+j5YVcilfk5s3BpZsUEskCGK4SIpDerGL+beiHCcWelR1iq6bK4kzhtSpwIxAIhYi+6F+Z/h58rF0uY2VTrvVKwZ4kUECX+AJOeqPkpNmTm29wa69ccb3rpnOHzWmw==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<ds:Object>
<xades:QualifyingProperties
xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#Signature-0">
<xades:SignedProperties Id="SignedProperties-1834164476">
<xades:SignedSignatureProperties>
<xades:SigningCertificate>
<xades:Cert>
<xades:CertDigest>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>/+f323eHHYIcm07wce3TzbvL6sQ=</ds:DigestValue>
</xades:CertDigest>
<xades:IssuerSerial>
<ds:X509IssuerName>CN=TEST CCK KSeF, OU=Krajowa Administracja Skarbowa, O=Ministerstwo Finansów, C=PL</ds:X509IssuerName>
<ds:X509SerialNumber>90797513945618327</ds:X509SerialNumber>
</xades:IssuerSerial>
</xades:Cert>
</xades:SigningCertificate>
</xades:SignedSignatureProperties>
</xades:SignedProperties>
</xades:QualifyingProperties>
</ds:Object>
</ds:Signature>
</AuthTokenRequest>
(przeformatowany)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2
Witajcie - mam pytanie (środowisko Demo). Co może być przyczyną sytuacji, w której do UPO paczki trafia tylko jedna wysłana faktura? Jeśli pobieram dla każdej faktury osobne UPO - jest. Czy ktoś miał taki problem?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 13
Czy jest jakieś XSL dla UPO ?
Na stronie 67 już ktoś o to pytał i jest odniesienie do posta 2025-10-24 15:05.
Faktycznie jest tam podane XSL, ale u mnie nie działa !?!?
XSL dla FA(3) mi działa, a dla UPO nie działa - nie wiem o co chodzi.
Może ktoś ma jakieś inne XSL dla UPO.
Szukam po Internecie już kilka godzin i nie mogę znaleźć.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2
wlodekg2 napisał(a):
Czy jest jakieś XSL dla UPO ?
Na stronie 67 już ktoś o to pytał i jest odniesienie do posta 2025-10-24 15:05.
Faktycznie jest tam podane XSL, ale u mnie nie działa !?!?
XSL dla FA(3) mi działa, a dla UPO nie działa - nie wiem o co chodzi.
Może ktoś ma jakieś inne XSL dla UPO.
Szukam po Internecie już kilka godzin i nie mogę znaleźć.
Moje wygląda tak - można brać https://e.pcloud.link/publink/show?code=XZc2hAZfDeOQr8iPxQmeHvvz3J5o0s3rNDk
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
Cześć wszystkim, dziś się tu zerejestrowałem bo widze że to jedyne wyjście żeby czegoś się dowiedzieć.
mam problem - mam swoją procedurę autoryzacji do ksef napisaną w vb6 z chilkat , i coś jest nie tak , na końcu po v2/auth/ dostaje 200 oraz w opisie 450 - '{"startDate":"2025-11-24T13:58:54.7830724+00:00","authenticationMethod":"Token",
'"status":{"code":450,"description":"Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu","details":["Invalid token encryption."]}}
co moge robić źle ? może komuś się co rzuci na oczy
Private Function InitializeSession(ByVal NIP As String, _
ByVal Token As String) As Boolean
Debug.Assert 1 = 0
http.Accept = "application/json"
http.SetRequestHeader "Content-Type", "application/json"
' KROK 1: InitToken - pobranie challenge
Dim resp As Chilkat_v9_5_0.ChilkatHttpResponse
json.Clear
Set resp = http.PostJson3(baseUrl & "/v2/auth/challenge", _
"application/json", json)
If http.LastMethodSuccess = False Then
InitializeSession = False
Exit Function
End If
Debug.Print resp.BodyStr
Dim respJson As New Chilkat_v9_5_0.ChilkatJsonObject
respJson.Load resp.BodyStr
Dim challenge As String
challenge = respJson.StringOf("challenge")
Dim timestamp As String
timestamp = respJson.StringOf("timestamp")
Dim unixMs As Double
'timestamp = "2025-11-24T15:30:48.2930586+00:00"
'Debug.Print timestamp
unixMs = TimestampToUnixMs(timestamp)
' Pobranie klucza publicznego KSeF
Set resp = http.QuickGetObj(baseUrl & "/v2/security/public-key-certificates")
respJson.Load resp.BodyStr
publicKeyBase64 = respJson.StringOf("certificate")
Debug.Print publicKeyBase64
Dim cert As New Chilkat_v9_5_0.ChilkatCert
Dim success As Boolean
success = cert.LoadFromBase64(publicKeyBase64)
Debug.Print cert.GetEncoded
Set pubKey = cert.ExportPublicKey()
Dim rsa As New Chilkat_v9_5_0.ChilkatRsa
Call rsa.UnlockComponent(unlockkode)
success = rsa.ImportPublicKeyObj(pubKey)
rsa.OaepPadding = 1 ' Włącz OAEP
rsa.OaepHash = "sha256" ' SHA-256 dla OAEP
rsa.EncodingMode = "base64" ' Wynik w Base64
encryptedToken = rsa.EncryptStringENC(Token & "|" & unixMs, 0)
' Debug.Print encryptedToken
'U8eU4QYJNgi8zuUyhSNySgIzZJRrFRcOvrrniQ0Uy9VOUv7jHy1yCV3pqDm8SzXippdF0a9joo40yjzJjVxO6kpQQYKC/HUC+DinDOIsoDusxw9aWV6hnkNIH6wpA/MI5dFjZQWxKTcDB0ZoptCU+tbtwAzaQ4DqeMF4OT5rp5CbSHnxaVA0rQlZRiLbSa1HFD8w5K4GDgYOAACPa5GQhfYuTCNwI57uBdlL351O7I+uqgVJEh+RiUpPjQ7yTrErhC9gdnFl9Igg5p0EvvRC5F3puOOicDm1ba9kQBRDDHh6KIGbYys/PQfTWgfMtndEAiAwj2tP2THPOZde4npBdA==
'Debug.Print challenge
'20251125-CR-1D7F92C000-800EE29D62-13
' KROK 3: AuthorisationChallenge
json.Clear
json.UpdateString "challenge", challenge
json.UpdateString "contextIdentifier.type", "Nip"
json.UpdateString "contextIdentifier.value", NIP
json.UpdateString "encryptedToken", encryptedToken
Set resp = http.PostJson3(baseUrl & "/v2/auth/ksef-token", "application/json", json)
If resp.StatusCode <> 202 Then
Debug.Print resp.BodyStr
InitializeSession = False
Exit Function
End If
respJson.Load resp.BodyStr
' Zapisanie danych sesji
SessionToken = respJson.StringOf("authenticationToken.token")
SesionReferenceNumber = respJson.StringOf("referenceNumber")
http.SetRequestHeader "Authorization", "Bearer " & SessionToken
Do
Set resp = http.QuickGetObj(baseUrl & "/v2/auth/" & SesionReferenceNumber)
If resp.StatusCode <> 200 Then
Debug.Assert 1 = 0
Debug.Print resp.BodyStr
json.Clear
Set resp = http.PostJson3(baseUrl & "/v2/sessions/online/" & SessionToken & " /close", "application/json", json)
Exit Function
Else
If InStr(1, resp.BodyStr, "ready", vbTextCompare) > 0 Then Exit Do
respJson.Load resp.BodyStr
Debug.Print respJson.StringOf("status.code")
If respJson.StringOf("status.code") = "450" Then
Debug.Assert 1 = 0
Debug.Print resp.BodyStr
'{"startDate":"2025-11-24T13:58:54.7830724+00:00","authenticationMethod":"Token",
'"status":{"code":450,"description":"Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu","details":["Invalid token encryption."]}}
json.Clear
Set resp = http.PostJson3(baseUrl & "/v2/sessions/online/" & SessionToken & " /close", "application/json", json)
Exit Function
End If
End If
Dim i As Long
i = i + 1
Sleep 2000
If i > 15 Then
Debug.Assert 1 = 0
Debug.Print resp.BodyStr
'{"startDate":"2025-11-24T13:58:54.7830724+00:00","authenticationMethod":"Token","status":{"code":450,"description":"Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu","details":["Invalid token encryption."]}}
json.Clear
Set resp = http.PostJson3(baseUrl & "/v2/sessions/online/" & SessionToken & " /close", "application/json", json)
Exit Function
End If
Loop
Set resp = http.QuickGetObj(baseUrl & "/v2/auth/token/redeem")
If resp.StatusCode <> 200 Then
Debug.Assert 1 = 0
Debug.Print resp.BodyStr
json.Clear
Set resp = http.PostJson3(baseUrl & "/v2/sessions/online/" & SessionToken & " /close", "application/json", json)
Exit Function
End If
respJson.Load resp.BodyStr
TokeDost = respJson.StringOf("accessToken.token")
RefreshToken = respJson.StringOf("refreshToken.token")
InitializeSession = True
End Function
Public Function TimestampToUnixMs(ByVal timestamp As String) As String
'timestamp = "2025-11-18T14:32:25.4678898" ' -> 1763472745467 ::
'timestamp = "2025-11-18T14:54:22.8148047+00:00" ' -> 1763477662814 ::
'timestamp = "2025-11-18T14:58:03.3175404+00:00" ' -> 1763477883317
Dim success As Boolean
Dim dt As Date
Dim unixEpoch As Date
Dim diffSeconds As Double
Dim t
Dim dateTime As New CkDateTime
success = dateTime.SetFromTimestamp(timestamp)
Dim bLocal As Long
bLocal = 0
t = Split(timestamp, ".", , vbTextCompare)
Dim x As Double
x = CDbl(dateTime.GetAsUnixTime(bLocal)) * 1000
x = x + CDbl(Left(t(1), 3))
TimestampToUnixMs = x
End Function
EDIT - poprawiłem TimestampToUnixMs bo było żle, teraz daje te same dane co w nagłówku. ale to nic nie pomogło - dalej to samo 450 po 200
- Rejestracja: dni
- Ostatnio: dni
- Postów: 7
Wrzucam XSL dla UPO zrobione na podstawie Krajowy system e-Faktur ale trochę ładniej sformatowane żeby nie wyglądało jak psu z gardła. Pozycje dla faktur w wierszach a nie kolumnach i nazewnictwo bardziej zbliżone do oficjalnego.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 9
Cześć, próbuje na PHP zalogować się do API i ciągłe dostaje błąd, że niepoprawne szyfrowanie. Używam phpseclib, ponieważ przeczytałem, że openssl_public_encrypt tego nie zrobi. Szyfruję w taki sposób:
$encryptLine = trim($token).'|'.trim($timestamp);
$rsa = new RSA();
$rsa->setEncryptionMode(RSA::ENCRYPTION_OAEP);
$rsa->setHash('sha256');
$rsa->setMGFHash('sha256');
$encryptedToken = $rsa->encrypt($encryptLine);
i robię base64_encode
Czy możecie podpowiedzieć co jest nie tak ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
czy to normalne że dostaję odpowidzi przesuniete o 1 h ?
{"startDate":"2025-11-25T10:48:33.5488096+00:00","authenticationMethod":"Token","status":{"code":450,"description":"Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu","details":["Invalid token encryption."]}}
wysłałem to o 2025-11-25T11:48:33, jestem w polsce
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2
Hej, coś źle wyliczam sobie hasha faktury. Tak jak pisał @zbynioh przy wysyłce faktury wsadowo miałem błąd w schemie i przy pobieraniu faktur sesji mam status faktury ale nie mam jej numeru i hash który zwraca KSeF jest inny niż hash który sam wyliczam.
Mógłby ktoś podrzucić wycinek w jaki sposób powinien wyliczać hash ze stringa faktury, najlepiej w c#.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 29
Analiza podpisanego certyfikatem KSeF XML - wyciąg ze skryptu pytonga:
{
"file": "signed_xml.xml",
"reference_uri_empty": {
"canonical_bytes_len": 266,
"canonical_text": "<AuthTokenRequest xmlns=\"http://ksef.mf.gov.pl/auth/token/2.0\"><Challenge>20251125-CR-10E824B000-7F5B1848E6-40</Challenge><ContextIdentifier><Nip>_nip__nip_</Nip></ContextIdentifier><SubjectIdentifierType>certificateSubject</SubjectIdentifierType></AuthTokenRequest>",
"digest_sha256_b64": "0oATdNN7zdB8CyeFWO1scacahPte6NLk1HX/m4DQJzA=",
"digest_matches_xml": true
},
"signed_properties": {
"canonical_bytes_len": 938,
"canonical_text": "<xades:SignedProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Id=\"SignedProps-1618565691\"><xades:SignedSignatureProperties><xades:SigningTime>2025-11-25T04:55:36Z</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"></ds:DigestMethod><ds:DigestValue xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">EFyaRM3gC8fw9hnHNuQsl3nPMXbVzSPaqk3fSyPxXbA=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">CN=TEST CCK KSeF, OU=Krajowa Administracja Skarbowa, O=Ministerstwo Finans\u00f3w, C=PL</ds:X509IssuerName><ds:X509SerialNumber xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">123412149998068970</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties></xades:SignedProperties>",
"digest_sha256_b64": "YFTllI3J002Rsek6JR7pEEwGX0DjrZ6cnpJc571PGUI=",
"digest_matches_xml": true
},
"signed_info": {
"canonical_bytes_len": 1081,
"canonical_text": "<ds:SignedInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256\"></ds:SignatureMethod><ds:Reference URI=\"\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"></ds:Transform><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"></ds:DigestMethod><ds:DigestValue>0oATdNN7zdB8CyeFWO1scacahPte6NLk1HX/m4DQJzA=</ds:DigestValue></ds:Reference><ds:Reference Type=\"http://uri.etsi.org/01903#SignedProperties\" URI=\"#SignedProps-1618565691\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"></ds:DigestMethod><ds:DigestValue>YFTllI3J002Rsek6JR7pEEwGX0DjrZ6cnpJc571PGUI=</ds:DigestValue></ds:Reference></ds:SignedInfo>",
"signature_method": "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256",
"digest_sha256_b64": "ty47fnaP5QyhWBAQeNYN8ey9kxKIKg8xnXbk/Y+CXgs="
},
"signature_value": {
"b64": "ytXqIOSZw7VPHPqiw3yQSNFWuWn7EfzxxjCNd5d4tVoYBAbCgUzVvnDVqY/C/uLPGxsUrAF6lU+sB2T3Dzgn5w==",
"len": 64,
"hex": "cad5ea20e499c3b54f1cfaa2c37c9048d156b969fb11fcf1c6308d779778b55a180406c2814cd5be70d5a98fc2fee2cf1b1b14ac017a954fac0764f70f3827e7"
},
"certificate": {
"subject": "CN=Eordlar Rivka (uwierzytelnienie),O=Eordlar Rivka Inc. O,2.5.4.97=VATPL-_nip__nip_,C=PL",
"issuer": "CN=TEST CCK KSeF,OU=Krajowa Administracja Skarbowa,O=Ministerstwo Finans\u00f3w,C=PL",
"serial": 123412149998068970,
"pubkey_info": {
"curve": "secp256r1",
"x": 42.........................................................................25,
"y": 80.........................................................................80
},
"sha256_b64": "EFyaRM3gC8fw9hnHNuQsl3nPMXbVzSPaqk3fSyPxXbA=",
"provided_cert_digest_b64": "EFyaRM3gC8fw9hnHNuQsl3nPMXbVzSPaqk3fSyPxXbA=",
"provided_cert_digest_matches": true
},
"verification": {
"verified": false,
"errors": [
""
],
"format": "raw->DER failed: "
}
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1
Cześć.
Czy ktoś integruje się z KSeF w .net framework 4.0?
Czy komuś udało się cokolwiek zaszyfrować certyfikatem z aplikacji podatnika (ECDSA)?
Uwierzytelnianie xadesem mi idzie, ale gdy chcę pobrać paczkę faktur dostaję błąd "415 Błąd odszyfrowania dostarczonego klucza".
Oczywiście z pewnością chodzi o parametr EncryptedSymmetricKey, ale tu jest właśnie problem. Już na początku miałem pewien dysponans, gdyż w kliencie .net od CIRFMF metoda GetEncryptionData() szyfruje za pomocą RSA, no a co z ECDSA?
Mimo to próbowałem szyfrować ECDH/AES-256 z wykorzystaniem BouncyCastle, ale w efekcie mam powyższy błąd. Jest jakaś solucja jak to ogarnąć w .net 4?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 58
Mam pytanie ile maksymalnie może być znaków na fakturze przesyłanej do ksef bo wielkość to 1mb ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
wiem że już było takie pytanie ale dawno i w sumie bez końcowego znalezienia odpowiedzi.
Robię posta na sessions/online i cały czas 403,
w sumie te parametry widze że nie maja znaczenia na to - jak i ch nie ma to i tak 403 , jak zmienia Bearer na coś bzdurnego to od razu 401. czyli rozpoznaje go , cos komuś świta?
Dim resp As Chilkat_v9_5_0.ChilkatHttpResponse
json.Clear
json.UpdateString "formCode.systemCode", systemCode ''"FA (3)" 'PEF (3)'PEF_KOR (3)'2-1
json.UpdateString "formCode.schemaVersion", schemaVersion '"1-0E"
json.UpdateString "formCode.value", formCode '"FA"
json.UpdateString "encryption.encryptedSymmetricKey", encryptedsymmetricKey
json.UpdateString "encryption.initializationVector", iv
http.SetRequestHeader "Authorization", "Bearer " & TokeDost 'SessionToken '
Set resp = http.PostJson3(baseUrl & "/v2/sessions/online", _
"application/json", json)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
Pytanie prawno-integracyjne. Osobiście nie miałem takiej sytuacji ale na początkach ksef 1 inni użytkownicy forum pisali, że dostawali status przetwarzania faktury == 200 po kilku dniach od wysyłki. Co w sytuacji kiedy przetwarzanie faktury utknie na statusie 150 przez kilka dni. Trzeba będzie się jakoś US spowiadać w postaci logów, że wysłane czy jak?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
Ma ktoś pomysł dlaczego można dostać taki błąd w procedurze sessions/online/rf/invoices
'{"exception":{"exceptionDetailList":[{"exceptionCode":21402,"exceptionDescription":
'"Nieprawid\u0142owy rozmiar pliku.","details":["Content length does not match the file size."]}],"serviceCode":"00-37fc2127dc3b1f3bb50120d8bc043bbf-58ce42a0a63b2e75-00","timestamp":"2025-11-25T15:34:08.1160548Z"}}
oczywiście
json.Clear
s = Sha256XmlSimple(xml)
json.UpdateString "invoiceHash", s 'Skrót SHA256 oryginalnej faktury, zakodowany w formacie Base64.
json.UpdateString "invoiceSize", Len(xml) 'Rozmiar oryginalnej faktury w bajtach. Maksymalny rozmiar zależy od limitów ustawionych dla uwierzytelnionego kontekstu.
s = Sha256XmlSimple(EncryptDocument)
json.UpdateString "encryptedInvoiceHash", s 'Skrót SHA256 zaszyfrowanej faktury, zakodowany w formacie Base64.
json.UpdateString "encryptedInvoiceSize", Len(EncryptDocument) 'Rozmiar zaszyfrowanej faktury w bajtach.
json.UpdateString "encryptedInvoiceContent", EncryptDocument 'Faktura zaszyfrowana algorytmem AES-256-CBC z dopełnianiem PKCS#7 (kluczem przekazanym przy otwarciu sesji), zakodowana w formacie Base64.
'/json.UpdateString "offlineMode", "0"'Określa, czy podatnik deklaruje tryb fakturowania "offline" dla przesyłanego dokumentu
'hashOfCorrectedInvoice'Skrót SHA256 korygowanej faktury, zakodowany w formacie Base64. Wymagany przy wysyłaniu korekty technicznej faktury.
Set resp = http.PostJson3(baseUrl & "/v2/sessions/online/" & DokSesionReferenceNumber & "/invoices", _
"application/json", json)
przekazuje przez len stringa'
czy to świadczy o złym zaszyforwaniu faktury ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 66
Robię call'a na:
/api/v2/sessions/{referenceNumber}]
i mam zwrotkę:
2025-11-25 19:00:16.641: [response content after call: /api/v2/sessions/{referenceNumber}]
{"status":
{"code":100,"description":"Sesja interaktywna otwarta"},
"validUntil":"2025-11-25T00:14:14.4090678+00:00","invoiceCount":1,"successfulInvoiceCount":1
}
Po pierwsze validUntil jest prawie sprzed 19h, a sesja nadal otwarta?
Po drugie nie zwraca UPO. Czego nie ogarniam?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 185
Pozwolicie, że zapytam Was o małe podsumowanie, co wg Was jest aktualnie największym problemem w tym, aby KSeF mógł bezproblemowo wystartować w lutym? Gdzie widzicie zagrożenia zarówno techniczne jak i prawne? Na co powinno się zwrócić uwagę i co czym zająć, żeby cały proces i uruchomienie mogły być jak najmniej problematyczne?
wg mnie:
- audyt bezpieczeństwa może zmusić do zmiany w interfejsie API
- "potwierdzenie transakcji" nie ma podstaw prawnych i w zasadzie zachowuje się jak faktura offline, ale nie jest ani offline, ani fakturą
- dużo tematów na GH wisi bez odpowiedzi
- bardzo długi czas oczekiwania na odpowiedzi na pytania zadawane przez formularz kontaktowy
- zapowiedzi zmian już na 1.02.2026 czyli dzień uruchomienia
- brak angielskiej dokumentacji utrudniający tworzenie rozwiązań tym, którzy nie mają programów pisanych przez polskich programistów
- fakt, że 30.09 wcale nie dostaliśmy gotowego produktu, tylko jeszcze przez półtora miesiąca zachodziły intensywne i częste zmiany
- bardzo późne procesowanie rozporządzeń dot. KSeF
- błędy i niezgodności aplikacji www z dokumentacją API
- brak możliwości wykorzystywania aplikacji jako kanału awaryjnego (np do przesłania faktur offline)
- brak jasnych wytycznych dotyczących korekt technicznych
- późne wdrożenie obsługi kodów QR
Z komentarzy:
- brak możliwości tworzenia certyfikatów i kont atestowanych do systemów automatycznego przetwarzania (programów komputerowych) z oddzielnymi uprawnieniami
- brak przejrzystości w zarządzaniu uprawnieniami
- zbyt późne uruchomienie środowiska przedprodukcyjnego
- brak dostępu do MCU (zarządzania uprawnieniami przez API na środowisku produkcyjnym) przed uruchomieniem i wejściem obowiązku stosowania KSeF
- brak zarówno publikacji algorytmu pozwalającego nadać idwew, jak i funkcji, która by taki identyfikator tworzyła.
- aplikacja podatnika uniemożliwia łatwe kontrolowane ciągłości numeracji wystawianych faktur
- brak informacji o przesyłającym fakturę do KSeF - kwestia odpowiedzialności
- czy audyt w ogóle planowany, a jeśli tak, to... (1 z 1. listy)
I jeszcze luźna uwaga:
- dlaczego dla trybu offline24 nakazuje się przesłanie faktury następnego dnia po wystawieniu,a nie ustaniu przyczyn
- szkolenia w ramach "śród z KSeF" odbywały się wyłącznie na prezentacjach przy braku działających środowisk, na których można by wiedzę zweryfikować czy utrwalić bezpośrednio w trakcie lub po szkoleniu.
Coś byście dodali? A może wykreślili?
- Rejestracja: dni
- Ostatnio: dni
Podpisywanie certyfikatem kwalifikowanym. MIcrosoftXAdes
Wyzwanie pobierane z https://ksef-demo.mf.gov.pl/api/v2/auth/challenge
Dostaję {"exception"..."exceptionDescription":"Nieprawidłowe wyzwanie autoryzacyjne."...
<?xml version="1.0" encoding="utf-8"?>
<AuthTokenRequest
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://ksef.mf.gov.pl/auth/token/2.0">
<Challenge>20251125-CR-41E9D9D000-7A7D2CF2EE-A3</Challenge>
<ContextIdentifier>
<Nip>XXXXXXXXXX</Nip>
</ContextIdentifier>
<SubjectIdentifierType>certificateSubject</SubjectIdentifierType>
<ds:Signature
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-818c9fe7-3531-44fa-9c0f-b9ae6479f694">
<ds:SignedInfo>
...
</xades:QualifyingProperties>
</ds:Object>
</ds:Signature>
</AuthTokenRequest>
Czy może ktoś miał taki błąd?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
Z góry sorry za kolejne pytanie z gatunku "typa chyba poje...." Wystawiam dwie faktury o numerach FV001 i FV002. Obie faktury zostaną wysłane w trybie offline tego samego dnia w oddzielnych sesjach. Faktura FV002 została wysłana o 14:02, Faktura FV001 o 14:45. Czy jest problem w tym, że FV001 została wysłana po FV002?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 58
Mam pytanie do piszących w PHP, do wizualizacji faktur w pdf używacie xsl czy coś innego ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1
Witam, czy ktoś zastosował rozwiązanie w pythonie ?
Próbuje sprawdzić status uwierzytelniania i otrzymuję
{'startDate': '2025-11-26T09:57:09.3353441+00:00', 'authenticationMethod': 'Token', 'status': {'code': 450, 'description': 'Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu', 'details': ['Invalid token encoding.']}}
import base64
from dateutil import parser
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import serialization
from cryptography import x509
import requests
ksef_token = "xxx"
ksef_nip = "yyy"
print('START')
def get_auth_challenge():
print('1) Pobranie challenge')
resp = requests.post("https://ksef-demo.mf.gov.pl/api/v2/auth/challenge")
resp.raise_for_status()
data = resp.json()
return data['challenge'], data['timestamp']
def get_token_with_timestamp(ksef_token, timestamp):
print('2) token with timestamp')
dt = parser.isoparse(timestamp)
unix_ms = int(dt.timestamp() * 1000)
token_with_timestamp = F'{ksef_token}|{unix_ms}'
print('timestamp:',timestamp)
print('ksef_token:',ksef_token)
print('token_with_timestamp:',token_with_timestamp)
return token_with_timestamp
def get_ksef_public_key():
print('3) pobranie klucza')
url = "https://ksef-demo.mf.gov.pl/api/v2/security/public-key-certificates"
resp = requests.get(url)
resp.raise_for_status()
certs = resp.json()
token_cert = next((c for c in certs if "KsefTokenEncryption" in c.get("usage", [])), None)
if not token_cert:
raise Exception("Nie znaleziono certyfikatu do szyfrowania tokena.")
# Dekodowanie Base64 DER certyfikatu X.509
cert_der = base64.b64decode(token_cert["certificate"])
# Załadowanie certyfikatu
cert = x509.load_der_x509_certificate(cert_der)
# Wyciągnięcie public key z certyfikatu
public_key = cert.public_key()
return public_key
def encrypt_token_rsa(token_with_timestamp: str, public_key) -> str:
print('4) szyfrowanie tokenu')
encrypted = public_key.encrypt(
token_with_timestamp.encode("utf-8"),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Kodowanie w Base64
encrypted_b64 = base64.b64encode(encrypted).decode("utf-8")
return encrypted_b64
def init_ksef_token_auth(challenge: str, encrypted_token: str, nip: str):
"""
Rozpoczyna uwierzytelnienie w KSeF przy użyciu zaszyfrowanego tokena.
"""
print('5) Rozpoczyna uwierzytelnienie')
url = "https://ksef-demo.mf.gov.pl/api/v2/auth/ksef-token"
payload = {
"challenge": challenge,
"contextIdentifier": {
"type": "Nip",
"value": nip
},
"encryptedToken": encrypted_token
}
headers = {
"Content-Type": "application/json"
}
resp = requests.post(url, json=payload, headers=headers)
resp.raise_for_status() # rzuci wyjątek, jeśli status != 2xx
return resp.json()
def get_auth_status(reference_number: str, auth_token: str):
"""
Pobiera status uwierzytelniania dla podanego referenceNumber.
"""
print('6) status uwierzytelniania')
url = f"https://ksef-demo.mf.gov.pl/api/v2/auth/{reference_number}"
headers = {
"Authorization": f"Bearer {auth_token}",
"Content-Type": "application/json"
}
resp = requests.get(url, headers=headers)
resp.raise_for_status()
return resp.json()
challenge, timestamp = get_auth_challenge()
token_with_timestamp = get_token_with_timestamp(ksef_token,timestamp)
public_key = get_ksef_public_key()
encrypted_token_b64 = encrypt_token_rsa(token_with_timestamp, public_key)
auth_response = init_ksef_token_auth(challenge, encrypted_token_b64, ksef_nip)
print("auth_response", auth_response)
reference_number = auth_response['referenceNumber']
jwt_token = auth_response['authenticationToken']['token']
status_response = get_auth_status(reference_number, jwt_token)
print("Authentication status:", status_response)