Krajowy system e-Faktur

0

Poniższe działa
Post:https://ksef-test.mf.gov.pl/api/online/Query/Invoice/Sync?PageSize=100&PageOffset=0->{"queryCriteria":{"subjectType":"subject1","type":"range","invoicingDateFrom":"2022-04-10T22:23:36.173Z","invoicingDateTo":"2022-04-28T22:07:01.872Z"}}

ale...
"subjectType":"subject1" - oddaje faktury wystawione przez podmiot
"subjectType":"subject2" - oddaje faktury otrzymane przez podmiot

"subjectType":"subject3" i "subjectType":"subjectAuthorized" - oddaje co?

Czy ktoś wie?

1

wysłyka wsadowa, batch/Init zwraca timestamp i dzis zauwazylem ze jest on przesuniety o -2h. zawsze tak było? wszystkie timestampy tak maja?

0

Bramka produkcyjna, podpis kwalifikowany z PESEL właściciela i NIP firmy (tzn. właściciela - osoby fizycznej).

Postanowiłem wreszcie utworzyć sesję na bramce produkcyjnej. Według teorii mój PESEL powinien być skojarzony z NIP-em, a tu nic z tego. dostaję "Brak autoryzacji".
Czy źle to rozumiem czy raczej mam gdzieś w błąd podpisie. Czy wiecie coś o tym z praktyki?

PS. Gdy podpisze InitSigned.XML e-puap-em także jest "brak autoryzacji".
Tak jakby mój PESEL nie miał powiązania z moim NIP-em.

1

Czy po wysłaniu faktury (w przypadku gdy wysyłamy pojedynczo, nie paczkami) i otrzymaniu nr KseF, faktura jest już "wystawiona" i można ją przekazać klientowi? Czy trzeba przed przekazaniem odebrać UPO?

0

Witam wszystkich, czy moglibyście pomóc mi zinterpretować dokument dotyczący limitów API opublikowany na https://ksef-test.mf.gov.pl/document/LimitValues/1.0?

Na przykład: biorąc pod uwagę jednostkę czasu: MINUTY, dla operacji Id: online.invoice.invoice.send limit: 1 żywotność: 60, to znaczy, że możemy wysłać tylko 1 fakturę w ciągu 60 minut?

A także, czy ktoś się dowiedział, czy za pomocą KSEF API można pobrać wersję HTML faktury, która wyświetla się na portalu?

0

Witam wszystkich. Czy ktoś wie jaką wartość nagłówka Content-Type przyjmuje endpoint Session/InitToken? Próba wysłania jakiegokolwiek zwraca status 415 Unsupported Media Type, a klient http którego używam nie pozwala na wysłanie POSTa bez tego nagłówka.

0

Warto zgłaszać jakieś problemy z KSeF czy i tak nic to nie da i lepiej szukać obejścia problemu? Wydaje mi się, że pola partRangeFrom i partRangeTo w /online/Query/Invoice/Async/Fetch nie są wypełniane poprawnie:

"partRangeFrom":"2022-04-19T22:00:00","partRangeTo":"2022-04-20T22:00:00"

Takie pola powodują błąd parsera, bo nie mają ani Z, ani +02:00, a to jest to czego parser się spodziewa dla pola typu string i formatu date-time (pole ma typ OffsetDateTime w Java).

0

Czy dane zwracane przez /online/Query/Invoice/Async/Fetch są niezależnymi plikami ZIP dla każdej części, czy jest to plik podzielony na kawałki do sklejenia?

0

Mam problem z /online/Query/Invoice/Sync, otrzymuje kod 21000 - nieprawidłowe żądanie.
Robię to tak:

var request = new RestRequest("​/online/Query/Invoice/Sync");
request.Method = Method.POST;
request.AddQueryParameter("PageSize", "100");
request.AddQueryParameter("PageOffset", "0");                  
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("SessionToken", tokenSesji;
request.AddHeader("charset", "UTF-8");
request.AddJsonBody(body);
var response = client.Execute(request);

Body wklejone na strone testową działa:

{"queryCriteria":{"invoicingDateFrom":"2022-04-01T00:00:00.000Z","invoicingDateTo":"2022-05-04T00:00:00.000Z","subjectType":"subject1","type":"range"}}

Co tu jest źle?

0

Może jestem tępy, ale która metoda zwraca UPO w formacie XML zgodne z https://ksef-test.mf.gov.pl/schema/upo/KSeF/v1/UPO_KSeF.xsd ?

0

WItam, próbuję wysłać podpisany plik InitRequest poprzez funkcję INIT:
https://ksef.mf.gov.pl/swagger/index.html?api=KSeF-batch.yaml#/Wysy%C5%82ka%20wsadowa/batch.init
ale otrzymuję błąd: "Dokument nie jest zgodny ze schemą (xsd)". Wysyłka niepodpisanego pliku powoduje otrzymanie komunikatu "Brak podpisu".
W załączniku podpisany plik, który usiłuję wysłać. Próbowałem podpisywać plik na różne sposoby, ale ten sam problem. Czy ktoś jest w stanie coś doradzić, pomóc?
KSeF.7z

Czy ktoś może podesłać przykładowy w pełni wypełniony plik InitRequest?
Może uda się komuś podpisać "swoją metodą" mój plik po wcześniejszym usunięciu podpisu i dać znać, czy to jest problemem?

0

Hej, może ktoś podesłać jak liczy skrót sha256 dla wysyłki wsadowej w javie? Mam kod który kiedyś działał a dziś notorycznie dostaje: 425 Nieprawidłowy skrót pliku. Już po wysłaniu, przy sprawdzaniu statusu.

1

Przestało mi działać pobieranie faktur, sprawdziłem API i okazało się że jest nowa wersja 1.0.3 w której kluczowe wcześniej klasy InitSessionResponse czy QueryInvoiceRequest są oznaczone jako deprecated. Z listy zmian:

#1.0.3
Dodanie nowej wersji żądania /online/Query/Invoice/Sync
Dodanie nowej wersji żądania /online/Query/Invoice/Async/Init
Dodanie nowej wersji żądania i odpowiedzi /online/Credentials/RevokeToken
Dodanie nowej wersji odpowiedzi /online/Session/InitSigned
Dodanie nowej wersji odpowiedzi /online/Session/InitToken
Dodanie pól lastUseTimestamp i registrationTimestamp do CredentialsTokenType
Dodanie pola currency do InvoiceHeaderType
Usunięcie pola description z GrantCredentialsRequestType
Usunięcie pola description z RevokeCredentialsRequestType
Oznaczenie InitSessionResponse jako deprecated
Oznaczenie RevokeTokenRequest jako deprecated
Zmiana wymagalności pól w QueryInvoiceAsyncStatusResponse
Zmiana minimalnego rozmiaru listy invoiceHeaderList w QueryInvoiceSyncResponse
Zmiana minimalnego rozmiaru listy credentialsList w QuerySyncCredentialsResponse
Zmiana minimalnej długości pola description w GenerateTokenRequestType
Aktualizacja wzorca pola identifier w CredentialsIdentifierResponseAuthorisationTokenType
Dodanie walidacji na zakresy dat (od i do) /online/Query/Invoice/Async/Init
Zmiana sortowania wyników wyszukiwania (nagłówek faktury) z rosnącego na malejące
Uspójnienie kodów wyjątków
Zmiana statusu http z 400 Bad Request na 429 Too Many Requests dla limitu żądań

0

Hej od wczoraj mam dziwny błąd:

Faktura o podanym identyfikatorze nie istnieje. Mimo że widzę ją w wysłanych. Jedyna różnica jest taka, że mam inny token sesji. Myślicie że mogli ograniczyć sprawdzanie statusu wysłanej FV do konkretnej sesji?

0

Jak już zamordowali poprawne użycie dat w UTC albo z przesunięciem zgodne ze standardem OpenAPI, to teraz jest zagadka w jakim formacie podaje się daty w zapytaniach. Prośba o dane od 2022-05-09 00:00:00+02:00 do 2022-05-10 12:00:00+02:00 (zapisane bez przesunięcia w wywołaniu API, po prostu czas lokalny bez strefy) zwróciła plik z danymi za 2022-05-09T00:00:00 do 2022-05-09T22:00:00... Ciężko to jakoś sensownie interpretować.

0

Mam błąd dla InitSigned
Odpowiedź:

{
  "exceptionCode": 21406,
  "exceptionDescription": "Konflikt podpisu i typu uwierzytelnienia."
}
1

Jak wiecie, był program GbbKSeF. Próbowałem go przerobić na nową wersję API 1.0.3, ale... cuda generator wygenerował z nowych plików *.yaml. Nie wiem, czy to wina plików yaml, czy generatora (Autorest). Więc podszedłem do sprawy inaczej. W VisuaStudio jest "Connected Services", które generują kod w C# z plików yaml przy pomocy NSwag (mieszczą się w podkatalogu obj, więc nie należy ich kasować, bo zostały zmodyfikowane przeze mnie (patrz niżej).
Więc...:

Oto program GbbKSeF2 v2.0 - wersja do testowania API KSeF, ale wydaje się, że prawie w pełni działająca

Link do źródeł w komentarzu: https://github.com/gbbsoft/GbbKSeF2

Program do pobrania tutaj:
Plik1: https://www.gbbsoft.pl/!download/GbbKSeF/GbbKSeFSetup.msi
Plik2: https://www.gbbsoft.pl/!download/GbbKSeF/setup.exe

Wystarczy wgrać pliki do jednego katalogu (najlepiej pustego) i uruchomić setup.exe (albo plik .msi).
Wymagania: .Net Framework Core 6.0

Dodatek ekstra: możliwość pobrania wysłanej faktury i wygenerowania faktury korygującej "do zera" dla niej (i ew. wysłania do KSeF)

W tej wersji jest możliwość podpisywania xml w eksporcie batch za pomocą podpisu elektronicznego, ale na razie plik podpisany jest akcetowany przez KSeF i nikt nie wie dlaczego. Czekam na odpowiedż z KSeF...

screenshot-20220510224546.png

Znalazłem trochę błędów w specyfikacji .yaml (przynajmniej tak wynika z generatora kodu).

  1. Polegają one na tym, że pola są wymagane, a KSeF podaje (czasami) w nich null: upo, tradeName, referenceNumber, subjectByK, subjectToKList, subjectsAuthorizedList, subjectsOtherList, acquisitionTimestamp, divisionType, numberOfElements, numberOfParts
  2. W funkcji '/batch/Init' poprawna odpowiedź powinna mieć kod 201 a ma 200.
  3. Zwracanie kodów błedów, które nie są opisane w .yaml

Musiałem więc trochę na zmieniać/uzupełnić wygenerowany kod, dlatego nie należy go kasować z podkatalogu obj.

0

Witam,
Zaczynam próbować zintegrować się KSef'em używając środowiska Delphi XE. Przyznam, że nie idzie mi to zbyt łatwo dlatego miałbym kilka pytań.

Do wszystkich operacji wykorzystuje komponent IdHTTP (funkcje POST i GET).
Do tej porty udało mi się uzyskać "Challenge" wysyłając POST'a na adres /api/online/Session/AuthorisationChallenge
Następnie generuje przykładowy XML InitSigned, podpisuje go za pomocą profilu zaufanego i również POST'em wysyłam na adres /api/online/Session/InitSigned i w odpowiedzi dostaję takiego JSON'a:

{
   "timestamp":"2022-05-11T07:58:25.213Z",
   "referenceNumber":"20220511-SE-7DD5355073-D52EF8045A-87",
   "sessionToken":{
      "token":"489d885f0a47c302d7c29aa1cbf0f26eefe121b67789ef7a8c2fdb08f6fb42f6",
      "context":{
         "contextIdentifier":{
            "type":"onip",
            "identifier":"TUTAJ_MOJ_NIP"
         },
         "contextName":{
            "type":"fn",
            "tradeName":null,
            "fullName":"MOJANAZWA"
         },
         "credentialsRoleList":[
            {
               "type":"standard_plain",
               "roleType":"invoice_read",
               "roleDescription":"JA"
            },
            {
               "type":"standard_plain",
               "roleType":"introspection",
               "roleDescription":"JA"
            },
            {
               "type":"standard_plain",
               "roleType":"invoice_write",
               "roleDescription":"JA"
            },
            {
               "type":"standard_plain",
               "roleType":"credentials_read",
               "roleDescription":"JA"
            },
            {
               "type":"standard_plain",
               "roleType":"credentials_manage",
               "roleDescription":"JA
         ]
      }
   }
}

Role (uprawnienia), które widać w powyższym JSON i przykładowe faktury ustawiłem sobie wcześniej poprzez zalogowanie się do aplikacji na stronie MF.

Z tych informacji wnioskuję, że "referenceNumber":"20220511-SE-7DD5355073-D52EF8045A-87" to jest numer sesji, którą nawiązałem poprzez InitSigned.
Jednak gdy próbuję uzyskać informacje na temat tej sesji wysyłając IdHTTP.GET(/api/online/Session/Status/20220511-SE-7DD5355073-D52EF8045A-87?PageSize=10&PageOffset=0) to uzyskuję komunikat HTTP/1.1 400 BadRequest
Tak samo przy próbie wysłania IdHTTP.POST(/api/online/Session/Query/Invoice/Sync,{"queryCriteria": {"subjectType": "subject1","type": "detail"}}')

Pierwsze pytanie: Co robię źle, że nie udaje mi się skomunikować z KSeF'em na tym etapie?
Drugie pytanie: Jak wygenerować zakodowany token aby móc za jego pomocą się dostać do KSeF? Czy ktoś wie jak w DELPHI XE zakodować ten token?

Dziękuje za góry za pomoc.

0

czy ktoś mógłby podesłać jakiś przykład w Delphi ?

0

Cześć, uprawnienia: - w jakiej sytuacji będzie używane uprawnienie self_invoicing i komu można mu je nadać? Czy też tak macie że po API nie da się nadać uprawnienia typu 'introspection' natomiast w aplikacji takie uprawnienie można nadać na PESEL.

0

Trzeba zmienić serwer na:
https://ksef-test.mf.gov.pl/api - Środowisko testowe

karol75 napisał(a):

Undocumented
Failed to fetch.
Possible Reasons:

CORS
Network Failure
URL scheme must be "http" or "https" for CORS request.
Sprawdzanie sesji, statusu faktury i pewnie inne.
Przed świętami działało.

0
piars napisał(a):

czy ktoś mógłby podesłać jakiś przykład w Delphi ?

Pozyskiwanie challenge (pierwsza część logowania):

	with TJSONDataWriter.Create(False) do // obudowany TJsonObjectWriter, który w jednej funkcji wykonuje dwie - zapis właściwości i start object, lub zapis nazwy wartości i samej wartości
	begin
		try
			WriteStartObject;
			WriteStartObject('contextIdentifier');
			Add('type', 'onip');
			Add('identifier', aNIP);
			WriteEndObject;
			WriteEndObject;

			req := JSON;
		finally
			Free;
		end;
	end;

	try
		try
			if fRESTClient.SendRequest((req as TJSONObject), 'online/Session/AuthorisationChallenge', rmPOST) then
			begin
				edChallenge.Text := fRESTClient.JSONResponse.GetValue<String>('challenge', '');
				edChallengeTime.Text := fRESTClient.JSONResponse.GetValue<String>('timestamp', '');
			end;
		except
			on E: EKSeF do
				Application.MessageBox(PChar(E.Message), PChar(Application.Title), MB_ICONERROR);
			on E: Exception do
				Application.MessageBox(PChar('Błąd wysłania/przetwarzania:'#13 + E.Message), PChar(Application.Title), MB_ICONERROR);
		end;
	finally
		req.Free;
	end;

 // fRESTClient jest obiektem (DataModule), który zawiera klienta REST oraz udostępnia np. ponższą funkcję:

function TKSeF_REST.SendRequest(const aJSON: TJSONObject; const aAPIFunction: String; const aReqMethod: TRESTRequestMethod): Boolean;
var
	s: TStringStream;
begin
	RESTRequest.ClearBody;
	RESTRequest.Method := aReqMethod;
	RESTRequest.Resource := aAPIFunction;
	RESTClient.ContentType := 'application/json';
	RESTRequest.Body.Add(aJSON);

	RESTRequest.Execute;
	if Assigned(fOnResponse) then
	begin
		s := TStringStream.Create(RESTResponse.Content);
		try
			fOnResponse(RESTRequest.Resource, s);
		finally
			s.Free;
		end;
	end;

	Result := InRange(RESTResponse.StatusCode, 200, 299);
end;
0

Czy ktoś mógłby udostępnić przykład podpisu elektronicznego w C#?

0

Czy pageOffset to jest pageNumber czy jednak offset? Bo mam wątpliwości że jest to offset. I dlaczego w ogóle to jest ograniczone? A co jeśli faktur będzie więcej?

Na zapytanie:

https://ksef-test.mf.gov.pl/api/online/Session/Status/20220512-SE-**********-**********-**?PageSize=50&PageOffset=150

Dostałem:

{"exception":null,"fieldViolations":[],"propertyViolations":[],"classViolations":[],"parameterViolations":[{"constraintType":"PARAMETER","path":"sessionStatusReferenceNumber.arg3","message":"must be less than or equal to 100","value":"150"}],"returnValueViolations":[]}

Gdzie wcześniejsze pobranie dla pageOffset 100 poszło:

{"timestamp":"2022-05-12T11:06:15.085Z","referenceNumber":"20220512-SE-**********-**********-**","numberOfElements":200,"pageSize":50,"pageOffset":100,"processingCode":315,"processingDescription":"Sesja interaktywna aktywna. Komunikacja otwarta.","invoiceStatusList":[]}
0

Kurcze nie zaglądałem jakiś czas.a tu tyle zmian zrobili, że mi przestało działać :) Np pobieranie listy faktur: online/Query/Invoice/Sync

Swoją drogą ta lista zmian w postaci tego pliku txt to też jest jakaś żenada..

0

Wysyłam /online/Query/Invoice/Sync z "range", a potem kilka razy z "incremental", zakres dat jest taki sam. W odpowiedzi otrzymuję takie same faktury.
To jaka jest różnica w tych wywołaniach?

0

Pytanie mam do /online/Invoice/Send. Co powinno być w value? Programuje w PHP i wrzucam tam wartość hash('sha256', base64_encode($invoice)). sha256 zwraca 64 znaków a powinno być niby 44. Co robie źle? :)

0

Cześć, czy ktoś ma pomysł, jak zweryfikować poświadczenia, które zostały nadane do NIP? Kiedyś robiłem to, sprawdzając listę ról poświadczeń zwróconą po otwarciu sesji, ale kiedy testowałem to dzisiaj, nie jestem logerem, który odbierał fakturę, odczytując i zapisując role, które inna firma przyznała mojemu NIPowi na tej liście.

0

Cześć, czy komuś dalej działa wysyłka wsadowa batch/Init? Wiem, że temat tu był, ale tworzę xml-a wg podanego wzoru który komuś działał (podobno) i kończą mi się pomysły co może być nie tak. Narzędzie standalone DSS (https://ec.europa.eu/digital-building-blocks/DSS/webapp-demo/signature-standalone) też niestety nie pomaga i podpisany plik jest dodatkowo "Niezgodny ze schemą". Czy ktoś mógłby udostępnić taki plik dla którego mu Inicjalizacja wysyłki wsadowej paczki faktur działa. Link podany w swaggerze(http://ksef.mf.gov.pl/schema/gtw/svc/batch/init/request/2021/10/01/0001/InitRequest), czymkolwiek jest, też nie działa :) Pozdrowienia dla ludzi odpowiedzialnych za ksefa.

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.