Krajowy system e-Faktur

szymek77
  • Rejestracja:11 miesięcy
  • Ostatnio:9 miesięcy
  • Postów:5
0

Cześć, mam kolejne pytanie. Idę zgodnie z logiką webinara wykonując następujące kroki:

  1. https://ksef-test.mf.gov.pl/api/online/Session/AuthorisationChallenge - korzystając z NIP1 jako kontekstu.
  2. https://ksef-test.mf.gov.pl/api/online/Session/InitSigned - podpisuję pieczęcią NIP1.
  3. https://ksef-test.mf.gov.pl/api/online/Credentials/Grant - nadaję poświadczenia do wysyłania i odczytywania faktur, podmiotowi NIP2.
  4. https://ksef-test.mf.gov.pl/api/online/Credentials/Status/elementReferenceNumber - sprawdzam status nadania poświadczeń, jak jest 200 to idę dalej.
  5. https://ksef-test.mf.gov.pl/api/online/Session/AuthorisationChallenge - ponownie robię challenge korzystając z NIP1 jako kontekstu.
  6. https://ksef-test.mf.gov.pl/api/online/Session/InitSigned - podpisuję jako podmiot NIP2
  7. https://ksef-test.mf.gov.pl/api/online/Credentials/GenerateToken - generuję token autoryzacyjny korzystając z tokena sesyjnego otrzymanego w kroku 6 (czyli jako NIP2)
  8. https://ksef-test.mf.gov.pl/api/online/Credentials/Status/elementReferenceNumber -sprawdzam status tokena.

W kroku 8 za każdym razem dostaje błąd: "processingCode":410,"processingDescription":"21301:Brak autoryzacji."

Przeglądając forum natrafiłem na informację, że tworzenie tokenu ma sens jedynie w sesji z pieczęcią. Faktycznie wtedy token działa jednak mam jakiś błąd przy szyfrowaniu. Poniżej załączę kod, którym szyfruję token. Gdyby ktoś mógł mi wskazać błąd to byłbym wdzięczny.

SZYFROWANIE TOKENU:

import java.security.KeyFactory
import java.security.spec.X509EncodedKeySpec
import javax.crypto.Cipher
import java.util.Base64
import java.text.SimpleDateFormat
import java.util.Date

timestamp = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").parse(${challengeTime})

byte[] message = (${token}+"|"+timestamp.getTime()).getBytes()

def publicKeyPEM = """MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWosgHSpiRLadA0fQbzshi5TluliZfDsJujPlyYqp6A3qnzS3WmHxtwgO58uTbemQ1HCC2qwrMwuJqR6l8tgA4ilBMDbEEtkzgbjkJ6xoEqBptgxivP/ovOFYYoAnY6brZhXytCamSvjY9KI0g0McRk24pOueXT0cbb0tlwEEjVZ8NveQNKT2c1EEE2cjmW0XB3UlIBqNqiY2rWF86DcuFDTUy+KzSmTJTFvU/ENNyLTh5kkDOmB1SY1Zaw9/Q6+a4VJ0urKZPw+61jtzWmucp4CO2cfXg9qtF6cxFIrgfbtvLofGQg09Bh7Y6ZA5VfMRDVDYLjvHwDYUHg2dPIk0wIDAQAB"""


def keyFactory = KeyFactory.getInstance("RSA")
def publicKeyBytes = Base64.getDecoder().decode(publicKeyPEM.replaceAll("\\n", "").getBytes())
def publicKeySpec = new X509EncodedKeySpec(publicKeyBytes)
def publicKey = keyFactory.generatePublic(publicKeySpec)

def cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding")
cipher.init(Cipher.ENCRYPT_MODE, publicKey)
def encryptedData = cipher.doFinal(message)

def base64EncodedData = Base64.getEncoder().encodeToString(encryptedData)

Nadal jednak nie rozumiem jaki jest sens nadawania poświadczeń podmiotowi NIP2 skoro i tak token autoryzacyjny działa dla NIP1 i nie uwzględnia żadnej informacji o tym NIP2. W webinarze token autoryzacyjny został wygenerowany przy użyciu tokena sesyjnego uzyskanego w procesie uwierzytelniania podpisem, a nie pieczęcią.

edytowany 1x, ostatnio: szymek77
Dzyszla
Token z kreską? Jeszcze takiego nie widziałem... No i to po zaszyfrowaniu - masz na myśli rozumiem już ostateczny tekst (w base64) wstawiany do żądania? Wszystko, co opisujesz dotyczy testowego na pewno? Nie przesyłasz czasem któregoś żądania na inne środowisko?
WS
DWIE rzeczy pierwsze - generowanie tokena, tuż przed użyciem go do nawiązania sesji, jest bez sensu, token generujemy raz i potem korzystamy z niego n-tysięcy razy drugie - ważniejsze - zaszyfrowany token jest za krótki, musi mieć 256 bajtów co po zakodowaniu do base64 da ok 342 znaki, korzystasz z jakiegoś tworu ("RSA/ECB/OAEPWithSHA1AndMGF1Padding") nie znam Javy ale SHA1 w tym czymś wydaje mi się mocno podejrzane (szyfowanie ma być kluczem 2048 - bit) czyli 256 bajtów po trzecie piszesz "generuję token autoryzacyjny" - jakie uprawnienia ma ten token ???
szymek77
W poprzednim komentarzu coś mi źle przycięło te tokeny. Przed szyfrowaniem: 98B90C459731E69777CF30F1FFC984B6ED28FAB796061908F924C15005C0627B Po szyfrowaniu: a+WR/zLCT6sstXj0P45SXT6rnIr5+hlUVxGHhjNoDN/0ll1Cg/ttP6BWNV4PvKZNUeZIANHs6QnctlWxKOiMO5fFglsYfQz+OaRqfwihTleDJec9g7lBXQSgh8HAPEIPpRYpq7L/+QqEu/mTHi6W5eo+Y1hw/OIExPiJptE6jOxq46vUveaWHDhbXTIgBMMuYgdQudhvehopLBH2f6J5+wyw3uBh3OoEXR3ffA5lZ3UY7ji5HJ0/DfWQSXPxmotpygNE5kLcfmYPb/eEc1VuLpcCDDJvpqnPlf0jE9Bq0F2q3d8A2Y1xq+PlwlGLQ2MU+E4KAL+rRgPiINi5sbzHJA== Uprawnienia daje invoice_read i invoice_write.
szymek77
No właśnie chce wygenerować token raz i potem korzystać z niego n-razy bez konieczności ponownego uwierzytelniania za pomocą pieczęci. Problem w tym, że podczas pierwszego requesta InitToken dostaję zwrotkę "Brak autoryzacji". Zmieniłem SHA1 na PKCS a klucz publiczny umieściłem w apostrofach. To chyba rozwiązało problem z szyfrowaniem bo wcześniej w odpowiedzi miałem coś z błędną treścią. Teraz to wygląda tak jakby sam token był problemem chociaż status daje "processingCode":200,"processingDescription":"Zakończenie etapu faktycznego przetwarzania poświadczeń"
szymek77
Dobra znalazłem błąd. Po poprawkach zapomniałem w xml zmienić NIP'u. Dziękuję bardzo za pomoc. Odezwę się pewnie przy okazji faktur :D
JK
  • Rejestracja:ponad rok
  • Ostatnio:3 dni
  • Postów:22
0

Faktury FEU i FEU-28b - gdzie wrzucać w Fa łączną kwotę? Z tego co się dowiedziałem, to takie faktury to są zawsze faktury typu "Odwrotne obciążenie", więc łączną kwotę wrzucam do pola P_13_10 które jest opisane w https://www.podatki.gov.pl/media/9512/broszura-informacyjna-struktury-logicznej-fa-2.pdf (str. 48) jako

Suma wartości sprzedaży w procedurze odwrotnego obciążenia...

Ale w jednym z programów łączna kwota poszła w jednej fakturze do pola P_13_8 a w drugie do P_13_9

Która wersja jest poprawna?

GB
To jedna z rzeczy, która nas czeka... Poprawki w programach i dyskusje, która wersja jest właściwsza :-) Uważam, że wszyscy do dnia wejścia w życie obowiązku wysyłania faktur powinni zacząć wysyłać faktury do wersji demo i patrzeć co inni ci przysłali. I to powinno być jakoś odgórnie powiedziane.
R3
Mnie też przy okazji zastanawia jak tego typu "pomyłki" później korygować, jest masa rzeczy które stanowią dane dodatkowe, niektóre mają wpływ na rozliczenie podatku, niektóre nie - w tym pierwszym przypadku oczywiście korekta Fa, ale co jak np. pomylisz się w oznaczeniu TP (transakcja z podmiotem powiązanym), korekta? Czy poprawny opis w JPK który i tak księgowość musi wysłać?
JK
@gbbsoft: Pytając zakładałem, że to jest powiedziane (w dokumentacji), tylko po prostu ja nie rozumiem języka prawniczo-księgowego i ktoś będzie w stanie to wyjaśnić. Ale być może się mylę i po prostu ten fragment dokumentacji jest *^&# tak jak cała reszta
JK
Ok, chyba fragment dokumentacji, którego nie wkleiłem ma znaczenie: "W polu P_13_10 ujmuje się m. in. sumę wartości sprzedaży w procedurze odwrotnego obciążenia występującego w obrocie krajowym". FEU i 28b to obrót zagraniczny, więc te pola 8 i 9 wyglądają ok
GB
@Resemble3814: Moim zdaniem są dwa scenariusze: (a) wystawiasz korektę, czekasz na poprawkę w programie (np: aktualizacja), wystawiasz ponownie fakture (b) wystawiasz korektę na zero zewnętrznym programem, czekasz na poprawkę w programie, nie wystawiasz nowej faktury, tylko tą samą wysyłasz drugi raz już dobrze. Wersja (b) jest ciężka dla księgowości i dla odbiorcy.
PA
  • Rejestracja:około rok
  • Ostatnio:4 miesiące
  • Postów:5
0

Witam.
Próbuję pobrać listę faktur przy pomocy:


curl_setopt_array($curl, array(
            CURLOPT_URL => "https://ksef-test.mf.gov.pl/api/online/Query/Invoice/Sync?PageSize=10&PageOffset=0",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $searchQuery,
            CURLOPT_HTTPHEADER => array(
                "Content-Type: application/json",
                "Accept: application/json",
                "SessionToken: $session_token",       ),
        ));
 $response = curl_exec($curl);

