Krajowy system e-Faktur

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 59
0
mores4 napisał(a):

W końcu :)

Kopiuj
KsefXadesAuthService.php on line 345:
array:2 [▼
  "referenceNumber" => "20251002-AU-2C7C279000-6369773857-24"
  "authenticationToken" => array:2 [▼
    "token" => "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBdXRoZW50aWNhdGlvblRva2VuIiwiYXJuIjoiMjAyNTEwMDItQVUtMkM3QzI3OTAwMC02MzY5NzczODU3LTI0IiwiZXhwIjoxNzU5NDEyNTQ1LCJ ▶"
    "validUntil" => "2025-10-02T13:42:25.8948183+00:00"
  ]
Kopiuj
# Konfiguracja OpenSSL dla certyfikatu KSeF
# Plik: ksef_openssl.cnf

[ ca ]
default_ca = CA_default

[ CA_default ]
dir               = .
certs             = $dir/certs
crl_dir           = $dir/crl
database          = $dir/index.txt
new_certs_dir     = $dir/newcerts
serial            = $dir/serial
RANDFILE          = $dir/private/.rand

[ oid_section ]
OID.2.5.4.97 = organizationIdentifier

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
x509_extensions     = v3_req
string_mask         = utf8only
prompt              = no

[ req_distinguished_name ]
countryName                 = PL
organizationName            = Firma
commonName                  = Jan kowalski
organizationIdentifier      = VATPL-*

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
extendedKeyUsage = clientAuth

a xml

Kopiuj
<?xml version="1.0" encoding="UTF-8"?>
<AuthTokenRequest xmlns="http://ksef.mf.gov.pl/auth/token/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Challenge>20251002-CR-2EEEC30000-6363D626FF-FF</Challenge>
  <ContextIdentifier>
    <Nip>7343170998</Nip>
  </ContextIdentifier>
  <SubjectIdentifierType>certificateSubject</SubjectIdentifierType>
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="ID-8cd755d7-f32d-415c-bb3e-0800f38dd443">
    <ds:SignedInfo Id="ID-6a250a79-780a-44e6-9fd4-8f4b8fb6fae4">
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
      <ds:Reference Id="ID-d8e65384-d2bb-476c-9e04-4113cf7b04bb" 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>FGRadVu/Z9+zY3NOfLRftyOQYmgamgt2jcTu6Flnwbs=</ds:DigestValue>
      </ds:Reference>
      <ds:Reference Id="ID-3a2f708d-7ad0-4e0f-b5fb-0ff593e84098" Type="http://uri.etsi.org/01903#SignedProperties" URI="#ID-260569ab-9e1b-4db3-9c81-48e0c8ad0aa0">
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
        <ds:DigestValue>xPkUizlledWosmFCdYeniPgMa6WbhN4Z1+yWjnhn8V8=</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue Id="ID-794cb625-1fe0-448e-96ce-ded771beacb3">Zatl3fevfNKIH3OGQ270lZZNaG5lK+bTSVY6wvFgSE3OQA8dgOHFTim2kBdlgFEdMTeXBB84DuoHsDPdIVR+NGfKIvtn/J9wS6FPhnO9D7rJoIoHlDqhbkjEJH6fvpn+qihzMGs6NEL6AdBpexez/FW48yu6tDVHUThPreiuybRVDI7ZaFroxITakN9NeYMdry1ec1BOYfX0UeRq5TEuB84V7opBJtc/MHj+Mj+IAbOFNYOZRayYsjXuA/J2s8MsnbfbMbe8qp8KyOez+jPnzKNB9xEB0hcLxOY6l1SXZXHzRuAesDnC3gg9kPprsZnd85oXkgVox2z1OxoBV3wTxw==</ds:SignatureValue>
    <ds:KeyInfo>
      <ds:X509Data>
        <ds:X509Certificate>MIIDejCCAmKgAwIBAgIUXsu50QRP+JoFXCzTF2tkqXPyG1swDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCUEwxDjAMBgNVBAoMBUZpcm1hMRUwEwYDVQQDDAxKYW4ga293YWxza2kxGTAXBgNVBGEMEFZBVFBMLTczNDMxNzA5OTgwHhcNMjUxMDAxMTMyNTA1WhcNMjYxMDAxMTMyNTA1WjBPMQswCQYDVQQGEwJQTDEOMAwGA1UECgwFRmlybWExFTATBgNVBAMMDEphbiBrb3dhbHNraTEZMBcGA1UEYQwQVkFUUEwtNzM0MzE3MDk5ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMqL9fB4Xm2G2akdk7Or64qlW51RW7Lyv9eK9immKS5fBeK4tzjNex2N9/9uCVGYjCVfL95a7PkfiTMAdFfbbtl7hyKkoX8XSm8GBmQsVXtfQdDhlvxSbQpInMB3+UvFv89k8dyq+xtsEuXvkmbnhgjWp0Yjo7AiS0Ul2TcObkPr3zGbyyWKWI1NGEtsaPQXoDFnLCU1SfasyVdfMVW4LJsIGDDDTUo2UEtpxfHV7x6VMQ0sPbqTtDF+igrnsCpy8STc7kVeGoUlVgnoYhPANhidJnTHps9xrunSqAM17wDxIgU0QSrNTHwc6Ejhg6nxJt6m6/18+lRZPZZE2nKtiP8CAwEAAaNOMEwwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwHQYDVR0OBBYEFNjyWvVG/GbMOvPTKPYhJT/aGbx5MA0GCSqGSIb3DQEBCwUAA4IBAQCS1auGaaxNWwK+E9YEqdFT6m8yUxHT6RJfGZG5j0pkWbRRRiKS69/HspJI/5QXj3x6Hj5bNTOShXsbgf3DEfOMtNjslJlRZ0Qqc2EwbngB4C0ZbzMa9WIh50OX79m+MMYczi5UmjYJHYTjKfr7dvndLNo+zXE3sbOeOQFmLCXTqxEPe25uG0FVu3d1VFNP+lXajL8Gnbd2w73gy6G6gkZoS9kGAMsR43luwyDYEhnr5GcQOUXsHSXDRpkOw6wssT3ZPAht463nU58CTJwROPpDEnprdDLLlzW0dAuIBRw4TZDV63Ne1pjhZx/T8enE7wFmuktcHj3fsAoOn5FJCFqW</ds:X509Certificate>
        <ds:X509IssuerSerial>
          <ds:X509IssuerName>C=PL,O=Firma,CN=Jan kowalski,organizationIdentifier=VATPL-7343170998</ds:X509IssuerName>
          <ds:X509SerialNumber>541188370630386839572757270176888046432034102107</ds:X509SerialNumber>
        </ds:X509IssuerSerial>
      </ds:X509Data>
    </ds:KeyInfo>
    <ds:Object>
      <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#ID-8cd755d7-f32d-415c-bb3e-0800f38dd443">
        <xades:SignedProperties Id="ID-260569ab-9e1b-4db3-9c81-48e0c8ad0aa0">
          <xades:SignedSignatureProperties>
            <xades:SigningTime>2025-10-02T13:40:12Z</xades:SigningTime>
            <xades:SigningCertificate>
              <xades:Cert>
                <xades:CertDigest>
                  <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                  <ds:DigestValue>LUoCVAAzrClmesOUyqKKBMMbcGvzbckI1/6pnS2RpaY=</ds:DigestValue>
                </xades:CertDigest>
                <xades:IssuerSerial>
                  <ds:X509IssuerName>C=PL,O=Firma,CN=Jan kowalski,organizationIdentifier=VATPL-*</ds:X509IssuerName>
                  <ds:X509SerialNumber>541188370630386839572757270176888046432034102107</ds:X509SerialNumber>
                </xades:IssuerSerial>
              </xades:Cert>
            </xades:SigningCertificate>
          </xades:SignedSignatureProperties>
          <xades:SignedDataObjectProperties/>
        </xades:SignedProperties>
      </xades:QualifyingProperties>
    </ds:Object>
  </ds:Signature>
</AuthTokenRequest>

Ważne by był bez białych znaków

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Cześć,
Mam 2 pytania:

  1. jakie podejście wystawiania będziecie stosować? U mnie ilość wysyłanych faktur jest na granicy limitu interaktywnej stąd też muszę zastosować batchową. Wtedy w trakcie dnia wystawiać wszystko offline i wieczorem batchowo do KSeFu? Czy po prostu w trakcie dnia np. zbierać faktury offline, wysłać 1x godzina do KSeF i po otrzymaniu numeru wtedy dopiero do klienta jako już faktura z numerem?
  2. jak dotąd na fakturze umieszczałem również kraj pochodzenia i kod taryfy celnej dla towarów, nie ma dedykowanych pól na pozycji faktury w FA(3). Będziecie w jakiś sposób dodawać do danych wysyłanych do KSeFu dodatkowe informacje aby kontrahent miał te same dane na fakturze elektronicznej i KSeF? (faktury elektroniczne będę wysyłał tak jak teraz, po uruchomieniu KSeF)
Pavel Misko
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 17
0

Czy ktoś może podpowiedzieć, jak prawidłowo to zrobić w środowisku testowym 2.0?

Najpierw tworzę osobę, używając /testdata/person.

Następnie tworzę certyfikat .p12 dla tej osoby

Następnie dostaję challenge и timestamp używając https://ksef-test.mf.gov.pl/api/v2/auth/challenge

Następnie tworzę plik xml dla tej osoby.

Następnie podpisuję plik XML podpisem Xades i wysyłam podpisany plik xml do auth/xades-signature.

Czy dobrze to rozumiem?

Robię dokładnie tak i otrzymuję błąd:

"exceptionCode":9105,"exceptionDescription":"Nieprawidłowy podpis.\

Ale otrzymuję authenticationToken, jeśli podpisałem XML profilem zaufanym.

Czy dobrze rozumiem, że dalej należy utworzyć stały token?
Jak to zrobić?

Od kilku dni zmagam się z KSEF w języku PHP i mam wiele pytań. Utworzyłem grupę na Telegramie. Jeśli ktoś również pisze w tym języku, zapraszam do dołączenia. Razem osiągniemy sukces.
https://t.me/+ed2GPTZQelk5YmMy

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Dobrze rozumiem, że nie ma już metody, którą nabywca może pobrać pojedynczą fakturę po numerze ksef? api/v2/invoices/ksef/ jest tylko dla wystawcy faktury czyli tylko metodami do exportu można pobrać.screenshot-20251002165937.png

MG
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 46
0

Autoryzuje się swoim osobistym NIPem, dostaje challenge, tworze plik xml, podpisuje swoim kwalifikowanym certyfikatem, dostaje ReferenceNumber, Token i ValidUntil, a sprawdzenie dostępności mi zwraca "Brak przypisanych uprawnień". To jak te uprawnienia się nadaje?

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Jak długo u was trwa przetwarzanie przez KSeF faktury aby otrzymać nr KSeF? U mnie od 5min i na razie brak efektu - tak długi czas to ogromny fakeup :/ - jak klientowi wystwić FV od razu (tylko offline) :/

Kopiuj
string(246) "{"ordinalNumber":1,"referenceNumber":"20251002-EE-337EF68000-5DBDF38E15-CF",
"invoiceHash":"6xi7k6R880D17d9g4cuYyYME86hOERgPIZQjN98WRU0=","invoicingDate":
"2025-10-02T14:59:57.4161606+00:00","status":{"code":150,"description":"Trwa przetwarzanie"}}"


WJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Do tych, którzy już mają wystawione pierwsze faktury sprzedaży w KSeF:

Czy któraś z nich ma niepustą permanentStorageDate?

Jeżeli tak - to jaką ma datę faktury?
(mam na myśli pole P_1)

I czy udało się Wam pobrać za pomocą endpointa invoices/ksef/{ksefNumber} wysłaną wcześniej fakturę?

EDIT: wyjasnione: CIRFMF potwierdziło, że pole permanentStorageDate w statusie faktury powinno być, i że poprawią ten błąd. Czas pomiędzy nadaniem numeru KSeF a zapisaniem do repozytorium (wtedy powinno się w statusie faktury pojawić to pole) to obecnie kilkanaście sekund.

Pavel Misko
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 17
0

Od dwóch dni nie mogę podpisać xml, usunąłem wszystkie błędy zwracane przez XSD, teraz otrzymuję:

Kopiuj
{
    "exceptionCode": 9105,
    "exceptionDescription": "Nieprawidłowy podpis.",
    "details": [
        "Podpis zweryfikowany negatywnie."
    ]
}

Mój openssl-ksef.cnf

Kopiuj
[ req ]
default_bits        = 2048
default_md          = sha256
prompt              = no
utf8                = yes
distinguished_name  = req_dn
x509_extensions     = v3_req

[ req_dn ]
C                   = PL
givenName           = Pavel
surname             = Misko
CN                  = Kodim DEV
serialNumber        = NIP9512577279
OID.2.5.4.97        = NIP-9512577279