Dostaję następującą zwrotkę:

                (
                    [serviceCtx] => srvTEMFB
                    [serviceCode] => 20240207-EX-622B5B71E1-1D930729CF-46
                    [serviceName] => online.query.query.invoice
                    [timestamp] => 2024-02-07T07:07:51.021Z
                    [referenceNumber] => 20240207-SE-B3741C945E-C4EA2D9FA7-E2
                    [exceptionDetailList] => Array
                        (
                            [0] => Array
                                (
                                    [exceptionCode] => 21304
                                    [exceptionDescription] => Brak uwierzytelnienia.
                                )
       )       )

Udało mi się dojść, że przyczyną jest opóźnione działanie SessionToken. Po dodaniu kilkusekundowego sleep pomiędzy uzyskaniem tokena, a Invoice/Sync, wszystko działa poprawnie.
Tak powinno być, czy to jest oznaka wadliwego działania ksef-test?

Wynik po sleep(5):

(
            [timestamp] => 2024-02-07T07:43:47.836Z
            [referenceNumber] => 20240207-SE-63E974F190-B854A82BC7-13
            [numberOfElements] => 50
            [pageSize] => 10
            [pageOffset] => 0
            [invoiceHeaderList] => Array
                (
                    [0] => Array
                        (
                            [invoiceReferenceNumber] => F 002/02/2024
                            [ksefReferenceNumber] => 6012547380-20240206-C0463386E1E8-F3
                            [invoiceHash] => Array
                                (
                                    [hashSHA] => Array
                                        (
                                            [algorithm] => SHA-256
                                            [encoding] => Base64
                                            [value] => dksz32VrkW8a4vAszvpZQvHOYwXVtqfJlamloJ1yJR8=
                                        )

                                    [fileSize] => 2565
                                )
edytowany 2x, ostatnio: pablood
Dzyszla
Co masz na myśli pisząc "listę" i "pojedynczą"? Nagłówki? Dokument XML? Body możesz poszukać po forum albo podejrzeć w aplikacji www, ale generalnie trzeba sobie z YAMLa po prostu wyczytać - jest to męczące na piechotę, ale możliwe. przykładowo może to być np.: {"queryCriteria":{"isHidden":true,"subjectType":"subject2","type":"incremental","acquisitionTimestampThresholdFrom":"2023-08-19T22:00:00.000Z","acquisitionTimestampThresholdTo":"2024-02-07T10:17:25.828Z"}}
KK
Miałem na myśli nagłówki. Myślę, że nie mam innego wyjścia niż przejrzenie tego YAMLa, dzięki za podpowiedź :)
PA
@KaroloKarlo - nie masz parametru "type".
Dzyszla
A już wiem - Ty patrzyłeś na to 'example'... Nie ma sensu, bo to jakieś automatycznie generowane fragmenty nieobsługujące parametrów, które mogą mieć różny typ. Trzeba to wprost wyczytywać. Niemniej, ukrywanie jest dla odbiorców, nie nadawców, więc połączenie isHidden z subject1 nie ma sensu.
KK
@Dzyszla: @pablood Dzięki wielkie za pomoc :)
KA
  • Rejestracja:12 miesięcy
  • Ostatnio:9 miesięcy
  • Postów:5
0

Mam dosyć nietypowe pytanie. Wiecie jak do demo dodać faktury, których to nasza firma będzie odbiorcą?
Chodzi o przetestowanie procedury pobierania faktur kosztowych z KSEF.

PrzemekPB
Na środowisku testowym wysyłam sam do siebie, na demo nie testowałem takiej możliwości
GB
Ja też. Demo chyba powinno działać tak samo jak testowy, nieprawda?
Dzyszla
Mnie odrzucało takie zawsze, a na www nawet się nie dało wpisać siebie jako odbiorcy. Chyba, że coś się zmieniło ostatnimi czasy.
KA
Faktycznie wystawienie faktury na siebie pozwala ją widzieć jako zakupową. Dzięki
szymek77
  • Rejestracja:11 miesięcy
  • Ostatnio:9 miesięcy
  • Postów:5
0

Cześć, odnośnie faktur. Dobrze rozumiem, że wysyłka interaktywna dotyczy pojedynczej faktury i wtedy nie jest ona dodatkowo szyfrowana (bez sekcji Encription przy podpisie xml), natomiast wysyłka wsadowa wymaga szyfrowania? Są jeszcze jakieś inne formy/warianty wysłania faktury?

Dzyszla
Nie. Wsadowa ma tylko jeden sposób przesyłania.
Grzegorz Molenda
Otwierając sesję interaktywną wybierasz czy ma być dodatkowe szyfrowanie. Następnie faktury wysyłasz już tylko zgodnie z tym wybranym sposobem. Jeśli sesja jest bez szyfrowania, faktury ślesz bez szyfrowania, a jeśli jest szyfrowanie, to faktury muszą być szyfrowane.
szymek77
okej rozumiem. A w jaki sposób ma być zaszyfrowana ta faktura? Coś analogicznego do szyfrowania tokenu autoryzacyjnego?
Dzyszla
A PDFa czytał? "Dodatkowe szyfrowanie treści oparte o klucz symetryczny AES i zabezpieczenie tego klucza poprzez zaszyfrowanie go kluczem publicznym RSA Systemu (%environment_path %/security/pem lub %environment_path %/security/der). Dodatkowe szyfrowanie jest obowiązkowe przy wysyłce wsadowej, a w przypadku sesji interaktywnej jest opcjonalne. Jednak jeżeli sesja interaktywna zastała nawiązana z deklaracją kryptograficzną wysyłane (wystawianie faktur) i odbierane (wyszukiwanie oryginałów) dokumenty muszą i będą zaszyfrowane tym samym kluczem symetrycznym."
Grzegorz Molenda
W dokumentacji masz wszystko - rozdział 6. Szyfrowanie.
K0
  • Rejestracja:11 miesięcy
  • Ostatnio:3 miesiące
  • Postów:1
0

Czy da się uzyskać "historię sesji"?
Zawierającą dane takie dane jak na stronie: https://ksef-test.mf.gov.pl/web/sessions-history

Grzegorz Molenda
Ręczne wyszukiwanie numeru sesji na stronie WWW, w ten sposób można odbudować dane w bazie. Oczywiście jest to dobre dla kliku / kilkunastu wyszukiwań, jak masz setki, czy tysiące faktur i wszystkie bez numeru sesji - to ja szczerze współczuję. EDIT: W takich przypadkach masz z reguły dwa rozwiązania kompleksowe. Pierwsze - jeśli baza oferuje odzyskiwanie danych, to trzeba spróbować odzyskać co się da. A drugie - backup całej bazy zwykle pomaga, jak się taki ma. Jak się nie ma, to koniecznie należy zacząć taki robić, aby w przyszłości nie mieć z tym problemów.
ZB
Masz jeszcze opcję napisać parser strony AP i jechane :-)
Grzegorz Molenda
Tak, opcja atomowa, w zależności od tego, jak bardzo jesteś zdesperowany.
K0
Niestety nie chodzi o rozwiązanie jednorazowe a stałą funkcjonalność. Pasowanie strony było by ok, ale nie będę miał dostępu do konta klienta żeby zalogować się na stronę. Muszę na max zabezpieczyć przechowywanie id sesji.
ZB
@kwarc001: jeśli nie jednorazowo to nie ma w ogóle tematu, normalnie się id sesji zapisuje i ten problem nie występuje, może wystąpić tylko incydentalnie, gdy stracisz dane, a na to jest backup, więc... problem nie istnieje
VD
  • Rejestracja:ponad 16 lat
  • Ostatnio:8 miesięcy
0

czesc, w jaki sposób mogę pobrac wszystkie faktury (nie nagłówki, ale pełne faktury) za zadany okres?
/online/Query/Invoice/Async/Status/{QueryElementReferenceNumber} zwraca mi zawsze 0 elementów ;/

czy jedynym wyjściem jest pobrac nagłówki i później dopiero pobierac pojedynczo pełne faktury na podstawie KSeFRefNo?

VD
No właśnie wydaje mi się, że robię wszystko wg tego co jest opisane w PDF. Nawiązuję sesję. Loguję się tokenem. Inicjalizuję kryteria wyszukiwania: /api/online/Query/Invoice/Async/Init i otrzymuję Query Element Refference Number. Następnie sprawdzam status: /api/online/Query/Invoice/Async/Status/{QueryElementReferenceNumber}) Otrzymuję tutaj status 200, ale jednoczesnie Number Of Elements = 0 oraz Number Of Parts = 0.
Dzyszla
Widocznie nie ma żadnej faktury, która spełnia kryteria... Jakie kryteria zadajesz?
VD
Od 1.1.2024 do 31.1.2024 - po zalogowaniu do środowiska demo widzę ok. 20 przykładowych faktur. Jeśli pobiorę nagłówki faktur za ten sam okres używając /online/Query/Invoice/Sync? to również zwróconych zostanie te 20 faktur. Natomiast jak chcę pobrać całą paczkę tych faktur, to jest 0. Mógłbym wyciągać pełne dane faktury po numerze KSeF, który dostaję pobierając FV za pomocą /online/Query/Invoice/Sync? ale to trochę bez sensu tak robic...
Dzyszla
Jesteś pewien, że nie robisz jakiś subject1 zamiast 2 albo coś w tym stylu?
VD
ehh... rzeczywiscie - błąd był przy wybiorze subject - zamiast 1 leciał do zapytania 2 i dlatego zwracało 0 wyników dzięki!
PL
  • Rejestracja:12 miesięcy
  • Ostatnio:11 miesięcy
  • Postów:2
0

Wysyłka faktury FA(2) w pobranych przykładów FA_2_Przykład_4.xml metodą SEND na testowy i otrzymuję komunikat:
Dokument nie jest zgodny ze schemą (json).
Gdzie szukać przyczynę tej niezgodności?

$url = $url0.'/online/Invoice/Send';
$ch = curl_init( $url );
   
$headers = array( 
   'Accept: application/json',
   'Content-Type: application/json',
   "SessionToken: $sessionToken");

$data = array( 
        "invoiceHash" => 
           array("hashSHA" => 
              array("algorithm" => "SHA-256",
                    "encoding" => "Base64",
                    "value" => "$hashCode"),
              "fileSize" => $fileSize),
        "invoicePayload" => 
           array("type" => "plain",
                 "invoiceBody" => "$invoiceCode")
        );

curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data) );
   
$resultCURL = curl_exec($ch);
curl_close($ch);

Dzyszla
Sprawdź, czy masz poprawną długość hasha. Na pewno XML zapisałeś w Base64?
PA
Zobacz, czy masz trzeci parametr na true w haszowaniu: $faktura_hash = hash("sha256", $faktura, true);
PL
Tak, @pablood - brakowało trzeciego parametru. Teraz wysyła bez problemów. Dziękuję.
Dzyszla
  • Rejestracja:prawie 3 lata
  • Ostatnio:około 15 godzin
  • Postów:106