[ v3_req ]
keyUsage            = critical, digitalSignature, nonRepudiation
extendedKeyUsage    = codeSigning, emailProtection, clientAuth
subjectKeyIdentifier= hash

Mój XML:

Kopiuj
<?xml version="1.0" encoding="UTF-8"?>
<AuthTokenRequest xmlns="http://ksef.mf.gov.pl/auth/token/2.0" Id="pfxfd36dce1-ca26-79bf-6489-b66e2a414246">
    <Challenge>20251002-CR-396C1B8000-E58B9637D2-6D</Challenge>
    <ContextIdentifier>
        <Nip>9512577279</Nip>
    </ContextIdentifier>
    <SubjectIdentifierType>certificateSubject</SubjectIdentifierType>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Id="ID-bf4c980d-a289-48a9-87cd-687765f11a21">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <ds:Reference URI="#pfxfd36dce1-ca26-79bf-6489-b66e2a414246">
                <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>ZwX9eG45yvE4NdAdHjBXwdLpljBl2mJ0VIm+VyCwBE0=</ds:DigestValue>
            </ds:Reference>
            <ds:Reference URI="#ID-418d6ba9-aac4-4037-acac-dbe98b817d71">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <ds:DigestValue>wBlfxA+Hmf5v0HpTirCjSweJ1WC7J+VpVIGDDF6sy1Y=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>TWm3n7wG2EyRtfhrf/8e6Nz48TT41PRsaUHqHDF3N9sF9W773b5scAJ2Uut/ZE0rsDKYpGfk+nWZqKRVRdTV1h0vwvIBGw6ol4oq402gVBWyHJW6g9uQUCkx+0/LIY9vnkXoLzRQFRsV3axv0VBnvn99k1SgL+Jq0OEu+qlTu7ci6B3kDJyYvWGfK0XWHxoB0U3IkHcXTJ8pjyqOsLQS5rk1ZfyHZn1Xb+VE/7NA06KgAvpCNky5AP0QclPAfi0ysgnmKstDXXl+bs8UeTQXIi8olK01CW0G8NcvmopTENuZwSVzaJGGHPUvVaAYGvW/gbYSJI3IRYicPTL9C5LFpA==</ds:SignatureValue>
        <ds:Object>
            <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#ID-bf4c980d-a289-48a9-87cd-687765f11a21">
                <xades:SignedProperties xmlns:default="http://www.w3.org/2000/09/xmldsig#" Id="ID-418d6ba9-aac4-4037-acac-dbe98b817d71">
                    <xades:SignedSignatureProperties xmlns:default="http://www.w3.org/2000/09/xmldsig#">
                        <xades:SigningTime>2025-10-02T17:04:40Z</xades:SigningTime>
                        <xades:SigningCertificate xmlns:default="http://www.w3.org/2000/09/xmldsig#">
                            <xades:Cert xmlns:default="http://www.w3.org/2000/09/xmldsig#">
                                <xades:CertDigest xmlns:default="http://www.w3.org/2000/09/xmldsig#">
                                    <ds:DigestMethod xmlns="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                    <ds:DigestValue xmlns="http://www.w3.org/2000/09/xmldsig#">7KbQbCX/j2YoU5OYZ8xBZCuVhkqogFL4TcztaMKkbyo=</ds:DigestValue>
                                </xades:CertDigest>
                                <xades:IssuerSerial xmlns:default="http://www.w3.org/2000/09/xmldsig#">
                                    <ds:X509IssuerName xmlns="http://www.w3.org/2000/09/xmldsig#">C=PL,O=Kodim DEV,CN=Pavel Misko,organizationIdentifier=VATPL-9512577279</ds:X509IssuerName>
                                    <ds:X509SerialNumber xmlns="http://www.w3.org/2000/09/xmldsig#">418678680852958516523500064421122581973346125478</ds:X509SerialNumber>
                                </xades:IssuerSerial>
                            </xades:Cert>
                        </xades:SigningCertificate>
                    </xades:SignedSignatureProperties>
                    <xades:SignedDataObjectProperties/>
                </xades:SignedProperties>
            </xades:QualifyingProperties>
        </ds:Object>
    </ds:Signature>
</AuthTokenRequest>
N1ebieski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Pamiętam, że był taki dokument, który wyjaśniał zmiany w strukturze logicznej faktury między FA2, a FA3. Nie mogę go znaleźć. Poratuje ktoś linkiem?

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Informacyjnie: jezeli się przesle 2 razy tą samą FV do KSeF to nie bedzie duplikatu jak było w KSeF1.0 lecz komunikat zwrotny:

Kopiuj
string(430) "{"ordinalNumber":1,"referenceNumber":"20251002-EE-42331FB000-69F60B43F9-B0",
"invoiceHash":"b3iYDbSKPLtKVkBesogd3TVacKO2cAqhpXzGDce85yA=","invoicingDate":
"2025-10-02T19:16:55.4194102+00:00","status":{"code":440,"description":
"Duplikat faktury","details":["Duplikat faktury. Faktura o numerze KSeF: 6422786434-20251002-010060F1FA83-CA
 została już prawidłowo przesłana do systemu w sesji: 20251002-SO-41FD486000-69FCED6C0D-5F"]}}

Przyjeta fv i prawidłowa z nadanym nr ksef zwraca:

Kopiuj
string(816) "{"ordinalNumber":1,"invoiceNumber":"2/10/2025","ksefNumber":"6422786434-20251002-010060F1FA83-CA",
"referenceNumber":"20251002-EE-41FD6FC000-E58E52BAE0-28","invoiceHash":"b3iYDbSKPLtKVkBesogd3TVacKO2cAqhpXzGDce85yA=",
"acquisitionDate":"2025-10-02T19:13:15.6590582+00:00","invoicingDate":"2025-10-02T19:13:15.5163393+00:00","upoDownloadUrl":
"https://ksef-test.mf.gov.pl/storage/00/20251002-so-41fd486000-69fced6c0d-5f/invoice-upo/upo_6422786434-20251002-010060F1FA83-CA.xml?skoid=0e92608a-831d-404b-9945-197ed82a5dbc&sktid=647754c7-3974-4442-a425-c61341b61c69&skt=2025-10-02T14%3A17%3A17Z&ske=2025-10-09T14%3A17%3A17Z&sks=b&skv=2025-01-05&sv=2025-01-05&st=2025-10-02T19%3A08%3A16Z&se=2025-10-05T19%3A13%3A16Z&sr=b&sp=r&sig=IVKBx1jWb0O7XX0%2FkvGZNOdSST7yITXFoip1teMVJ9A%3D",
"status":{"code":200,"description":"Sukces"}}"

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Wczoraj byłem na etapie wysyłania faktur a dziś nie mogę utworzyć sesji z powodu błędu:
Nieprawidłowa długość wektora inicjującego (IV). Oczekiwano 16 bajtów, otrzymano 24.

w JSON wysyłam:
initializationVector":"645250685172706C55594C7366517067"

Przypominam - wczoraj działało.

Ktoś ma podobny problem?

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 59
0

Działa Wam może pobieranie metadanych faktur ?

WJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Ciekawostka: wysłałem fakturę ze wsteczną datą i flagą offlineMode = false.
A w metadanych zwróconych przez KseF widze, że ją automatycznie zarejestrował jako "Offline".
Warto pamiętać o tym efekcie!

MG
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 46
0

Czy mógłby mi ktoś udostępnić certyfikat self signed w pliku pfx. Ciągle mam nieprawidłowy podpis, a nie jestem pewna, że mój certyfikat jest prawidłowy.

Janusz Konik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Przy próbie inicjalizacji sesji tak interaktywnej jak i wsadowej dostaję permanentnie 403 Forbidden.
Logowałem się certyfikatem selfsigned, certyfikatem KSeF, tokenem KSeF, zawsze to samo.
Wie ktoś o co chodzi?

Wysyłam:

Nagłówki

Kopiuj
"Connection: keep-alive",
"Content-Type: application/json",
"Content-Length: 510",
"Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBdXRoZW50aWNhdGlvblRva2VuIiwiYXJuIjoiMjAyNTEwMDMtQVUtM0ZBMDU1NDAwMC1CREQ2RjNGQzQ3LTMwIiwiZXhwIjoxNzU5NTE5MDE3LCJpYXQiOjE3NTk1MTYzMTcsImlzcyI6ImtzZWYtYXBpLXRlIiwiYXVkIjoia3NlZi1hcGktdGUifQ.6DIUli-bT0Nu8pZISJOeTbzqc4HciqBp6qXzf9MaUog",
"Host: ksef-test.mf.gov.pl",
"Accept: application/json",
"User-Agent: Mozilla/3.0 (compatible; Faktury)",
"Cookie: visid_incap_3145183=2eRJuKz6QGSLh0PJmctFNJoW4GgAAAAAQUIPAAAAAADNluxhabmoym8a+Slk+82v; incap_ses_985_3145183=FDe8DZewnzG0CcL4X2yrDZoW4GgAAAAA/VZ/HxbjsGHIeG775M0QHw==; nlbi_3145183=l4Y0QkiyxDnqJIvzrQ6yoAAAAAAD7fRLByaEjyYI7B5eudFS"

Wsadowa

https://ksef-test.mf.gov.pl/api/v2/sessions/batch

Kopiuj
{
	"formCode": {
		"systemCode": "FA (3)",
		"schemaVersion": "1-0E",
		"value": "FA"
	},
	"batchFile": {
		"fileSize": 3602,
		"fileHash": "2ky7wsN7CWYzFL8xprr+qz4NXYAeOPDUy/PK1fg21B8=",
		"fileParts": [
			{
				"ordinalNumber": 1,
				"fileName": "KseFPackage01",
				"fileSize": 3616,
				"fileHash": "rNEq4WJFQAOYrSG44qpqcqVG52F+Y8bpHPkp4HcRrC4="
			}
		]
	},
	"encryption": {
		"encryptedSymmetricKey": "AvZZ6+PMJoLdMfVwoMVgGG9rECndC3FSo0Ur2pvsBZFVPNlv9KqnBEn6oiNDw/HI8/Qbb12TAV+CqOgpomO3LATqV3XMMsWp/1XchdKCJYu4Chl3dbFlr+CDvlS7yxogVRWXHQ1pP+61m/Ih8vOhkWLAjnP91sTZVRcGEQnWDnWUcCtxWu1UZlCnaeiIuV2gUId6UE8UHksJWOhjVm6yFn0HV0+1DYBx6thap+HRiQ2/Shmmze2WUM4MLokXi2mvZ2SOVBhrJP/Io/6/+vZc1vF9t/kcJ3ZfQsJTj4BoPFXTKRQqmh4YFSsvKkoAJLKJJeZMsrMH8vb4GBYPWCFP5g==",
		"initializationVector": "dXlkckZza2I1eWFpcWs5eA=="
	}
}

Interaktywna

https://ksef-test.mf.gov.pl/api/v2/sessions/online

Kopiuj
{
	"formCode": {
		"systemCode": "FA (3)",
		"schemaVersion": "1-0E",
		"value": "FA"
	},
	"encryption": {
		"encryptedSymmetricKey": "PA3hVh+2IvXzSrxiF71WQuq/t4HMHDxnOcijPIJ4Kx6RqOSMkkiYNOh0xFcYTxwFDx5p4O+d/YdmANRNgMx5gdlSsoAyZ2pXKn5R6xWhFmUiJBdgImkZXCjB+Bn07EwGq25jKcG0cjNeVDQXzomuhxlWIWQm421kTtayQHve4YEyvurt3iysxLi3cSmeaommxbJNZTZXe8if6SUBD/O4+lRJcBbvOoSnjAKL0uwXKHViKbDfqHAnK3kZf54wXjHN175nwAdRbyuK+MZJTxyrG9UKPtA3dbFw+GNARuKlaOB7bm0aIEqh70qC06+0qvoJfZgJ9p95rZdxvnkmgso7jw==",
		"initializationVector": "dWFkSXBUQ1FCZkd1TnlTZA=="
	}
}
Janusz Konik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

@Janusz Konik: Tak!!!!!

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Dla osób co mają uruchomione środowisko testowe KSeF2, proszę o wystawienie jakiejś faktury na nip 6422786434 - chciał bym przetestować odbieranie faktur

CZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

czy jest jakaś nowa wersja Ksef.Client poza https://github.com/CIRFMF/ksef-client-csharp/ ?
przy wykonaniu :
PagedInvoiceResponse invoicesMetadata = await _ksefClient.QueryInvoiceMetadataAsync(query, _accessToken.Token);
json odpowiedzi z api ... "buyer": {
"identifier": {
"type": "Nip",
"value": "3225081610"
},
"name": "Test Company 2"
},...
nie zgadza się z :
namespace KSeF.Client.Core.Models.Invoices;

public class Buyer
{
public IdentifierType IdentifierType { get; set; }
public string Identifier { get; set; }
public string Name { get; set; }
}

JK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Witam wszystkich. Jestem niezbyt biegły w C#, ale widzę, że parę osób tworzy w tym języku korzystając z udostępnionych bibliotek na gitub-ie. Mam skompilowaną najnowszą wersję, ale nie jestem biegły w programowaniu asynchronicznym. Czy ktoś mógłby mi udostępnić taki program, który by robił np jak opisane w jednym z postów:

Najpierw tworzę osobę, używając /testdata/person.
Następnie tworzę certyfikat .p12 dla tej osoby
Następnie dostaję challenge i timestamp używając
https://ksef-test.mf.gov.pl/api/v2/auth/challenge
Następnie tworzę plik xml dla tej osoby.
Następnie podpisuję plik XML podpisem Xades i wysyłam podpisany plik xml do auth/xades-signature.

Czyli formatka z przyciskiem
Generuj challenge
i ewentualnie
Wyślij podpisany XML

Na razie boksuję w miejscu i nie umiem ruszyć.

ZB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Takie pytania. Inicjuję uwierzytelnienie przez ten endpoint:

https://ksef-test.mf.gov.pl/api/v2/auth/xades-signature

Tu tworzy się sesja. Tu dostaję token (JWT), który potem przekazuję w polu Bearer headera we wszystkich innych requestach, i potem można tę sesję wylistować tu:

https://ksef-test.mf.gov.pl/api/v2/auth/sessions

Jak na razie dobrze rozumiem?

A sesje interaktywne robię tu:

https://ksef-test.mf.gov.pl/api/v2/sessions/online

i ta sesja jako identyfikator ma z kolei referenceNumber, który jawnie w JSON przekazuję a nie w headerach?

I te sesje interaktywne nie będą wyświetlane w tym poprzednim endpoincie?

I dodatkowo czy sesja interaktywna służy tylko do wysyłania faktur czy ma jeszcze inne zastosowanie?

WJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Może to się komuś przyda: w paczkach faktur, pobieranych z KSeF za pomocą /invoices/exports, ma się pojawić plik JSON z metadanymi.

Zapewne będzie to taka sama struktura, jak zwracana przez /invoices/query/metadata, ale przynajmniej w jednym kawałku będzie max. 10tys. faktur.

JK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Dzięki za odpowiedź. U mnie gorsza sprawa. Nie za bardzo wiem od czego zacząć. Może jakieś wskazówki, by łatwiej mi się było przebić przez dokumentację zamieszczoną na github-ie.

SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

FA (2) vs FA (3)

Czy ktoś może potwierdzić lub zaprzeczyć, czy dobrze mi się wydaje, że:

  1. FA (2) obowiązuje do 31.01.2026, a FA (3) od 01.02.2026
  2. Jeśli w lutym będziemy wysyłać fakturę za styczeń, to należy używać wzoru FA (2). Czy może jednak FA (3)?
T2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Cześć

Chyba końcu się udało :) Czy taka odpowiedź jest oprawna ?
Odpowiedź:

Kopiuj
{"referenceNumber":"20251004-AU-3BED0A0000-D92DD1A694-6C","authenticationToken":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBdXRoZW50aWNhdGlvblRva2VuIiwiYXJuIjoiMjAyNTEwMDQtQVUtM0JFRDBBMDAwMC1EOTJERDFBNjk0LTZDIiwiZXhwIjoxNzU5NjAxNTM2LCJpYXQiOjE3NTk1OTg4MzYsImlzcyI6ImtzZWYtYXBpLXRlIiwiYXVkIjoia3NlZi1hcGktdGUifQ.VI2wGM7HEv-PVf5mxih3myy09hLQg117uuJbwzSVxC0","validUntil":"2025-10-04T18:12:16.9119694+00:00"}}

Jak wysyłam fakturę to dostaje cos takiego i czy to jest poprawna odpowiedź ?
Odpowiedź:

Kopiuj
{"success":true,"httpCode":202,"sessionReference":"TEST-SESSION-5752D8F872","response":{"elementReferenceNumber":"MOCK-EC553AA4BD","message":"Symulacja wysyłki faktury (HS256)"},"sessionStatus":"","sessionClosed":""}
GS
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam wygenerowany AuthTokenRequest jak poniżej:

Kopiuj
<?xml version="1.0" encoding="utf-8"?>
<AuthTokenRequest xmlns="http://ksef.mf.gov.pl/auth/token/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Challenge>20251005-CR-23978C7000-4990555DDE-81</Challenge>
    <ContextIdentifier>
        <Nip>6988895577</Nip>
    </ContextIdentifier>
    <SubjectIdentifierType>certificateSubject</SubjectIdentifierType>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="ID-8cd755d7-f32d-415c-bb3e-0800f38dd443">
  <ds:SignedInfo Id="ID-6a250a79-780a-44e6-9fd4-8f4b8fb6fae4">
    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
    <ds:Reference Id="ID-d8e65384-d2bb-476c-9e04-4113cf7b04bb" 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>StrrkOmG4FC4i9mBXGvCQGh79mD20Q87HI2P54Uwln8=</ds:DigestValue>
    </ds:Reference>
    <ds:Reference Id="ID-3a2f708d-7ad0-4e0f-b5fb-0ff593e84098" Type="http://uri.etsi.org/01903#SignedProperties" URI="#ID-260569ab-9e1b-4db3-9c81-48e0c8ad0aa0">
      <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
      <ds:DigestValue>bHuCxk56gLg5jubGEYQPzvqEd8+0p5+n/MYk2M40/Ks=</ds:DigestValue>
    </ds:Reference>
  </ds:SignedInfo>
  <ds:SignatureValue Id="ID-794cb625-1fe0-448e-96ce-ded771beacb3">B1dCBm/oxWqF0kTHiFsUlwSbefqlPwxawOCxLRFG11SkWkKA6/4ED+IvtY6xz7WGENWYYrfkF1k90Vo1JBBJGepF/+reerzaAiuTbo3SEowF/aNM3Ftx37RnJblPhnSdc3pZvZ2L5GD8kIllij+AK5x+XQjKFyz0PbbDSmcDdxcMGYlLu5PnR1VToY7oAUULwThXvOj9jxJFlJZo14jr64Aez1Iokrq3xNzYZP96HhE0GyziZZaXVDrehbxAnEnTOxxPAYClaphrZApOhsPBUmRYjLpgKAT5TbUUM3tI+0Rb/P3yhOo5cxFzE+v/8KZe44nM/kXxHMCoy4fWySm1Lg==</ds:SignatureValue>
  <ds:KeyInfo>
    <ds:X509Data>
      <ds:X509Certificate>MIID5zCCAs+gAwIBAgIUQdyAlUEwnE98C7pmPH5ZVr9NBo8wDQYJKoZIhvcNAQELBQAwgY4xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpvd2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExFzAVBgNVBAoMDk1vamFGaXJtYSBLU0VGMQ0wCwYDVQQLDARLU0VGMRYwFAYDVQQDDA1tb2phLWZpcm1hLnBsMRYwFAYDVQQFEw1OSVA2OTg4ODk1NTc3MB4XDTI1MTAwNTA3MzUyOVoXDTI2MTAwNTA3MzUyOVowgY4xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpvd2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExFzAVBgNVBAoMDk1vamFGaXJtYSBLU0VGMQ0wCwYDVQQLDARLU0VGMRYwFAYDVQQDDA1tb2phLWZpcm1hLnBsMRYwFAYDVQQFEw1OSVA2OTg4ODk1NTc3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqmaYG4b3Tw4L2ZBqrppbrBTEkat8swKb7uSn3gNz1hc2O+5GTzpwnKC+q2aD9nNIjQnmFHhFNs3l5GUoAPKZ1M5TynlCSYVf5Oun893BZiPkQO2mZx8xnI+xXLIuZ3bEVVnbjDqKgjw5pRs9Hu5bQq9zUWaAOyfzoT9qQSdeZXvddzyffHBBbTTYluEn+HJ4sT8aKObVD8WGHktFHBS1wIFoAVlyxjS2sUI7EVa1DbNxoQTNdQ1oAeDbisjeG0jQbf/ovqPn0NVez+luv2z8zQywKfPOoeb6zGRJ1poE3XV1h6C3al3JqZNNu5hgqd/kSmU0QbTDZeWh9dS3VlLMWwIDAQABozswOTAYBgNVHREEETAPgg1tb2phLWZpcm1hLnBsMB0GA1UdDgQWBBTD6FIFANDu2oLXUAoA8Z7E5EbNmTANBgkqhkiG9w0BAQsFAAOCAQEAcKzdT4KALFcxqUt27wUojjYDRNDaxsKwqb8t3dTZmoB7/Y9hIpOWGpyqTUiL7yKCSnNMRnxKMZbr+W4jE92YJuq+dqxaYYHhKnIGXbZB11s8KHiHZVBO/PQzRgDlBPtW7prWok/G4G0FPtdqIULLZn9hdMqS3jZvThPSJKBGSDrYJsVcYmqAJxIdX40AkHzC2iEjI050mXi8jJtEifaPaTNduNdZTxhoGwrRdHiB3jq+4JtTF7mCnnYDGH1yWCNyQ+0k/uXYq2/K8+8gGl5Mm3KIk+i7GySJQEQFpLYTbVlKQJC7uy0hew9DArm522Phaoi+OqB/uMazzX2Vdq8Wrg==</ds:X509Certificate>
      <ds:X509IssuerSerial>
        <ds:X509IssuerName>SERIALNUMBER=NIP6988895577, CN=moja-firma.pl, OU=KSEF, O=MojaFirma KSEF, L=Warszawa, ST=Mazowieckie, C=PL</ds:X509IssuerName>
        <ds:X509SerialNumber>376001765208550463026236565379145213341875373711</ds:X509SerialNumber>
      </ds:X509IssuerSerial>
    </ds:X509Data>
  </ds:KeyInfo>
  <ds:Object>
    <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#ID-8cd755d7-f32d-415c-bb3e-0800f38dd443">
    <xades:SignedProperties Id="ID-260569ab-9e1b-4db3-9c81-48e0c8ad0aa0">
        <xades:SignedSignatureProperties>
            <xades:SigningTime>2025-10-05T10:21:59Z</xades:SigningTime>
            <xades:SigningCertificate>
                <xades:Cert>
                    <xades:CertDigest>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                        <ds:DigestValue>8NEVnnt5FbbBDrxPpImsl9JmFy+E9CPVbo/oKf4MZJs=</ds:DigestValue>
                    </xades:CertDigest>
                    <xades:IssuerSerial>
                        <ds:X509IssuerName>SERIALNUMBER=NIP6988895577, CN=moja-firma.pl, OU=KSEF, O=MojaFirma KSEF, L=Warszawa, ST=Mazowieckie, C=PL</ds:X509IssuerName>
                        <ds:X509SerialNumber>376001765208550463026236565379145213341875373711</ds:X509SerialNumber>
                    </xades:IssuerSerial>
                </xades:Cert>
            </xades:SigningCertificate>
        </xades:SignedSignatureProperties>
        <xades:SignedDataObjectProperties/>
    </xades:SignedProperties>
</xades:QualifyingProperties>
</ds:Object>
</ds:Signature></AuthTokenRequest>

W ten sposób wysyłam go pod właściwy endpoint:

Kopiuj
 var
  ts := tstringlist.Create;
  var
  rest := TMrest.Create;
  try
    ts.LoadFromFile('signedAuth.xml', tencoding.UTF8);
    rest.RRequest.Method := rmpost;
    rest.RClient.BaseURL := 'https://ksef-test.mf.gov.pl/api/v2';
    rest.RRequest.Resource := 'auth/xades-signature';
    rest.RRequest.Params.AddHeader('Content-Type', 'application/xml');
    rest.RRequest.Params.AddHeader('Accept', 'application/json');
    rest.RRequest.Body.Add(ts.Text, trestcontenttype.ctTEXT_XML);
    rest.RRequest.Execute;
    self.Memo1.Lines.Text := //
      inttostr(rest.RResponse.StatusCode) + #13 + //
      rest.RResponse.Content;
  finally
    ts.free;
    rest.free;
  end;

Siedzę nad tym od dwóch dni i wciąż mam odpowiedź : 415

klasa TMrest to prosta i sprawdzona już w innych aplikacjach klasa łącząca w sobie TRestRequest, TRestClient, TrestResponse

Kopiuj
type
  TmREST = class
  public
    RClient: TRESTClient;
    RRequest: TRESTRequest;
    RResponse: TRESTResponse;
    procedure clear;
    constructor Create;
    destructor Destroy; override;
  end;

procedure TmREST.clear;
begin
  self.RRequest.Params.clear;
  self.RRequest.body.ClearBody;
end;

constructor TmREST.Create;
begin
  RClient := TRESTClient.Create(nil);
  RRequest := TRESTRequest.Create(nil);
  RResponse := TRESTResponse.Create(nil);
  RRequest.Client := RClient;
  RRequest.response := RResponse;
end;

destructor TmREST.Destroy;
begin
  RResponse.Free;
  RRequest.Free;
  RClient.Free;
end;
LA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 477
0

czesc wszystkim, zaczynam implementacje, mam nikłe pojęcie o ksef, ale zerknę na dokumentację.
Idealnie w Delphi pod klienta, ale wybiore gotowca w C# - z tego co widze to zrobili takie przyklady zeby bylo duzo niewiadomych...

Póki co mam dwa pytania:

  1. Czy zaczynać od serwera testowego czy od razu lecieć na produkcję (i ewentualnie robić korekty faktur, która sa np na 1 grosz do czego jestem zachecany:) )
  2. Do podpisu dokumentu można użyć:
Kopiuj
    Certyfikat kwalifikowany osoby fizycznej – zawierający numer PESEL lub NIP osoby posiadającej uprawnienia do działania w imieniu firmy,
    Certyfikat kwalifikowany organizacji (tzw. pieczęć firmowa) - zawierający numer NIP.
    Profil Zaufany (ePUAP) – umożliwia podpisanie dokumentu; wykorzystywany przez osoby fizyczne, które mogą go złożyć za pośrednictwem gov.pl.
    Certyfikat KSeF – wystawiany przez system KSeF. Certyfikat ten nie jest certyfikatem kwalifikowanym, ale jest honorowany w procesie uwierzytelniania. Certyfikat KSeF jesy wyłącznie wykorzystywany na potrzeby systemu KSeF.
    Certyfikat dostawcy usług Peppol - zawierający identyfikator dostawcy.

Pytanie brzmi - najlepiej chyba na start zacząć od ePUAP - ale muszę sprawdzić - jakieś porady ktory na start?

GS
  • Rejestracja: dni
  • Ostatnio: dni
1

Gdyby ktoś był zainteresowany to wklejam funkcję do generowania AuthTokenRequest w Delphi.
Funkcja wymaga pobrania biblioteki Chillkat.dll: https://www.chilkatsoft.com/delphiDll.asp
Certyfikat jest pobierany z pliku *.pfx.