0

Po dzisiejszej aktualizacji zapewniają, że poprawili (zgłoszone 8 grudnia):

  1. Brak możliwości wysłania i sprawdzenia stanu więcej niż jednej faktury (interaktywne)
  2. Sprawdzanie płatności ma pattern niezgodny z generowanym przez metodę generowania identyfikatora płatności ? nie da się sprawdzić wygenerowanego identyfikatora zgodnie ze specyfikacją.

Nie sprawdzałem jeszcze, niemniej.

edytowany 1x, ostatnio: Dzyszla
Grzegorz Molenda
o co konkretnie chodzi w pkt. 1 ?
Dzyszla
Był błąd, że jak się wysyłało interaktywnie dwie faktury, to potem nie dało się dla obu sprawdzić stanu - wywalał się przy drugim zapytaniu. Chyba już wcześniej to było poprawione. To było zgłoszenie słane zaraz po tym, jak dokonali aktualizacji.
Grzegorz Molenda
czyli chodzi o to, że system miał ze sobą problemy, tuż po ich aktualizacji - dobrze rozumiem ?
M3
  • Rejestracja:około rok
  • Ostatnio:11 miesięcy
  • Postów:2
0

Cześć,

Jak na dokumencie mam więcej niż 1 płatność, np.: karta i gotówka. To jak to powinienem wysłać do ksefu?

Dzyszla
Nie da się ;) W ogóle to masz na myśli formę wymaganą do zapłaty, czy zapłatę wykonaną? Wydaje mi się, że ten drugi przypadek to nie ma sensu opisywać. A w tym pierwszym to chyba mało kiedy jest tak, żeby dokument wskazywał z góry na dwie formy.
R3
To nie do końca dwie różne formy płatności, ale niektórzy klienci na wydrukach faktur wymagali aby w sposobie zapłaty widniały dwie pozycje przelew z różnymi kwotami i numerami rachunku - chodziło o faktury netto w EUR i VAT w PLN. Teraz pozostaje jedynie podać dwa rachunki z nazwą i opisem bo nie ma w schemie możliwości zdefiniowania waluty rachunku bankowego w dedykowanym polu.
Dzyszla
Ale to dwa numery konta to ok. Ale dla obu jest przelew. Rachunków możesz podać i 100. Waluty wprost faktycznie nie ma, ale to można spokojnie w opisie umieścić, myślę.
szymek77
  • Rejestracja:11 miesięcy
  • Ostatnio:9 miesięcy
  • Postów:5
0

Hej, no więc tak pokornie zastosowałem się do dokumentacji.

Wysyłka zaszyfrowanej faktury (schema FA(2)), w sesji interaktywnej wygląda u mnie w ten sposób:

  1. Tworzę klucz AES (256)

  2. Szyfruję go kluczem publicznym

  3. Tworzę wektor (16)

  4. Używam tego w sekcji Encryption przy uwierzytelnianiu za pomocą pieczęci

  5. Koduję fakturę (SHA-256) i wyliczam skrót

  6. Nie zakodowaną fakturę szyfruję niezaszyfrowanym kluczem AES (tym samym co w kroku 1) korzystając z wektora (punkt 3)

  7. Koduję zaszyfrowaną fakturę i wyliczam skrót

  8. Wysyłam request PUT https://ksef-test.mf.gov.pl/api/online/Invoice/Send BODY:

     {
     "invoiceHash": {
         "hashSHA": {
           "algorithm": "SHA-256",
           "encoding": "Base64",
           "value": "BlpeWXqXFsSam+NnJG6i2i5BIbP4SZ7DeH1jE16eNdo="
          },
         "fileSize": 6168
      },
     "invoicePayload": {
         "type": "encrypted",
         "encryptedInvoiceHash": {
         "hashSHA": {
           "algorithm": "SHA-256",
           "encoding": "Base64",
           "value": "XMkmCnMeAX+6nwCtz7K1IvJkF27PhoxfImdGOVMrCtE="
         },
       "fileSize": 6176
      },
     "encryptedInvoiceBody": 6vNxUITRD0kXSxQIBDF2mJwRCPCsjwi6kqR2I54Du2Hwx268c9RX3AuwOlfO8FkqNSEfBhl12A1tYeaaOoKQh4zkQ5UHia+9fzPGQKIbInHqCyLFB6EiP3Gns24FE8I3PdliN9gRkwM8UFM+92oA8tcFuZw41vzoBJrrkZeLF5zzDgD5is9AC9WvHz5yjIXrOsBSWTFenAGr4qxUh6OrbpKOTxcRrQnIlarbuCASQlQENHWL3ktYae2z0WLpPB5iZavoCCMvJvdgfSGV8KrvkaijdiUiqHJ8GUj8ZLPlGWprsasvr2I7OQ2GCAl8rCCrc4RqQXzZ9POFBbIELP8OeZ2gNOgcXB4ctZqfhgk/proDQLTFRopqXnUfeg18fUhGHhNH1y5rI/0++vEC5h97c70U7zct4XGTEu1KfJgCFNlZE25v/pctFpag7LbhSANSNrUUvN4ZIOzEMg+475NS5bVVkNleI3R2WLll5BZjq0tfzklb6rjEHGjEjFcP2Em9Q4ZltSAuUPgulpjb5cXdh6IF9fOIa/tlphldXpWaZ3f6ChyyrqU1dYRXWspF130f0QnALY4hsPC9HkuvCMPKfnR8fMigkWXb/gwg1/3AHzQjEIjgx74jt2s8duDSybI7lGPC+YN26WSEx1A/mpRz/EDqfjdZ4nKwwaf+H5YObU7cODEUycZiHsSzlWNEXTd9Z16czuD2hn68XPkXfxZ0TmetEitiBu6IZvR6RydNjjjBSzS6NBTqPdKBj1ob7USlACa6u7Qr1SEgM39N4l8i/TcrNsFtrNnwLf/06horIUDVXk9EW+N5X14uaYWNm4ZEudrsUvx/4PCSJXLHiL3CKkJ6v+afssFxyZUeShoN90YYRSHwdbScaX4v0GYongO3XAjekV8Ew9C4YLTEvTHJYghljOpB2RBAddMqla2MZB6oJ7D5kiWwq9Ilz+KJo0Lf4O1vXGxLOR6ucDFt3dk0b3W7veyDTU4EdvQomwH76nhcBKapx+tLgOyP9YDapIuN0f+UMf85wE3QhvdJeNr2hSbeOq0aNB/Q3dz/wNlzkmYUC2xdX4Mj6YCuPkxZRnGfinhYAbgNVGe1ovHOPduQCFZrzz18OYT3OxYScGBiebzPNIFw1/DNOoCrpqwKSuPzomizpmjLgDQx1dVKBHfffY1Eezd5cnv6ahnydLY5gP0lZ1rywCl/IcE82VCNUH2tsIldz3t38VGuJbALOXK1bKsbYduQ0qwQLvlOHMPKmJWY5TdL5QhbrBSzvWR0GsftkQ52VbdBxh+iklNNSLwWp6ZpK7PeGtv3eXhLCxyjP6thKiVB/xFRcqd1A1wyOUhchnyGcKEjoFKzUDmDFIQc+3O9geiU/8TtFAWjlIFdUDX4/pr+IwuKi+bp1E45iUlKZeE2scshNOkznqZgXWI+F+5HUK6cQ/jljBLQWipon3mmElGIEvcoWSt60KDn+xpD+Nr2o64fFw2mbnD/FNMELVNvm7Im2TGru+JE4dCtjX6NXPR6UL8ofXU4SLgBVtRDU5Cx9jQx8PQ2H/FlV42tDUThlupSdZrfss6LMpKN3VCA9bAD2BDLYIn5XtsxyZRCG/Wk8EMkWxJWT4PaTF+vbs6JEphvwufweMmFaN9VRdQNuTvO+cyFybr1wPsyhqZPBfbsGL5CkiTDyz33ZWqLpQhuv6u76uvJl1Qh1VDmDLw8JxKtFfs17CjENn3Xi88F+gaxjGhJZf554QV0JBM1oYgnUj69BzrYsz6l1D0EZ/yjRJ6k8pzQ+PDOkQCWhMA9TUB5gGqfnuXwraZCz9fYjo/RfTq1JpwVqjeEUcjRYSarWrB7+9Qz8cflVjhBpUKSTptzuKpztYQ2F3Z1P6WxJWmKH4Ho+G2p/FoC8Vp2xfk8XxYRKLID6NyY6SV/JgIQL8vJyQ9PxuwBGZuM+6VcUY+m7dH9mm6gTsFc8Ihcphc1Z6LBcqxeDl17o1puMS2o19+EkpS8GcXWmhfTvYRp+Y6qsFJLH1r6kwmp7teBAtNQldUqIudpoQqbz02YJYsvFqjjGMgPS5HIeaR3A0jjgBUUQrmBSGlAseZIAKB7gv9s+FG4nYg2p1O8WTroA7aelmO0uJt6B5usYS4csehfLZTOKnOplSHYF0fl4+n2MmfspWTv6Sp3ye37lXS/yH1yZ31/yYreMvjVG4F/46gdRu772RM1qvticLEQ5ZK9su5/B/9I72o/55BYxWD+S4Hm5UxPkj3lHv5fMoWHNMHJpTcUnl5+MkQgGZb8kiK5Anv4+miQKk3WMj1SVS47Rf7ypCqhNtvaAbuXY4Sm1txmXPjs8CKnxSkgy5inWYTuVtdCVlqVevTKtwZZ6kgXyeUuzYg5aeK/yds4Ztc9F7zQg+1473viRxiEr7CiIlU0HV0Hr99YPj8Xd7JrBffY4zScAgNqLGgjWfrp17ihhHniYt2ZRY5sJj62a2SqkSTrrQvNiL483FdKInksSyo14XXLWHu5DSICtk5czep5rAUdFX0m/JMUsdj2QgwBsPgKXAaId0M5eb4xRFW9antDjC/XYSuEXVSJcu2oa3w+caQXIfMmpsFK7AVG7C1xV267UuwWmbbqNW2s77Drqjf49PJlXJEvgMoPs1pkHUxx6Zx/chCQxYv8v5bD47cYOWUfg9fP2NHlrW/21/yxhC9LeiXPUzHR/9LMOj/wHG4Xi9nmyMajJlpPJO5kwFR6K7dUsFaaiw9e3ot97txrtkGiIyu/uhL8fDgAVwu5e6KC0nmtgj8WsiL6hOIVqdmSOJiitY0DYs4E0LV2zFH4bpB0O4rS05IXqbtWfOTTzizHjLwIrtzAy9AhvthgE8IiJDwQ0iPTeLz4FC/5JVTrPHFTLEW4+QHpxcoJylLeaqGReT0ofMQ8xYuV03sFRlj+bIFLvMgUOE4q+nSHHN1JMzP25OrH03cbgzEz2eCADIromSTgaA3TOk25v6LFxX3DOCzs4BYoBJIZf25EhcLhjoEX60xlYyXEdp0e4iqnHtWowU3B1S9NVc4mD/vIFNpF3NFTx+iG3+8nvc14UJsR/oJ/IEgxL0AHnUSIoALsd7YEJwIt57m6z3U/7rA0ktquahxD61aBFPBIsUWFUHJXQrLURGU/Vx7Kpvd1pofetoiWxhe5A0iddBz2Mwdy/O2IBulzxLJzZffm/ozFhWXFd0WTY0lsAbt5mtXDW2tlnRiPLbrzNJ6RDj8W+2lGX/ayXmBmLg8zMeCnXn3QU7LewkPYP8hclVBwah0jk+75nzoKpGGGuWDlu/1Oty2lr/aH2KsDifDYhHuOAOT/3tN4gueI/9Kj1c+ljLWmBresk7zq8XNafdXCwE85X2FatCubwXDytfAVh9YpFocAhOJG3k3ZGbm3yo0V7QcsBvscGIpEHDpYQVBsm+QD+TYob/zYDddjaTh3TKWk63DiEvquTsE4mVRt+rUOKFPaoKnPBZ2+jkpRmZe0xd+af68VJuuoQLU8ozn2qMTo49tP0p15NVdzUpzU4m1IQet8o9J18IISv4eDLtcW2Qr4YuB47kS3VG5/s9ylOBXtD4ghyIX1WS4mpP3oPB+9yi5yTrMAmSusTuV7YI0eguTRnCCmr1meW2/6GJ2dei6xMiFeAZncU7QD1nbkj+lL6YqFpBgB99QM90wbw7TAxJUc/PmJcfVSj6VG8mUjZK/5tVM1uMhtpFulg96VzyBMfl+BNuQhRKHMHXoXlMvzxSnaC5P+XTRGDxTAANm4/BlzGHEwCmMTEhiTvQfRcEOA8SVKF6xrX88YEE2ZlQAuNEP6/IiOILwRl3RbU2PnLAE1JYJ/NfB+E/tvcnmAIOPJ7USme6Xyeo9i+O/D87yc7ujIaC+shzNQBniNuYPM9Jxg2zDQame/0fVmowpqIVetMDqAXQxIlH+FqhnNKz5X1La9XnWoUN5eVeerJBD15UO/OmIZR0Sg2KQ4fHsm3HlFYQ4oYeDQf2DguEcz66ooNF44YH5BBj37z+yJYoqvYhxpIPAH5fgy9o6o387gIxYJ0SsqEY7bYUZixCYoggkkdTGk290m+TzgzzQ+fiITWJO4nS+9zPHDaVUMem8uuCBN3PSxUXjT0JqspKfBlpHw9rwoLfig5W6O9ALIwTALQLm2E/UuOSodenf8ndyoEjwbt6U75Z4eABdW3lIlYbnqdydAB/Rd39Qd53uDIZ1cbq60iL+mlxNuMt1oAZz5ONq9I7u9I+kvUxpLi2V8+ZzG2SNv+NWUoqoDqKSOVpTW7JwniN2EY/xQeuW5/NBAFVly6T+XfK+0PsHJ6c+TTIzD4qd2LBqWQWldzMd/uP5oNcCoRVNTvqPb0B8CY3zPWq21cyiIhXHqvK4p6daXY+neNIYy0qMk8EhVE6NNbs/fAAxFCRSKl00eLnnOrHxhlpgXoJkWITTZ726IxAB5sC6Hwp9nDcTEdjCAM4DM80OBUYLRAOLV29saLf+gF99t8IQtk8cFLBbtFJEA9SqI2qCQ2f2scNOWUH4C93KzN/VItwKHCa01dXjHb/JrDE0aisgQ+So/owhM4uWCOkKYOt34WoGLEOosNDD0EYLuVBr6sVgKCSQEeswM93D3iaOWIYom11Nb1CL50bXKF8jJ19UM5gsxHbYtw4OcRubHi8qnzPz0SwatfNxO3ZJYW/vhv87dLGh1vHycBI00ja0PtZZ+yL+VOGf/DHas6qkJ2vw88QWZOfOPMnlIYUFSiy1iOe4j5ssTM9uRH0lC7lF4c+joWoPT7FPgw/+QabKZYUzc/0nWdbrbmE/L2QRpwnwYNF4LCvVfz4qjv8gd+u18umv9VATKLCec+wynTUVD9vOfUideD2/gnXYPMBcUtcM0xm1jell38tnIC2oU/p7UrG5tFMlpfnjRz7lDucAsVtVLPyW+wq2C5+FJ7rXi3tmMQ6yKSRTdarAR4bD0WAPgqPXTG3T0zycvhTW0Z/Nk0bfaBLCx1i/LTGV+STx6A4Pe8iWoifkPtcP77AOIq3OCyAQiH0vZJucYLWgdfiYoUPC2sxwlFSxuYE/vp6nxjYsH+py6YWRqWSYfU/luVdK3i6MWcdrlpUE/zUlNdSVkm6Pbshm5z1BYiBrip9XameYBpP5ieufV8cVq214UnIpQW0t7LSpDuPfkp0/wu1waq2Fntq2JOBM3QsdGyJ8dslhFM5K0x5LFQhpYIBqUtXdRqcjyH/em65Dx03kT93c9AXJHWGMnYcayIDarcrOz6gpeeQCfCE02+I6lNGs0Aett2i3BkjoYekehKIWBMY89qX1A82UjMoAzaccViqTFx12pjIjOasxR44s5gl2wxdRYVZv+mlP8/WXMbjamGzmGQboialMqNhL+LzFAX3wIBGsal12TWK48u7E0oxL6ixzFm+2uG1wGHMGYB4Bku4eCTstkoMWXm4aT5QrF7QvCpSUibCDUYG99l4AKGjzhBgOIb6DbUx6+17q2osdinn09F48jx5rdZleT14aPYS2AeTo544GId+xrO6TK+0ZNz9H8QerNaPMwXsENTwd/1ru9M1J9CFtY+tIa19LThpmHQ1f5oGqcM4Z2UOvfD9KOi92mkbuwSjmWFwJU9ikQ5VLCec4zPcaAegxmadsdHcStsrhZdS4IkiefVgjg/Q0hyfkapcj6e0KadOm5W5Xx5KqrEnARJQK5iAIzwtyYMys6cR+bDD64plLHwFoBtRPgABb0usRcC1x+03XhMff+9sEo9JiVIBMoPHjojOi7DaRjTUrcQ4WyMXE/Y5DdMiX9Au5x71pfbVlCR+EZR9HMXZz8MINJY1gUD9eUmiuznAGt8FEoDc55CiwK0Jqe5EHlfaLeJn1NW4tWBeAZKgpr6l1ze+LZbYx5iWt6gWuP+K+6F9I1E1M4QV+ardaR4QD9GxzS9vnNUDT7gjsAzlQnxiSqgPIS3kq1SMSVU0HmvnROrrZfeQjp9A3Lb+N+jRga0FHMoaIqDApZaKVYVft3Hu0XPJe2K/gFJLSBf7/Q/bTtoz1dSQoU5dcoTMU97FAtG0tpgwl+tDCXMjDEyEWZRnxhAkLgTuIt5PmDVqxN8D1nBj813MqHlFO91DnLzztgiPVvlXlDHZ44mEPK5NT7fvJiys4JXwUipaXbcmsop8jV6V6Ea58QxipJsErxyUDxe8hB8QzouOXQty7N7nRQe8rEzA7Eqk7Z+tCHp1D6hH7MhfzieGtRUMcWy6Mpn5r08U791Pi/LENe6jmdiuaf/P697y4Y0+GihlJC/HptMLwl1LZq8/mioogK4vae/dgCUP0Sx7mZncLpX37g12pQvFJHXS5jkgoIzWMYW30G2MCQEiMVV1DTxQ5NTosG0DQ+BAC8bQZmV/sf4eHlk7E557Em9MJW+qxREHSfoSYHVYytU1NmlFIN46DvPqLeC7AUWOBE34onAypkUi8de2x2FKFcPReb6JwFdQuTrezEzIaRrFC5iSzj6tByd/3qR13N3fsMcADHReFzFNpQSuabEgJUUBBb++zNIGc3v6w1164l7OUYKWb4/nxAfs36Jjiu0n3Lbp/4A0WIVcEAPVOjebU+5SgA3M1X1T52T8bc/A5PbhOvYXP6XsQSrlM4ihsBNA7l7gtckJay3bK9KSkc3et2OyZfBUXvHQlwYMR8k6MzGwLAeckj0Jd07cG5FSU4K34Qgc7j2ibxJrbcaoVr39dH/Na/xTBE1sCBZ+hC72X17VD/moA+qaxu13xzj+gtEFSQ+JbUlN1NomFvasDa2qiM3xhntpPMQ6wfHaFp4Kky6uGRWUmKZeaD2nPNWV0j/rUFbaOs9F38O3JEd9D6coExyFZhHRMzKItcckt2oxekNjb9G4BH8IrrsMcMim03x0ugG0+3DQmlINLsorVvGKLGetu/rYwFoqtJlMhQF42/j5Owuu4RZG367K+U+9unFO8xJ3RcMl6BXNGb+mlBrliavCddAarG6wPvkREHEFCdIF+8XLHJ/qANXXsDvjcnBWaeUIAGy1i/95weEoA2/ao/zkDv+esBTPBN4kxu4YdHIV4cBBDJ/V6D5DwMuqxWzU9mFUTTLWuiyHWvVwXzD8RQ7G5VQ/q0ey4yGHvgfYXJWdnSZagrnyf/QyrkiZE/HnZeDX03vImWAbTcaJEkdj1rvZo+GivY2NMGq4y/P7F6+jdcO6vxU8zUtNYWnQO5tDjSwkrGq5Slh41NgU9vwHk71FQfgGlQeLXEAhOZkw8uYFi5c/H3kwSg4HeduzXdz1zd9F2SmAePsQjNvVZTKMSSApP3RhJBvyBhWD/zFdFcPcxkwr+xAyr8R9e4F4CN5ZN54n+AUGgud1fUQODpvlc1Wn8FbtKw+PJ/tDAUKQ2crvdLNQlhRkn+o7gXDX080E5Tnyg4oJ8+7hvHur115ekMSvpEvlpTD/ZTUI7cuIp8/nRTS/onurIf7S9MqvXooThgt5pTidCBYwAOY5vuWzJSCdVfjiA7EsQcirfFZ3Hjs8tGj+oyRVeMqcFa/3Htyc0KvayxRCS6dh5WoOnzvSMzh+8G3QK4aSgjvOHrsZlfF+yNzM22n2b5Hjj5/PFUq1bskjiDtC8TDuIyy0lQm2yP23QPBB085gUdt1YzouYJlq92Zhrz2XzMGXz7xt84zl2pFjFJugp3tBrSNa9rcErffCyW0fhmSouXfXig51Q8Xsi47bM8xshbO4mWe4y94UyOnxBJEajhjPw6JFRCWN4QJuwNOgeHwdGB8fW3c1wLldkHIvVCQAXgC24YxB+4UCQxqjzkgAUgMHg9wFoN0Uh+ILi3KCqg9Qne/12Dfpv3Kw6BEQdcDMwhYBOFFRjAOlAMYwRcrUVmgVdLZRdI+cKVMGBoC+V3WQXExDI10SUBwuygy23GWZsDHl2dpUytaVXMdO0Gy/kYBa7yb0CTOd/OXbvFQh0POotUYvIgFaMfOwAAwNMjU+LmB9ZiBWPWNZGfgoMy30r88VDCkwFGRaR/fPpavw40IicHjB4jDvOFhpLCSl1M/738NjXzeO7GS2QHkX7vIqN3cYJ/vS9KnUh+tOp80j92CzFkZPDVkei5GZvENiTzVMizOQ5DC428GEq/eJB7o0ZEEpNsQ/HtSPMAtqs4MXoEH9BKTu+bM0zs0tmsXT8WKlWFLZlBCm4YD6/ptggVONI04G0D1thWUMdJohSMMc7X5hXhwABSiSeIBX26RGGe80wpXK0Ab6jTDFXTQb24VRpbip/uiPYggfOzWvA=
       }
     }
    