Kopiuj

uses
  StringBuilder, XmlDSig, XmlDSigGen, Xml, Cert, classes;

function authXmlXades( //
  aLog: Tstringlist; //
  aNip: string; //
  aChallenge: string; //
  aIdentifierType: string; //
  aCertFilename, aPassword, aOutputFileName: string): boolean;
var
  xmlToSign: HCkXml;
  gen: HCkXmlDSigGen;
  object1: HCkXml;
  Cert: HCkCert;
  sbXml: HCkStringBuilder;
  verifier: HCkXmlDSig;
  numSigs: integer;
  verifyIdx: integer;
  verified: boolean;

begin

  result := true;
  // Create the XML to be signed...
  xmlToSign := CkXml_Create();
  CkXml_putTag(xmlToSign, 'AuthTokenRequest');
  CkXml_AddAttribute(xmlToSign, 'xmlns', 'http://ksef.mf.gov.pl/auth/token/2.0');
  CkXml_AddAttribute(xmlToSign, 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
  CkXml_UpdateChildContent(xmlToSign, 'Challenge', pwidechar(aChallenge));
  CkXml_UpdateChildContent(xmlToSign, 'ContextIdentifier|Nip', pwidechar(aNip));
  CkXml_UpdateChildContent(xmlToSign, 'SubjectIdentifierType', pwidechar(aIdentifierType));

  gen := CkXmlDSigGen_Create();

  CkXmlDSigGen_putSigLocation(gen, 'AuthTokenRequest');
  CkXmlDSigGen_putSigLocationMod(gen, 0);
  CkXmlDSigGen_putSigId(gen, 'ID-8cd755d7-f32d-415c-bb3e-0800f38dd443');
  CkXmlDSigGen_putSigNamespacePrefix(gen, 'ds');
  CkXmlDSigGen_putSigNamespaceUri(gen, 'http://www.w3.org/2000/09/xmldsig#');
  CkXmlDSigGen_putSigValueId(gen, 'ID-794cb625-1fe0-448e-96ce-ded771beacb3');
  CkXmlDSigGen_putSignedInfoId(gen, 'ID-6a250a79-780a-44e6-9fd4-8f4b8fb6fae4');
  CkXmlDSigGen_putSignedInfoCanonAlg(gen, 'C14N');
  CkXmlDSigGen_putSignedInfoDigestMethod(gen, 'sha256');

  // Create an Object to be added to the Signature.
  object1 := CkXml_Create();
  CkXml_putTag(object1, 'xades:QualifyingProperties');
  CkXml_AddAttribute(object1, 'xmlns:xades', 'http://uri.etsi.org/01903/v1.3.2#');
  CkXml_AddAttribute(object1, 'Target', '#ID-8cd755d7-f32d-415c-bb3e-0800f38dd443');
  CkXml_UpdateAttrAt(object1, 'xades:SignedProperties', true, 'Id', 'ID-260569ab-9e1b-4db3-9c81-48e0c8ad0aa0');
  CkXml_UpdateChildContent(object1, 'xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningTime', 'TO BE GENERATED BY CHILKAT');
  CkXml_UpdateAttrAt(object1, 'xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestMethod', true, 'Algorithm',
    'http://www.w3.org/2001/04/xmlenc#sha256');
  CkXml_UpdateChildContent(object1, 'xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestValue', 'TO BE GENERATED BY CHILKAT');
  CkXml_UpdateChildContent(object1, 'xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509IssuerName', 'TO BE GENERATED BY CHILKAT');
  CkXml_UpdateChildContent(object1, 'xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509SerialNumber', 'TO BE GENERATED BY CHILKAT');
  CkXml_UpdateChildContent(object1, 'xades:SignedProperties|xades:SignedDataObjectProperties', '');

  CkXmlDSigGen_AddObject(gen, '', CkXml__getXml(object1), '', '');

  // -------- Reference 1 --------
  CkXmlDSigGen_AddSameDocRef(gen, '', 'sha256', '', '', '');
  CkXmlDSigGen_SetRefIdAttr(gen, '', 'ID-d8e65384-d2bb-476c-9e04-4113cf7b04bb');

  // -------- Reference 2 --------
  CkXmlDSigGen_AddObjectRef(gen, 'ID-260569ab-9e1b-4db3-9c81-48e0c8ad0aa0', 'sha256', '', '', 'http://uri.etsi.org/01903#SignedProperties');
  CkXmlDSigGen_SetRefIdAttr(gen, 'ID-260569ab-9e1b-4db3-9c81-48e0c8ad0aa0', 'ID-3a2f708d-7ad0-4e0f-b5fb-0ff593e84098');

  // Provide a certificate + private key. (PFX password is test123)
  Cert := CkCert_Create();
  result := CkCert_LoadPfxFile(Cert, pwidechar(aCertFilename), pwidechar(aPassword));
  if not result  then
  begin
    aLog.Add(CkCert__lastErrorText(Cert));
    Exit;
  end;
  CkXmlDSigGen_SetX509Cert(gen, Cert, true);

  CkXmlDSigGen_putKeyInfoType(gen, 'X509Data');
  CkXmlDSigGen_putX509Type(gen, 'IssuerSerial,Certificate');

  // Load XML to be signed...
  sbXml := CkStringBuilder_Create();
  CkXml_GetXmlSb(xmlToSign, sbXml);

  CkXmlDSigGen_putBehaviors(gen, 'IndentedSignature');

  // Sign the XML...
  result := CkXmlDSigGen_CreateXmlDSigSb(gen, sbXml);
  if not result then
  begin
    aLog.Add(CkXmlDSigGen__lastErrorText(gen));
    Exit;
  end;
  // -----------------------------------------------

  // Save the signed XML to a file.
  result := CkStringBuilder_WriteFile(sbXml, pwidechar(aOutputFileName), 'utf-8', False);

  aLog.Add(CkStringBuilder__getAsString(sbXml));

  // ----------------------------------------
  // Verify the signatures we just produced...
  verifier := CkXmlDSig_Create();
  result := CkXmlDSig_LoadSignatureSb(verifier, sbXml);
  if not result  then
  begin
    aLog.Add(CkXmlDSig__lastErrorText(verifier));
    Exit;
  end;

  numSigs := CkXmlDSig_getNumSignatures(verifier);
  verifyIdx := 0;
  while verifyIdx < numSigs do
  begin
    CkXmlDSig_putSelector(verifier, verifyIdx);
    verified := CkXmlDSig_VerifySignature(verifier, true);
    if (verified <> true) then
    begin
      aLog.Add(CkXmlDSig__lastErrorText(verifier));
      Exit;
    end;
    verifyIdx := verifyIdx + 1;
  end;

  aLog.Add('All signatures were resultfully verified.');

  CkXml_Dispose(xmlToSign);
  CkXmlDSigGen_Dispose(gen);
  CkXml_Dispose(object1);
  CkCert_Dispose(Cert);
  CkStringBuilder_Dispose(sbXml);
  CkXmlDSig_Dispose(verifier);

end;
N1ebieski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Czy da się na teraz przetestować kody QR? W sensie link w środowisku testowym kieruje mi na stronę z "Not found", ale nie wiem czy to dlatego, że źle go tworzę czy dlatego, że oni jeszcze nie uruchomili tego swojego śmiesznego panelu...

Dzmitry Lysko
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Hej, mam problem z autoryzacją tokenem w KSeF 2.0 — może ktoś już to przerabiał? 🤔

Dostałem challenge:

Kopiuj
{
  "challenge": "20251005-CR-2FB79E6000-AA301B877C-B2",
  "timestamp": "2025-10-05T13:53:55.1749598+00:00"
}

Timestamp skonwertowałem do:1759730035174
Następnie zbudowałem token i zaszyfrowałem go przy użyciu RSA-OAEP (SHA-256).
Wysyłam żądanie:

Kopiuj
{
  "challenge": "20251005-CR-2FB79E6000-AA301B877C-B2",
  "contextIdentifier": {
    "type": "Nip",
    "value": "5372633951"
  },
  "encryptedToken": "VmhRgdeyZfSpAysKIUTOQskPTVutuIOe6A3iJxYzO5tlCsfeXMrvlRMKos0ZqNTNu3gJpw8Dx6qStzR0d287NUX1OcgxcSbz8f4T01UZ7k0ck3eXkqbHED5ohgDeArRf53u5ctWER/ny2rnTNsNTF+JxWjd2VgpUyaXPWlWozDv5vBSqPX0PRhGkXLEQCyit1fOpht7U2yf54ftPYlg1PANK94oF457k5hjXscQa2z8q0juK6tKB8KYwrxb+v+lk1K6bLn/aFrg6wHyxjdWiGJ8VeTB6t91G1oyyvspD8Mdk2qzW/8x4aaSLq0vh+eisb3ydPd3eLizoICyzqhhh+Q=="
}

W odpowiedzi dostaję:

Kopiuj
{
  "referenceNumber": "20251005-AU-2FB7C35000-BDDF926A91-8B",
  "authenticationToken": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJBdXRoZW50aWNhdGlvblRva2VuIiwiYXJuIjoiMjAyNTEwMDUtQVUtMkZCN0MzNTAwMC1CRERGOTI2QTkxLThCIiwiZXhwIjoxNzU5Njc1MTM1LCJpYXQiOjE3NTk2NzI0MzUsImlzcyI6ImtzZWYtYXBpLXRlIiwiYXVkIjoia3NlZi1hcGktdGUifQ.Eruo0gACWwaOcgjD1Ah3N5MMay-T2u3KMCvIPlCX7Wk",
    "validUntil": "2025-10-05T14:38:55.7799807+00:00"
  }
}

Ale kiedy sprawdzam status:

Kopiuj
{
  "endpoint": "/auth/20251005-AU-2FB7C35000-BDDF926A91-8B",
  "method": "GET",
  "baseUrl": "https://ksef-test.mf.gov.pl/api/v2"
}

to dostaję:

Kopiuj
{
  "startDate": "2025-10-05T13:53:55.7568998+00:00",
  "authenticationMethod": "Token",
  "status": {
    "code": 450,
    "description": "Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu",
    "details": [
      "Invalid timestamp"
    ]
  }
}

Czy ktoś może podpowiedzieć, gdzie może być błąd?
Już pół dnia siedzę nad tym i nie mogę znaleźć, co robię źle 😅

MG
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 46
0

Po sprawdzeniu dostępności auth\referenceNumber mam odpowiedz:
{"startDate":"2025-10-05T16:35:58.489565+00:00","authenticationMethod":"QualifiedSeal","status":{"code":200,"description":"Uwierzytelnianie zakończone sukcesem"},"isTokenRedeemed":false} i kolejne próby np. pytanie o sesje, generowanie tokena kończą się StatusCode: Unauthorized. Czy coś jeszcze trzeba zrobić, czy gdzieś jest jakiś opis kolejnych kroków?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.