No i dostaję bardzo konkretną treść błędu:
{"exception":{"serviceCtx":"default","serviceCode":"20240209-EX-06E00E2301-17513611BF-4F","serviceName":"online.invoice.invoice.send","timestamp":"2024-02-09T13:35:28.875Z","exceptionDetailList":[{"exceptionCode":21001,"exceptionDescription":"Nieczytelna treść."}]}}

Ktoś miał podobny problem? Co robię źle?

edytowany 1x, ostatnio: szymek77
Dzyszla
Nie masz w cudzysłowie treści faktury.
szymek77
faktycznie, nie zauważyłem tego. Śmiga, dziękuję bardzo :)
WJ
  • Rejestracja:około rok
  • Ostatnio:9 miesięcy
  • Postów:8
1

Pisałem parę dni temu, że zapytałem helpdesk KseF, jak można się zapisać do grup konsultacyjnych. I dzisiaj mi przesłali linka do strony, na której można się zgłaszać!

https://www.gov.pl/web/kas/zapraszamy-na-konsultacje-w-sprawie-ksef

Dzyszla
Dzięki! Tak to zorganizowane, że do MF to przyjadą tylko ci, co na miejscu :/ Żeby to cały dzień czy dwa były, to bym chętnie na stacjonarne się wybrał.
asoio
  • Rejestracja:ponad 2 lata
  • Ostatnio:3 dni
  • Postów:19
1
Dzyszla
A to Ci nowość - zepsuło się już przed aktualizacją! "Od 13 lutego 2024 r. na środowisku przedprodukcyjnym (Demo) i produkcyjnym Krajowego Systemu e-Faktur obserwujemy sporadyczne problemy w procesie uwierzytelnienia spowodowane wydłużonym czasem odpowiedzi kwalifikowanych dostawców usług zaufania. W przypadku zaobserwowania problemu prosimy o wybranie alternatywnej metody uwierzytelnienia oraz zgłoszenie problemu na info.ksef@mf.gov.pl" Skoro problem jest u dostawców, to po co zgłaszać w KSeF? Nie wiem, ale się domyślam... ;)
Adam Mańkowski
  • Rejestracja:11 miesięcy
  • Ostatnio:7 miesięcy
  • Postów:1
0

Czy w korekcie będzie dało się jednoznacznie odnaleźć pozycję korygowaną?
Na korekcie wystawiamy dwie pozycje. Sprzed korekty, z ustawieniem znacznika "StanPrzed" oraz po korekcie. Co będzie pozwalało jednoznacznie zidentyfikować w każdym przypadku, że pozycja po korekcie dotyczy pozycji sprzed korekty? NrWierszaFa? Teoretycznie NrWierszaFa obu pozycji powinien być taki sam.

GB
To zależy od drugiej strony moim zdaniem.
Dzyszla
Właśnie nie. Zgłaszałem im to kilka razy już, żeby wzięli pod uwagę i dodali UU_ID_korygowane.
KK
  • Rejestracja:11 miesięcy
  • Ostatnio:8 miesięcy
  • Postów:1
0

Witam.

Mam problem z wysyłką wsadową, którą próbuję zrealizować w kilku krokach:

1.Inicjalizacja wysyłki wsadowej (/batch/Init) - otrzymuje odpowiedź z kodem 200 i adresem do upload'u
2. Sprawdzam status przetwarzania wsadowego (/common/Status/) - kod 200 oraz informacja "Sesja wsadowa rozpoczęta. Komunikacja otwarta"
3. Pod otrzymany adres do upload'u (/batch/Upload/{ReferenceNumber}/{PartName}) wysyłam zaszyfrowaną paczkę faktur - odpowiedź z kodem 200
4. Później finalizuję wysyłkę wsadową paczki faktur (/batch/Finish) - odpowiedź z kodem 200
5. Na sam koniec ponowienie sprawdzam statusu przetwarzania wsadowego - otrzymuję na początku w odpowiedzi informację "Zakończenie etapu autoryzacji procesu" a następnie błąd: "processingCode":416,"processingDescription":"21305:Brak uwierzytelnienia certyfikatu."
Sprawdziłem ten sam certyfikat np. dla sesji interaktywnej i działa. Ktoś ma jakiś pomysł czym to może być spowodowane?

Edit 1:request.zip

Edit 2:

  1. https://ksef-test.mf.gov.pl/api/batch/Init
{
    "timestamp": "2024-02-12T10:08:44.834Z",
    "referenceNumber": "20240212-SE-3A433ED969-D1C12C5FEF-91",
    "packageSignature": {
        "packageName": "invoice.zip",
        "packagePartSignatureList": [{
                "ordinalNumber": 1,
                "partFileName": "invoice.zip.part1",
                "url": "https://ksef-test.mf.gov.pl/api/batch/Upload/20240212-SE-3A433ED969-D1C12C5FEF-91/20240212-EA-3572222A27-A8EDF27874-93",
                "method": "PUT",
                "headerEntryList": [{
                        "key": "Content-SHA256",
                        "value": "aeFrVjzE7yKT8T0jGdRCCZkuuqoE3PCKhcyKmIo/Vx4="
                    }, {
                        "key": "X-TargetSrv-Name",
                        "value": "default"
                    }
                ]
            }
        ]
    }
}
  1. https://ksef-test.mf.gov.pl/api/batch/Upload/20240212-SE-3A433ED969-D1C12C5FEF-91/20240212-EA-3572222A27-A8EDF27874-93
{"timestamp":"2024-02-12T10:08:45.264Z","referenceNumber":"20240212-SE-3A433ED969-D1C12C5FEF-91"}
  1. https://ksef-test.mf.gov.pl/api/batch/Finish
{
  "referenceNumber": "20240212-SE-3A433ED969-D1C12C5FEF-91"
}
  1. https://ksef-test.mf.gov.pl/api/common/Status/20240212-SE-3A433ED969-D1C12C5FEF-91
{"timestamp":"2024-02-12T10:08:45.344Z","referenceNumber":"20240212-SE-3A433ED969-D1C12C5FEF-91","processingCode":310,"processingDescription":"Zakończenie etapu autoryzacji procesu"}
{"timestamp":"2024-02-12T10:08:50.371Z","referenceNumber":"20240212-SE-3A433ED969-D1C12C5FEF-91","processingCode":416,"processingDescription":"21305:Brak uwierzytelnienia certyfikatu."}

request.zip

edytowany 4x, ostatnio: KaroloKarlo
Dzyszla
Ten podpis sam jest jakoś inaczej zrobiony - wg XPath, a powinien być raczej jako Enveloped... Ale skoro na online przechodzi...
KK
Czy przed /api/batch/Init powinienem robić jakieś uwierzytelnie tak jak jest to np. przypadku sesji interaktywnej (challenge a potem /api/online/Session/InitSigned) bo robiąc w ten sposób (używając tego samego klucza AES i iv) po sprawdzeniu statusu wysyłki wsadowej otrzymuję inny błąd - dotyczący "21217:Nieprawidłowe kodowanie znaków." a nie ten, dotyczący certyfikatu
Dzyszla
Nie, tylko te 3 metody się wywołuje w celu przesłania: Init > Upload > Finish.
szymek77
Mam problem w tym samym miejscu co autor posta z tym, że dostaję: "processingCode":441,"processingDescription":"Błąd etapu weryfikacji wyników podprocesów przetwarzania faktury"
Dzyszla
@szymek77: to znaczy, że masz błąd w fakturze. Sprawdź dokładny status w interaktywnym.
RA
  • Rejestracja:około rok
  • Ostatnio:8 miesięcy
  • Postów:3
0

Panowie
Serdeczna prośba
Możecie spojrzeć gdzie jest błąd
Mój kod

  $sInvoiceExample = trim($sInvoiceExample);
  $digestSHA = hash('sha256', $sInvoiceExample, true);
  $base64EncodedSHA = base64_encode($digestSHA);
  $fileSize = strlen($sInvoiceExample);
  $base64EncodedContent = base64_encode($sInvoiceExample);

$requestBody = [
    'invoiceHash' => [
        'hashSHA' => [
            'algorithm' => 'SHA-256',
            'encoding' => 'Base64',
            'value' => $base64EncodedSHA,
        ],
        'fileSize' => $fileSize
    ],
    'invoicePayload' => [
        'invoiceBody' => $base64EncodedContent,
        'type' => 'plain',

    ]
];

    $oConnectData = json_decode($this->InitToken());
    $headers = array(
        'Accept: application/json',
        'SessionToken: ' .$oConnectData->sessionToken->token,
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://ksef-demo.mf.gov.pl/api/online/Invoice/Send');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_PUT, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestBody));

    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
    }

    curl_close($ch);

I teraz tak
Skrót jest prawidłowy, wielkość piku jest prawidłowa, faktura jest prawidłowa, token jest prawidłowy
Odpalając skrypt na swoim serwerze cały czas dostaje odpowiedź "Nieprawidłowe żądanie."
Ale podstawiając wszystkie zmienne i testując na stronie https://reqbin.com/ faktura idzie normalnie do KSeFu
To samo testując przez SOAPUI też idzie bez problemu do KSeFu.

Grzegorz Molenda
Jesteś pewny, że chcesz to wysłać do DEMO, a nie do TESTu ?
PA
CURLOPT_CUSTOMREQUEST => "PUT",
WS
ja mam trzy headery ('Content-Type','application/json') ('accept','application/json') i ('SessionToken',cTkn)
MO
  • Rejestracja:ponad 2 lata
  • Ostatnio:11 miesięcy
  • Postów:6
0

Gdybyście mieli możliwość zadania pytania na rozpoczynających się konsultacjach w MF to co byłoby dla Was najważniejsze?
Pomijam pytanie o nowy termin obligatoryjnego KSeF :-)

MO
Ad po co jest UPO? Przewijała się informacja z MF, że nadanie numeru KSeF oznacza, że faktura została przyjęta do KSeF, ale formalnym potwierdzeniem skutecznego przesłania faktury do KSeF jest UPO. Moim zdaniem UPO jest redundatnym dokumentem, na dodatek publicznym więc jak ktoś chce być świętszym od papieża to zapisuje id UPO a w razie potrzeby pobierze XML/PDF z KSeF. Pomijając nikły sens żądania od podatnika dokumentu, do którego organy kontrolne mają bezpośrednio dostęp.
MO
Ad system nada nr KSEF, ale w rozsądnym czasie nie wygeneruje UPO? Ten czas może być bardzo nierozsądny, zdarzało się, że KSeF wygenerował UPO tygodnie po nadaniu numeru KSeF. Więc faktura jest już dawno zaksięgowana, okres zamknięty a wciąż nie ma UPO Ad czy sesja->faktura->sesja->faktura byłaby problemem, czy nie Byłby problemem. MF od początku tępi takie postępowanie, żeby nie powiedzieć banuje bo proces autoryzacji i nawiązywania sesji jest dość długotrwały/obciążający zasoby, czasami wyoutsourcowany więc sesja powinna być wykorzystywana do procesowania wielu faktur.
MO
Z cennych rzeczy warto odnotować zapowiedź API typu "health-check" aby sprawdzić dostępność KSeF / wykryć awarię. Jak rozumiem w połowie marca ma być udostępniona specyfikacja techniczna do wysyłki faktur w trybie awaryjnym. Na pewno przydałoby się więcej opisów, różnych przykładów, pełnego procesu/workflow
Dzyszla
@Morek - mogłeś posta utworzyć z tego ;) Albo nawet kilka, żeby łatwiej było skomentować.
MO
@Dzyszla: chciałem zachować wszystko w jednym miejscu żeby nie skakać ale fakt, że w ten sposób słabiej się komentuje
PL
  • Rejestracja:12 miesięcy
  • Ostatnio:11 miesięcy
  • Postów:2
0

Walidacja faktury XML.
Czy istnieje jakiś ogólnodostępny walidator dokumentów, jakie chcę przesłać do KSeF?
Otrzymuję teraz mało mówiącą odpowiedź: Dokument nie jest zgodny ze schemą (xsd).
Mogę sprawdzić dokument porównując dokładnie ze schemą, ale może są prostsze metody - co jest nie zgodne ?

PL
OK, już dojrzałem, że kod @k2023 porównuje plik XML z plikiem XSD
PL
A podesłał by mi ktoś plik schemat.xsd do Fa(2) ? Ze strony http://crd.gov.pl/wzor/2023/06/29/12648/schemat.xsd nie udaje się. Error 400 - Proxy Error: Remote host did not send any data - URL "http://prod2-VIP_SSF:9080/crw/wzor/2023/06/29/12648/schemat.xsd"
Dzyszla
przecież można pobrać ten plik...
PL
OK, naprawili i dziś już można pobrać ten plik .xsd
SI
  • Rejestracja:ponad rok
  • Ostatnio:około 22 godziny
  • Postów:11
2

Jakie informacje ja osobiście wyniosłem z drugiego dzisiaj spotkania:

-Każdy interpretuje sobie przepisy jak chce.
-Ale Ci programiści są okropni, czego oni nie rozumieją?

KF
O czym mowa? Jakiś "webinar" się odbył? Jest gdzieś do odsłuchania?
PA
Mnie wywaliło po 5 minutach i potem już się nie dało dołączyć.
Dzyszla
Ja myślałem, że się pobiją, prowadzenia dyskusji prawie żadnego, wszyscy za stoliczkami w końcu już wywalone mieli.... Na sali się kłucą, na teamsie baby przejmują mikrofon bez zgłoszenia, bez kolejki (ale to wina braku moderacji)... A tak jeszcze co do programistów - zwróćcie uwagę, że poza pierwszym tematem, to już w kolejnych zostaliśmy olani, w ogóle dla nas czasu nie przewidziano. A tematów dot. działania API sporo jeszcze.
MG
Odniosłam wrażenie, szczególnie w tej 2 części, że oni to robili z musu i szczególnie im nie zależało na opinii kogokolwiek, znudzeni i niezainteresowani byli. I tak zrobią jak będą chcieli, a konsultacje odfajkowane.
Dzyszla
Dokładnie. Jeszcze się okaże, że 15 czerwca powiedzą, że jednak nie zmieniają ustawy i wchodzi od 1 lipca, bo nic nie warto już zmieniać.
WJ
  • Rejestracja:około rok
  • Ostatnio:9 miesięcy
  • Postów:8
0

Dla porządku, umieszczam to, co wynotowałem z tych dzisiejszych konsultacji z MF/AK (to fragmenty, ale przynajmniej jakaś konkretna informacja, dla tych którzy nie mają sił i nerwów oglądać nagrania, o ile zostało opublikowane):

2024-02-16:
Certyfikaty:

  • specyfikacja techniczna i rozporządzenie do końca marca
  • będą obowiązywać od 1 lipca
  • przypisane do ludzi (profil zaufany) lub do pieczęci firmowej
  • będzie tryb pełnomocnika, gdzie zarządzanie certyfikatami zostanie przekazane np. do biura rachunkowego
  • pieczęć cyfrowa to dla firmy z o.o. to "must have"

Wizualizacja:

  • traktuj tę z Aplikacji Podatnika / QR code jako obowiązującą. (CRD to takie "piąte koło u wozu").

Tryb awaryjny

  • ma być oddzielny serwis, informujący czy system "żyje", czy ma awarię

Gdy otrzymasz w KSeF fakturę, której nie akceptujesz:

  • ukryj ją (Hide)
  • będzie mechanizm zgłaszania do KAS takich faktur (?)
Piotr Kuliński
Temat wizualizacji już dawno poruszanych. Jest ogólny XSL do tworzenia HTML, udostępniany na stronie MF
Dzyszla
Który ani nie wizualizuje rozsądnie, ani zgodnie z przepisami, ani tak, jak wykonywane jest to w aplikacji ich.
SK
@Dzyszla: Że nie wizualizuje rozsądnie, to się zgodzę, ale o co chodzi, że niezgodnie z przepisami? Inną kwestią jest to, że żeby otrzymać taki obraz faktury, jak oni sobie przygotowali, to powinien być przygotowany osobny schemat, który by zawierał nr KSEF.
Dzyszla
Bo np. nie da się w ten sposób zwizualizować faktury już wysłanej lub takiej, której wysłać się nie da (XML nie zawiera numeru KSeF czy danych dla kodu QR). Więc jest ona bezwartościowa dla zastosowań dokumentowych. Co najwyżej jest pokazaniem XML w tabelce, zamiast w tagach. W przeciwieństwie do wizualizacji z WWW. Oni powinni po prostu udostępnić endpointa wizualizacji i koniec kropka. A się bronią nogami przed tym. Powiedziałbym, że ręcami też, ale idzie to na lewo pobrać przecież. Więc już totalna abstrakcja w tym, co robią.
Piotr Kuliński
Transformat działa poprawnie. Z ustrukturyzowanej faktury XML (sprzedaż/zakup) mamy poprawny podgląd (aczkolwiek na stronie MF wydruk HTML jest dużo czytelniejszy niż z tej ogólnej transformy). Ja akurat na bazie ogólnej stworzyłem własną (do wyboru przez użytkownika, którą chce stosować), do własnej dodałem "wkomponowywanie QR kodu z numerem KSeF" - dla wysłanej z nadanym numerem i wygląda to OK. Użytkownik nie ma oczopląsu, zarówno dla własnych jak i zakupowych ma taką samą formę. Oczywiście zgodzę się, że ta transforma z aplikacji KSEF (do HTML-a) jest dużo fajniejsza
M0
  • Rejestracja:około 2 lata
  • Ostatnio:dzień
  • Postów:10
1

W nawiązaniu do mojego komentarza pod postem @Witold Jaworski że mechanizm do zgłaszania faktur, których się nie akceptuje już jest na ksef-test to muszę się wycofać. Bo ten mechanizm był we czwartek ale już go nie ma (jakkolwiek to brzmi). W załącznikach pliki które wisiały na ksef-test we czwartek.

HistoriaZmian(51).txtKSeF-online(6).yaml

GB
Co to jest "nadużycie faktury"?
Dzyszla
BTW - oni tak się zarzekają, że nic nie zmienią, że koszty dla firm, a dodają i tak nowe rozwiązania. Jednocześnie na moje pytanie, czy - gdyby audyt zalecił gruntowną zmianą - tak postąpią, to w ogóle nie padła odpowiedź.
M0
@gbbsoft: to ma służyć do zgłaszania fejkowych faktur. Jeśli ktoś wystawi na twoją firmę bezpodstawną fakturę to możesz ją zgłosić jako "nadużytą/scamową".
GB
@mareczek001: Ale to będzie obowiązek, czy przysługa? A jakaś forma odwołania się od decyzji?
M0
nie wiem, nie widziałem więcej info o tym
Dzyszla
Ja to nie wiem, jakie by to w ogóle miało mieć konsekwencje. Nadawca by miał sprawdzać? Czy co? Bo księgowo (podobno) zawsze można jakiejś faktury nie księgować i nie rozliczać.
M0
W piątek był ten temat i powiedzieli, że takie niechciane faktury można: 1. ukrywać (czyli olać i żeby nie było tego widać). 2. zgłaszać jako scamowe i z tego co zrozumiałem oni jako KAS mają zamiar to monitorować i wyciągać jakieś konsekwencje wobec kogoś kto wystawia takie scamowe faktury. Nie mniej sami zdają sobie sprawę z tego że cały ten temat jest śliski i w zasadzie to nie ma dobrego rozwiązania.
Dzyszla
1. Ukrywać to można i teraz. 2. Tak, a jednocześnie mówili, że to nie na wystawcy ma ciążyć odpowiedzialność :P Ja z tego drugiego spotkania to najbardziej zapamiętałem harmider organizacyjny i harmider informacyjny oraz to, że na moje pytanie babka odpowiedziała jedno, gość zaczął to już nie tak jednoznacznie traktować, a na drugie z KASu w zasadzie nie odpowiedzieli bo myśleli, że gadka o wydajności to już wyczerpuje tematy programistyczne. ;)
MG
Jak pobiera się faktury asynchronicznie, paczkami to te ukryte można jakoś rozpoznać?
Dzyszla
Można pobierać albo ukryte, albo nieukryte. Nie da się jednocześnie pobierać obu.
MG
@Dzyszla: nieukryte pobieramy jak do tej pory, a ukryte podając inne parametry? Bo niczego w programie nie zmieniałam, i mi się przed chwilą paczki pobrały z testu.
Dzyszla
@Małgorzata Gunia: Tak, są parametry: isHidden oraz hidingDateFrom i hidingDateTo. Wszystkie opcjonalne, ale niepodanie pierwszego oznacza, że tylko nieukryte, a dwa pozostałe mają sens tylko, jeśli jest pierwszy.
MG
@Dzyszla: Synchronicznie jak się pytam bez isHidden to mi zwraca wszystkie,ukryte i nieukryte, z isHidden tylko ukryte.
Dzyszla
Kurcze, faktycznie nie używam asynchronicznej, a w synchronicznej jest tak, jak opisałem. Jak tam jest inaczej, to... po prostu to są de$#*#! Przez myśl by mi nie przeszło, żeby dwie analogiczne metody używające tego samego requesta zwracały inne wyniki.
MG
Chyba coś pokręciłam z parametrami, musze to jeszcze przetestować.
ZI
Za kazdym razem w sklepie bede sobie bral fakture na jakas losowa firme a ona niech sie pozniej bawi z syfem w papierach :D świetny system :D
Dzyszla
Ale aktualnie przy efakturach w zasadzie było to samo (chyba, że ktoś każdorazowo podawał maila docelowego). Jedyna różnica - jak ludzie dostawali papier do ręki - ta scamowa po prostu nie dotarła do nabywcy w rzeczywistości i nie została zaksięgowana. I ponownie: jedynym sposobem pozbycia się problemu byłaby rezygnacja z przekazywania faktur, a wyłącznie raportowanie wystawionych.
M2
  • Rejestracja:11 miesięcy
  • Ostatnio:6 miesięcy
  • Postów:4
0

Cześć, chciałbym poprzez EP online/Credentials/GenerateToken wygenerować nowy token.
Dostaje błąd 21301 Brak autoryzacji.
Inne operacje typu wysyłka/odbieranie faktur przechodzą.

Działam w kontekście sesji, którą nawiązałem poprzez online/Session/InitToken.
Token, którego użyłem w InitToken został wygenerowany na https://ksef-test.mf.gov.pl/web gdzie zaznaczyłem wszystkie uprawnienia tam dostępne (dostęp do faktur, wystawianie faktur, przeglądanie uprawnień, zarządzanie uprawnieniami).

Podczas logowania do aplikacji web KSeF podawałem jedynie NIP. Nie załączałem podpisanego żądania autoryzacyjnego XML. Czy to może być przyczyna "Braku autoryzacji" - tzn. że źle zalogowałem się do aplikacji webowej KSeF?
Jeśli tak, to czym i jak podpisać takie żądanie autoryzacyjne do aplikacji KSeF? Na tym polu jestem laikiem. Działam w .NET i nie mam żadnych certyfikatów żeby taki podpis zrobić.

Dzięki za wyrozumiałość.

edytowany 1x, ostatnio: Mar2024
Dzyszla
Nie można generować tokena z tokena. Musisz zalogować się certyfikatem. Certyfikat możesz sobie zrobić OpenSSLem lub innymi metodami, np. tu opisanymi: Krajowy system e-Faktur lub Krajowy system e-Faktur
M2
dzięki, spróbuję przećwiczyć temat :)
JK
  • Rejestracja:ponad rok
  • Ostatnio:3 dni
  • Postów:22
0

Czy oznacza się jakoś w KSeFie faktury wystawiane do paragonów? W przykładowym pliku JPK dla faktury do paragonu mam pole <tns:TypeDokumentu>FP</tns:TypDokumentu> (nie wiem dlaczego albo czy to potrzebne w JPK, taki przykładowy plik dostałem), ale w dokumentacji KSeF nic nie widzę co by miał związek z paragonami

Dzyszla
Tak - FP. Pamiętaj też o TP (też to w JPK występowało jako oznaczenie).
JacekStawicki360
Masz przecież w schemie do FA(2) <xsd:element name="FP" type="etd:TWybor1" minOccurs="0"> xsd:annotation xsd:documentationFaktura, o której mowa w art. 109 ust. 3d ustawy</xsd:documentation> </xsd:annotation>
JK
Księgowym nie jestem i nie mam pojęcia co to jest art 109, szukałem słówa "paragon" w dokumentacji. Dzięki za odpowiedź
Dzyszla
  • Rejestracja:prawie 3 lata
  • Ostatnio:około 15 godzin
  • Postów:106
0

Są już informacje o ofertach, jakie były złożone do audytu:
https://crn.pl/aktualnosci/mf-wybralo-firme-it-ktora-wykona-audyt-ksef/

SK
Czyli za 30 dni się dowiemy, że w sumie, to nie ma problemu, szafa gra, tylko trzeba było dokręcić zawiasy, a tak poza tym aplikacja jest spoko, super-duper i nie ma co odwlekać tematu! :-P
Dzyszla
Albo, że wszystko jest zrąbane, ale zmiana tego jest nieopłacalna :)
GB
Jakoś oczekiwałem bardziej znane nazwy firm... hm...
Piotr Kuliński
Audyt jak to audyt, ktoś zarobi i będziemy wiedzieli tyle co wiemy, że system ma problem z wydajności :)
Dzyszla
Tak w ogóle, to nie dość, że KSeF padł ostatnio, to nawet na potwierdzenie PITa ponad dobę trzeba było czekać. Dramat.
M2
  • Rejestracja:11 miesięcy
  • Ostatnio:6 miesięcy
  • Postów:4
0

Wysyłam faktury interaktywnie. Czy może się zdarzyć, że dla zakończonej sesji (status 200) nie ma jeszcze wygenerowanego UPO?

Dzyszla
Nie... 200 mówi o wygenerowaniu UPO. Przed generowaniem jest 360, w razie błędu generowania UPO jest 465.
M2
bóg zapłać <3
TO
Może być status 200 bez UPO - w przypadku, gdy żadna faktura nie była poprawna, bądź żadnej nie wysłano.
Dzyszla
  • Rejestracja:prawie 3 lata
  • Ostatnio:około 15 godzin
  • Postów:106
0

Jakieś wnioski po rozmowach o identyfiaktorach płatności?

Ja wyciągam:

  • w razie awarii paraliż bo nie przewidują trybu awaryjnego
  • nie zrezygnują z rozwiązania bo chcą wszystko widzieć, ale jednocześnie są świadomi, że nie zobaczą ani 50% tego, co chcą widzieć.
  • może rozważą pomysł, aby nie zgłaszać się po identyfiaktor, tylko wysłać do KSeFu własny identyfikator i listę faktur tak, aby można go generować poza systemem
  • może wreszcie poprawią YAMLa, bo to co jest obecnie, w ogóle się nie zgadza z rzeczywistością
  • nie wiadomo, kiedy będzie ten system obowiązkowym i kiedy będą ewentualne kary
  • oni sobie myślą, że jak ktoś się zaloguje do systemu, to będzie cały dzień tam siedział (a UPO gdzie?) i grzebał na nim
edytowany 1x, ostatnio: Dzyszla
JA
@Dzyszla: z załącznikami w mediach jest gorzej. Na podstawie danych z załączników weryfikuje się poprawność faktury (szczegóły zużycia, okresy rozliczeniowe). UM z Bydgoszczy ma 20% błędnych faktur za 2022 i te błędy są wykrywane właśnie dzięki analizie szczegółów dla danej faktury. Co prawda jest w schemie <DodatkowyOpis>, który pozwala podać takie dane. Niemniej nie da się zrobić grupowania w ramach faktury. Opis można dać do: - faktury - pozycji więc tam, gdzie na jednej fakturze teraz jest wystawiane wiele zasobów (patrz SM czy JST) się tego nie ogarnie.
Dzyszla
Można zawsze zrobić HTML/XML, tylko najpierw by musieli rozciągnąć to pole tak ze 100x co do długości. Potem tylko wizualizacja, która by coś takiego przetwarzała. Od biedy można też CSV tam zawrzeć. Natomiast faktem jest, że np. u mnie bardzo często wykorzystuje się EDI w specyfikacji elektrotechnicznej, która też ma masę pól o określonych znaczeniach. Niby można to wepchnąć do faktury, ale nikt tego nie chce, tylko chcą zostać przy tym, co jest, bo przynajmniej zunifikowane, a nie że każdy po swojemu wykorzysta. KSeF niepotrzebnie jest pośrednikiem.
JA
Zgoda, tylko powstaje nowy problem - powiązania faktury z KSeF z załącznikami np. przesłanymi mailem :-) Teraz wszystko jest w jednym miejscu od danego dostawcy. Po wprowadzeniu KSeF będzie dodatkowa praca przy składaniu tych danych ...
SK
Chyba i tak nic nie przebije pomysłu na umieszczanie numerów partii. Nie wiem kto na to wpadł, ale cenię; takie fajne są, z niczym w zasadzie nie związane, lewitujące takie ;-)
Dzyszla
@SylwesterK: Bo ktoś słyszał, jak to szalenie istotne jest dla niektórych branż/przypadków. Tylko pojęcia zielonego nie miał, po co to komuś, to dał, bo "tak chcieli". :) Tu w ogóle jest masa rzeczy, która powinna być ze sobą powiązana i znajdować się jako element węzła, a albo tego nie ma, albo powiązanie jest sztuczne na podstawie podawania jakichś numerów niepotrzebnie.
M2
  • Rejestracja:11 miesięcy
  • Ostatnio:6 miesięcy
  • Postów:4
0

Próbuje nawiązać sesję poprzez online/Session/InitSigned
Dostaje błąd: 9105 Nieprawidłowa treść podpisu.

Zrobiłem to w ten sposób, że najpierw za poradą Dzyszla wygenerowałem certyfikat:

makecert -r -pe -h 0 -n "CN=Test KSeF, 2.5.4.97=VATPL-XXXXXXXXXX" /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" -e 01/01/2025 -sky exchange -sv cert.pvk cert.cer
Pvk2Pfx /pvk cert.pvk /spc cert.cer /pfx cert.pfx

Później już z użyciem cert.pfx podpisuje w .NET wygenrowany XML i wygląda to mniej-więcej tak, co może być przyczyną? Może źle robie ten podpis?
Czego używacie w .NET do podpisów xades?

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns3:InitSessionSignedRequest xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001" xmlns:ns2="http://ksef.mf.gov.pl/schema/gtw/svc/types/2021/10/01/0001" xmlns:ns3="http://ksef.mf.gov.pl/schema/gtw/svc/online/auth/request/2021/10/01/0001">
	<ns3:Context>
		<Challenge>20240222-CR-XXXXXXXXXXX-F3E7AC30DF-36</Challenge>
		<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
			<ns2:Identifier>1111111111</ns2:Identifier>
		</Identifier>
		<DocumentType>
			<ns2:Service>KSeF</ns2:Service>
			<ns2:FormCode>
				<ns2:SystemCode>FA (2)</ns2:SystemCode>
				<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
				<ns2:TargetNamespace>http://crd.gov.pl/wzor/2023/06/29/12648/</ns2:TargetNamespace>
				<ns2:Value>FA</ns2:Value>
			</ns2:FormCode>
		</DocumentType>
	</ns3:Context>
	<ds:Signature Id="Signature" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
		<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-sha512"/>
			<ds:Reference Id="Signature-ref0" 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#sha512"/>
				<ds:DigestValue>lljBVeVSv7SfNfB/tJAtyhBwAnT5eHg40Ka4hG6eJ/TfiHXKM0l+Hzjwgqdjl1YoKwfbro73KsKnTKqU/cWOSw==</ds:DigestValue>
			</ds:Reference>
			<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties">
				<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
				<ds:DigestValue>iUd0mOmJG0Wy9918SXJKKrHRWolcpFFPXRCm3Bk67/OjOKgxZ2k9gj49mobWkDtupnR3Dtcp90Qbcci07CWzuQ==</ds:DigestValue>
			</ds:Reference>
		</ds:SignedInfo>
		<ds:SignatureValue Id="Signature-sigvalue">zJ1j8O+US8WQULCLh3vrMSi/T2d36CipMPA8hi1jEUPUFilQFCz3AzYFqR4qxVqWNG32r4myMr10A5cXVFJGVBg3fLKRCGQWW56nw9ADaDTOwlPbbXbsc00RFxSMU/SbgjybDAe6GvFO1CQURn0vX82zNIFdPv6cGuirrrzS7RA=</ds:SignatureValue>
		<ds:KeyInfo>
			<ds:X509Data>
				<ds:X509Certificate>MIICczCCAeCgAwIBAgIQX3PDw1d2OaxJvWILQEPG8DAJBgUrDgMCHQUAMC8xGTAXBgNVBGETEFZBVFBMLTE0OTIyMDI4MDMxEjAQBgNVBAMTCVRlc3QgS1NlRjAeFw0yNDAyMjIwOTU1MTFaFw0yNDEyMzEyMzAwMDBaMC8xGTAXBgNVBGETEFZBVFBMLTE0OTIyMDI4MDMxEjAQBgNVBAMTCVRlc3QgS1NlRjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0/D5NsACnRsSufH3wYzQn9/m1BdcaKTAMwHrcN8zYmh5A5lF0zG9nooxboj4XjDfk29oLwosR1vL2Ni0y/KtONcUG1Ka9nhgSke9z7ziyv8WX4ax4eAyG+0FUVKh3SYH+4bu9bz2HR3CLMP/2dgDvLxtesHW/m39ESuf2pFNW0kCAwEAAaOBlzCBlDAPBgNVHRMBAf8EBTADAgEAMB8GA1UdJQQYMBYGCCsGAQUFBwMDBgorBgEEAYI3CgMNMGAGA1UdAQRZMFeAEKA4/mNyA4xiOlKYDIcSrcKhMTAvMRkwFwYDVQRhExBWQVRQTC0xNDkyMjAyODAzMRIwEAYDVQQDEwlUZXN0IEtTZUaCEF9zw8NXdjmsSb1iC0BDxvAwCQYFKw4DAh0FAAOBgQAKHd8K3cooghIxzMrF+3yMj7aH0UqhhB+Wc9YKI1Gr34UuFimiv04oE4hzSPNovRkIZAUGgX99cXjq1Xcova8MHiylgoHHlJU897MyVxafg1bO7jLjYD9loJLQENczY8LPmKwd0LId8vtTwXcNouFsBJt+QHX2zokcftMMguEw2Q==</ds:X509Certificate>
			</ds:X509Data>
		</ds:KeyInfo>
		<ds:Object>
			<xades:QualifyingProperties Target="#Signature" xmlns:xades141="http://uri.etsi.org/01903/v1.4.1#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
				<xades:SignedProperties Id="SignedProperties">
					<xades:SignedSignatureProperties>
						<xades:SigningTime>2024-02-22T10:23:00Z</xades:SigningTime>
						<xades:SigningCertificate>
							<xades:Cert>
								<xades:CertDigest>
									<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
									<ds:DigestValue>fV+etlejdjosMon7Wo2nTtJVRIc=</ds:DigestValue>
								</xades:CertDigest>
								<xades:IssuerSerial>
									<ds:X509IssuerName>CN=Test KSeF, OID.2.5.4.97=VATPL-1111111111</ds:X509IssuerName>
									<ds:X509SerialNumber>126877744284731036914635740664884872944</ds:X509SerialNumber>
								</xades:IssuerSerial>
							</xades:Cert>
						</xades:SigningCertificate>
					</xades:SignedSignatureProperties>
				</xades:SignedProperties>
			</xades:QualifyingProperties>
		</ds:Object>
	</ds:Signature>
</ns3:InitSessionSignedRequest>
R3
Skrót masz SHA512 (<ds:DigestMethod />) a powinien być SHA256, transformaty i kanonizację też bym wymusił na http://www.w3.org/2001/10/xml-exc-c14n#...
Piotr Kuliński
A czego ty użyłeś .net (C#?) do podpisu. Ja generalnie też mam z tym spory problem, wszystko co napotykam w necie to jakieś konstrukcje "na kiju", ciągle z tym się grzebię.
szymek77
  • Rejestracja:11 miesięcy
  • Ostatnio:9 miesięcy
  • Postów:5
0

Mam problem z wysyłką wsadową. Ze specyfikacji oraz z xml'a inicjalizującego wysyłkę wsadową wyciągnąłem wnioski, że ograniczenia dotyczące wysyłki to:

  1. Rozmiar części paczki nie może przekroczyć 50MB.
  2. Cała paczka nie może być podzielona na więcej niż 100 części.

Jednak zdarza się, że wysyłam 100 części, które mają po 30KB i KSeF się zawiesza na jednej z części, przez co nie mogę przesłać całej paczki, pomimo że nie przekraczam ani limitu cześci, ani rozmiaru. Jest coś o czym nie wiem? Jest jeszcze jakiś limit na liczbę faktur na część lub na całą paczkę?

R3
Z wysyłką wsadową na wersji testowej miałem całą masę dziwnych zachowań, szczególnie kiedy testujesz coś pod opisane w dokumentacji limity. Jedyne co pozostaje to mail na info.ksef@... licząc że odpiszą. Mój mail odnośnie limitu przy asynchronicznym pobieraniu oryginałów z 17. stycznia nadal pozostał bez odpowiedzi...
M0
Jak to testowałem to miałem podobne problemy i z tego co pamiętam to ludzie pisali, że mieli te same kłopoty. Ot po prostu tak to działa w obecnej wersji...
Dzyszla
Często z tymi częściami to były problemy już w przeszłości.
Dzyszla
  • Rejestracja:prawie 3 lata
  • Ostatnio:około 15 godzin
  • Postów:106
0

Jak rozumieć "obsługę autoryzacji w standardzie eIDAS. " i czemu tylko na demo? (https://www.gov.pl/web/kas/komunikat-nr-107-aktualizacja-api-krajowego-systemu-e-faktur-na-srodowisku-przedprodukcyjnym-demo)

Grzegorz Molenda
Może dopiero teraz wprowadzili to rozporządzenie w życie w odniesieniu do naszych systemów krajowych. Trudno powiedzieć i jakieś wnioski wyciągać po tak lakonicznym komunikacie.
Dzyszla
A miały być szczegółowe opisy. I czemu tego nigdy na teście nie widziałem? Może to tylko jakaś ich wewnętrzna zmiana związana z autoryzacją (która na teście nie istnieje)?
Grzegorz Molenda
Zobaczymy, ale te unijne certyfikaty, to powinny być po 2016 roku przez Polskę respektowane wszędzie. Ja sobie nie przypominam, żeby któryś inny system tego wymagał, czy się do tego stosował. Widocznie KSeF już pod to podpada. Tylko dlaczego dopiero teraz postanowili się zastosować do wymogów unijnych ?
R3
Pewnie tak jak pisze @Grzegorz Molenda przestawią się z dopuszczenia certyfikatów i pieczęci wystawionych przez podmioty z nccert.pl na listę europejską (https://eidas.ec.europa.eu/efda/tl-browser/#/screen/home). Tylko ile polskich podmiotów ma certyfikaty wystawiane przez np. chorwackich dostawców - o ile to jest w ogóle możliwe formalnie???
Dzyszla
Ciekawe, jak to wpłynie na wydajność i niezawodność :D wg mnie to logowanie certyfikatem/PZ powinno być tylko na potrzeby wystawienia wewnętrznego certyfikatu (tokena) i cała reszta powinna się odbywać w oparciu o niego.
T2
  • Rejestracja:11 miesięcy
  • Ostatnio:8 miesięcy
  • Postów:4
0

Witam

Czy ktoś ma podobny problem, kiedy wysyłam fakturę otrzymuje: Curl error: OpenSSL SSL_read: Connection reset by peer, errno 104

K5
Może to nie na temat, ale ja w php robię coś takiego (wer. demo): curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
T2
Witam to niestety nic nie daje - sprawdzałem curl -v https://ksef-demo.mf.gov.pl i ta wszystko działa

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.