Krajowy system e-Faktur

AL
  • Rejestracja:około 3 lata
  • Ostatnio:10 miesięcy
  • Postów:38
0

Generowanie PDF faktury i UPO https://github.com/ksef4dev/ksef-fop, zależność dostępna w maven central: io.alapierre.ksef:ksef-fop:1.0.3
Chętni do wsparcie i rozwoju projektu są bardzo mile widziani.

KU
jak wyglada PDF faktury ktory tworzysz z tej appki?
AL
przykładowy PDF powinie być w kodzie na GitHub - jeśli nie, to trzeba uruchomić przykład i wygenerować. W testach jest sporo przykładowych plików XML
K6
W jaki sposób generujesz plik ksef_invoice.xsl?
AL
szablon FOP pisaliśmy "z ręki". Można próbować bawić się z narzędziami Altova. Kiedyś był też Fop Designer, ale chyba już nie jest rozwiany.
ZB
  • Rejestracja:ponad rok
  • Ostatnio:około godziny
  • Postów:34
0

Mam pytanie teoretyczne, bo nie znam się na merytorycznej stronie fakturowania. Zauważyłem, że przez API mogę wystawić fakturę sam dla siebie (ten sam NIP jako wystawca i odbiorca), czy to jest dopuszczalne w praktyce i będzie występować?

K2
Nie wiem czy KSeF jest miejscem na takie faktury, ale w praktyce się zdarzają - to dokumenty wewnętrzne do "rozliczenia VAT, odliczeń" itp. (np. gdy ktoś rozlicza "kluczem" po całym miesiącu/roku).
Dzyszla
Generalnie nie jest to zabronione i może to być forma dokumentowania świadczenia usług na samego siebie. Ale faktycznie, nie jest to też obowiązek fakturowy.
Roman Mokrzan
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 2 miesiące
  • Postów:159
0

(34 strony o ksef? To takie ciekawe, tak dużo płacą za ksef czy o co tu chodzi?)


Dzyszla
To tak skopane a jednocześnie obowiązkowe dla wszystkich prowadzących jakąkolwiek działalność, że bez wzajemnego rozwikływania, co autor miał na myśli, to by cały handel w kraju upadł (i to wcale nie hiperbola). A płacą... Tak, dużo... Po 30-50 mln zł rocznie. Tylko nie nam ;) My to pokrywamy z podatków ;p
Roman Mokrzan
Kto dostaje te 30 baniek?
Dzyszla
Aplikacje Krytyczne + obsługa serwerów (nie wiem już sam, kto nad tym ma pieczę) + MF wraz z KAS i IAS. I pewnie niejeden po drodze jeszcze.
74SiMs74
  • Rejestracja:ponad rok
  • Ostatnio:12 miesięcy
  • Postów:9
0

Witam może ktoś znajdzie się tutaj kto zrobił łączenie się z tym Ksefem poprzed Delphi xe, utknąłem niesamowicie na InitToken, nie ważne co zrobię ciągle mam bad request 400, xml już z wypełnionymi danymi czytam z pliku, i w formie streama bajtów wysyłam go do api. Nic nie zwraca poza tym bad request i w tym samym momencie program się rozsypuje:

Kopiuj
SSLIOHandler.SSLOptions.Method := sslvSSLv23;
SSLIOHandler.SSLOptions.Mode := sslmUnassigned;
HTTPClient.IOHandler := SSLIOHandler;

Headers.Add('Content-Type: application/octet-stream');
Headers.Add('Accept: application/json');
HTTPClient.Request.CustomHeaders.AddStrings(Headers);
HTTPClient.Request.ContentType := 'application/octet-stream';
EndpointURL := 'https://ksef-test.mf.gov.pl/api/online/Session/InitToken';

FileStream := TFileStream.Create('testy5.xml', fmOpenRead);
SetLength(Bytes, FileStream.Size);
FileStream.Read(Bytes[0], FileStream.Size);
XMLStream2 := TBytesStream.Create(Bytes);
ResponseContent := HTTPClient.POST(EndpointURL, XMLStream2);

jeszcze plik xml wygląda tak :

Kopiuj
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns3:InitSessionTokenRequest 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>20231212-CR-FEF3FB48F1-72ABF09F83-C1</Challenge>
    <Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
      <ns2:Identifier>nip ten sam co w challenge</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>
    <Token>yziCrvllyGwDoEBof0wd60S2CqMxBExbLT9VVJGE3OA30e2LYCig06P3g4Q0ArRnF4BOPi7cl7009i3Ul8AsIkgiGDPzqDNR99sRcLyf/vklN8X/fxk14Uvj+YELip3AQxTVsXuJU59ljpIm6pdZOj4VFhhRd1vsYC18JU8UqV8oWge3uQX+vn75ZJZOG6RXf5o4h3sq0pS00csAp/ckpXQ0WxRw+j1mkX2tATLXAs1/iglHRpiIPkSQ9UW4VOtf8srqkL3SRfuJ+vNQpOfRS1fIjo6xDjW87NpiPkm0Y107rTtEThe5oeqjM59LNqG0HJ0/bPUxju3vkwGiE+oCow==</Token>
  </ns3:Context>
</ns3:InitSessionTokenRequest>

edytowany 1x, ostatnio: 74SiMs74
Zobacz pozostałe 12 komentarzy
Dzyszla
Ten YAML niestety jest nie do końca zgodny ze standardem. Z tego też powodu oni swojego swaggera szybko wycofali, bo im nie działał.
74SiMs74
czyli po za fiddlem i tego typu programami nie ma innego sposobu na testowanie tego ?
Dzyszla
Tylko podglądając wysyłane/odbierane dane masz 100% pewności co do tego, co jest przekazywane i w jakiej postaci.
74SiMs74
Za pomocą postmana udało mi się wysłać, owszem jest 'Nieprawidłowe wyzwanie autoryzacyjne' ale to już zawsze coś..
MI
może dodaj jaszcze (będziesz widział co tak naprawdę wysyłasz/odbierasz) : HTTPClient.Intercept:= IdConnectionIntercept1; procedure TForm2.IdConnectionIntercept1Receive(ASender: TIdConnectionIntercept; var ABuffer: TIdBytes); begin memoResponse.Text := memoResponse.Text + TEncoding.UTF8.GetString(ABuffer); end; procedure TForm2.IdConnectionIntercept1Send(ASender: TIdConnectionIntercept; var ABuffer: TIdBytes); begin memoRequest.Text := memoRequest.Text + TEncoding.UTF8.GetString(ABuffer); end;
MA
  • Rejestracja:ponad 2 lata
  • Ostatnio:5 miesięcy
  • Postów:9
1

Aktualizacja API Krajowego Systemu e-Faktur i Aplikacji Podatnika KSeF na środowisku testowym

14 grudnia 2023 r. w godzinach od 10.00 do 17.00 na środowisku testowym planowana jest aktualizacja API
Aktualizacja API Krajowego Systemu e-Faktur do wersji 2.2.0 obejmuje:

  1. dodanie usługi do weryfikacji i pobrania faktury po numerze KSeF i skrócie dokumentu (linki weryfikacyjne),
  2. poprawę walidacji enumów podczas parsowania JSON (wielkość znaków - dopuszczalne enumy zgodne z kontraktem),
  3. aktualizację specyfikacji interfejsów.
Dzyszla
Znów skok o minora? Ciekawe, co jeszcze zmienią, o czym nie napisali, jak ostatnio.
MA
tak naprawdę powinien być okres stabilizacji a nie implementacji nowych zmian.
Dzyszla
W lipcu będzie ;)
GB
nie, w sierpniu... W lipcu wyjdą błędy skalowalności rozwiązania...
Dzyszla
Wiadomo już, co nie działa dzisiaj?
P2
  • Rejestracja:prawie 4 lata
  • Ostatnio:około rok
  • Postów:148
0

Witam.
Chciałbym w pobrać faktury z KSeF. Udało się komuś to zrobić ?

edytowany 1x, ostatnio: pawelus222
Zobacz pozostałe 4 komentarze
Dzyszla
Czyli co - wywołujesz adres i... 0 bajtów w odpowiedzi?
P2
po modyfikacji kodu wyświetla błąd dotyczący schemy
Dzyszla
To dołącz to, co wysyłasz.
Dzyszla
Rozumiem, że chodzi o common?
P2
Udało się :) Działa, faktury są pobierane
74SiMs74
  • Rejestracja:ponad rok
  • Ostatnio:12 miesięcy
  • Postów:9
0

Posiada ktoś fakturę korygującą fakturę zaliczkową która przechodzi ? Ksef-test tworzy ale wgrywając ją do Ksef-testy pokazuje że są błędy

TO
Zweryfikuj sobie fakturę za pomocą XSD to się może dowiesz czemu nie przechodzi.
74SiMs74
Gdzie znajdę te XSD ?
TO
@74SiMs74: na stronach ksef jest link do schematu. Poza tym w samej fakturze w XML masz ten link w atrybucie xmlns.
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:39 minut
  • Postów:1595
0

Hej mam pytanie

Kopiuj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:InitSessionTokenRequest
	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>TUTAJ PRZEKAZUJE CHALLENGE z /online/Session/AuthorisationChallenge i to już mam</Challenge>
		<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
			<ns2:Identifier>TUTAJ NIP</ns2:Identifier>
		</Identifier>
		<DocumentType>
			<ns2:Service>KSeF</ns2:Service>
			<ns2:FormCode>
				<ns2:SystemCode>FA (1)</ns2:SystemCode>
				<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
				<ns2:TargetNamespace>http://crd.gov.pl/wzor/2021/11/29/11089/</ns2:TargetNamespace>
				<ns2:Value>FA</ns2:Value>
			</ns2:FormCode>
		</DocumentType>
		<Encryption>
			<ns2:EncryptionKey>
				<ns2:Encoding>Base64</ns2:Encoding>
				<ns2:Algorithm>AES</ns2:Algorithm>
				<ns2:Size>256</ns2:Size>				<ns2:Value>Kmrs/g9ZjI5lKDoMukGDMDULgvx0BkZ6qHEazLLo+LmzK4FNhNp4owcPioydkuiJE02norz5P5hjFO+SMO9kgtPji0Qjx57B+o6tKMUlL6EA3nn40+JNkZuvW+hUnEt7/kxZCcjxEXTuLpQuANwovUxdej041nKRY+sthBEDb3gN4pzJ+HfACysB8H5dpvZj1MkBe7hydLCJlNkEYHYA5dO/3FnW/5fh12Be3ij7Z410+3XZT5AiteEwGCJCPdC0epM3yJgi8uZt2vqn83fgYqSqmMtXLk0ZVjTT4Z1wd2cZ3DF7tlIfoYeB2DKQiwbXAZr/W3jVzYliXBykZLC/Sg==</ns2:Value>
			</ns2:EncryptionKey>
			<ns2:EncryptionInitializationVector>
				<ns2:Encoding>Base64</ns2:Encoding>
				<ns2:Bytes>16</ns2:Bytes>
				<ns2:Value>H9KQyy/SHurlswE4pxSIsg==</ns2:Value>
			</ns2:EncryptionInitializationVector>
			<ns2:EncryptionAlgorithmKey>
				<ns2:Algorithm>RSA</ns2:Algorithm>
				<ns2:Mode>ECB</ns2:Mode>
				<ns2:Padding>PKCS#1</ns2:Padding>
			</ns2:EncryptionAlgorithmKey>
			<ns2:EncryptionAlgorithmData>
				<ns2:Algorithm>AES</ns2:Algorithm>
				<ns2:Mode>CBC</ns2:Mode>
				<ns2:Padding>PKCS#7</ns2:Padding>
			</ns2:EncryptionAlgorithmData>
		</Encryption>
<Token>uH6dmA9lr7/5izGMOTXVzIAe1awXZYZ61zLCEaImSLP+BftDtziV5I+4EaKvWZ+IUCkXHP8FEGDsLHfefUVLS5vbZ8r0W5UxiSqqOAKxvkE7pCfh31+AmKZxZa0TlXYK5EYa4RkJhm7HTgKe4WGZ/Y4G2PdCzdImtvZL49yqQQ3bLqeGeVJ9rMzkuxCbtKGbdopN1/V+64fvLClIuolWI+/z0FlxDVE9a0f8EFKPPpzGowVwJcn5PHBkvVh45vT+pyNbDSvEsyL/udRBXCioWbgRaZReRJNIg6YWZLTSHyi8BK4ofQVuhdcPwHjkETmEQ0aktj+uyqmxqvHbFTA93Q==</Token>
	</ns3:Context>
</ns3:InitSessionTokenRequest>

Natomiast nie ogarniam TOKEN'a (to jest ten TOKEN API ? ) oraz sekcji Encryption (mam sobie klucz wygenerować lokalnie i co z nim zrobić?) podpowie ktoś coś?

Dzyszla
Token to zaszyfrowana konkatencja tokena otrzymanego z KSeF (funkcją generowania tokena), separatora (|) oraz czasu z AuthorisationChallange zapisanego w postaci znacznika Java (liczba milisekund od 1.01.1970UTC) - jak na stronie 23 dokumentacji.
woolfik
a masz linka do tej dokumentacji? bo ja mam tylko yamla
74SiMs74
  • Rejestracja:ponad rok
  • Ostatnio:12 miesięcy
  • Postów:9
0

Używał ktoś kiedyś Postmana ? Ciągle dostaje odpowiedź "Pusta treść żądania." Ustawiłem Headers na octet-stream plik xml przerobiłem konwerterem na format binarny ale wciąż sie pokazuje tylko :"Pusta treść żądania."

RK
Zobacz czy masz w postman dodany nagłówek Content-Length --- u mnie jak go wyłączyłem i włączyłem ponownie to przestał się pojawiać komunikat "Pusta treść żądania."
74SiMs74
o dzięki działa, czyli w aplikacjach też trzeba go ustawiać ?
JP
  • Rejestracja:ponad rok
  • Ostatnio:10 miesięcy
  • Postów:1
0

Czy ktoś jest mi w stanie w prosty sposób wyjaśnić co ma zawierać kod QR, który ma być obowiązkowo zamieszczany na każdej wizualizacji faktury przesłanej do KSEF?

Zobacz pozostałe 8 komentarzy
Dzyszla
Bo jeśli faktura będzie wystawiana poza KSeF lub będziesz chciał dać wizualizację takiej z KSeF, to będziesz musiał QR jeszcze na niej umieścić.
JP
Czyli na ten moment nie wiadomo jak utworzyć QR kod do wizualizacji faktury z KSEF?
woolfik
technicznie jeśli wiadomo jakie dane mają siętam znaleźć to wiadomo też jak z tego zrobić qrcode natomiat z tego co mi wiadomo standardów qrcode jest kilka
Dzyszla
@woolfik: Masz gaz ziemny, mąkę, wodę, jajko, proszek do pieczenia - jak z tego upiec ciast? Ugotować jajko czy zagazować proszek do pieczenia? Tyle wiadomo.
ZB
  • Rejestracja:ponad rok
  • Ostatnio:około godziny
  • Postów:34
0

A jak wygląda kwestia używania NIPów EU? Bo chciałem tak z marszu zalogować się nipem PLxxxxxxxxxx, tym samym co używam do testów, ale z prefixem i zonk. Dostałem kopa w zad od API już na etapie logowania. Są jakieś wytyczne?

Dzyszla
Bo to system tylko dla ludzi z PL, więc nie obsłuzy NIPu EU jako sprzedawcy.
ZB
Wiem, ale w takim razie nie wolno używać NIPu w formie z PL? Ani w logowaniu, ani w fakturach?
RK
  • Rejestracja:ponad rok
  • Ostatnio:około rok
  • Postów:6
0

Walczę aby wysłać FV na demo.
Mój json wygląda tak:

Kopiuj
{
  "InvoiceHash": {
    "HashSHA": {
      "Algorithm": "SHA-256",
      "Encoding": "Base64",
      "Value": "QohnFbnJGdX4pyHgfAL4j6/ipwrm8iAeySAh48yPo+Y="
    },
    "FileSize": 3342
  },
  "InvoicePayload": {
    "Type": "plain",
    "InvoiceBody": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxGYWt0dXJhIHhtbG5zOmV0ZD0iaHR0cDovL2NyZC5nb3YucGwveG1sL3NjaGVtYXR5L2R6aWVkemlub3dlL21mLzIwMjIvMDEvMDUvZUQvRGVmaW5pY2plVHlweS8iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQp4bWxucz0iaHR0cDovL2NyZC5nb3YucGwvd3pvci8yMDIzLzA2LzI5LzEyNjQ4LyI+DQoJPE5hZ2xvd2VrPg0KCQk8S29kRm9ybXVsYXJ6YSBrb2RTeXN0ZW1vd3k9IkZBICgyKSIgd2Vyc2phU2NoZW15PSIxLTBFIj5GQTwvS29kRm9ybXVsYXJ6YT4NCgkJPFdhcmlhbnRGb3JtdWxhcnphPjI8L1dhcmlhbnRGb3JtdWxhcnphPg0KCQk8RGF0YVd5dHdvcnplbmlhRmE+MjAyMi0wMS0wMVQwMDowMDowMFo8L0RhdGFXeXR3b3J6ZW5pYUZhPg0KCQk8U3lzdGVtSW5mbz5TYW1wbG9GYWt0dXI8L1N5c3RlbUluZm8+DQoJPC9OYWdsb3dlaz4NCgk8UG9kbWlvdDE+DQoJCTxEYW5lSWRlbnR5ZmlrYWN5am5lPg0KCQkJPE5JUD42NzUxMzM4ODcyPC9OSVA+DQoJCQk8TmF6d2E+UmFmYcWCIEt1Ym93aWN6PC9OYXp3YT4NCgkJPC9EYW5lSWRlbnR5ZmlrYWN5am5lPg0KCQk8QWRyZXM+DQoJCQk8S29kS3JhanU+UEw8L0tvZEtyYWp1Pg0KCQkJPEFkcmVzTDE+dWwuIEt3aWF0b3dhIDEgbS4gMjwvQWRyZXNMMT4NCgkJCTxBZHJlc0wyPjAwLTAwMSBXYXJzemF3YTwvQWRyZXNMMj4NCgkJPC9BZHJlcz4NCgkJPERhbmVLb250YWt0b3dlPg0KCQkJPEVtYWlsPmFiY0BhYmMucGw8L0VtYWlsPg0KCQkJPFRlbGVmb24+NjY3NDQ0NTU1PC9UZWxlZm9uPg0KCQk8L0RhbmVLb250YWt0b3dlPg0KCTwvUG9kbWlvdDE+DQoJPFBvZG1pb3QyPg0KCQk8RGFuZUlkZW50eWZpa2FjeWpuZT4NCgkJCTxOSVA+NjU5MTUxMTk0MTwvTklQPg0KCQkJPE5hendhPlNlcGllbGFrPC9OYXp3YT4NCgkJPC9EYW5lSWRlbnR5ZmlrYWN5am5lPg0KCQk8QWRyZXM+DQoJCQk8S29kS3JhanU+UEw8L0tvZEtyYWp1Pg0KCQkJPEFkcmVzTDE+dWwuIFBvbG5hIDE8L0FkcmVzTDE+DQoJCQk8QWRyZXNMMj4wMC0wMDEgV2Fyc3phd2E8L0FkcmVzTDI+DQoJCTwvQWRyZXM+DQoJCTxEYW5lS29udGFrdG93ZT4NCgkJCTxFbWFpbD5qYW5Aa293YWxza2kucGw8L0VtYWlsPg0KCQkJPFRlbGVmb24+NTU1Nzc3OTk5PC9UZWxlZm9uPg0KCQk8L0RhbmVLb250YWt0b3dlPg0KCQk8TnJLbGllbnRhPmZkZmQ3NzgzNDM8L05yS2xpZW50YT4NCgk8L1BvZG1pb3QyPg0KCTxGYT4NCgkJPEtvZFdhbHV0eT5QTE48L0tvZFdhbHV0eT4NCgkJPFBfMT4yMDIyLTAyLTE1PC9QXzE+DQoJCTxQXzFNPldhcnN6YXdhPC9QXzFNPg0KCQk8UF8yPkZWMjAyMi8wMi8xNTA8L1BfMj4NCgkJPFBfNj4yMDIyLTAxLTI3PC9QXzY+DQoJCTxQXzEzXzE+MTY2Ni42NjwvUF8xM18xPg0KCQk8UF8xNF8xPjM4My4zMzwvUF8xNF8xPg0KCQk8UF8xM18zPjAuOTU8L1BfMTNfMz4NCgkJPFBfMTRfMz4wLjA1PC9QXzE0XzM+DQoJCTxQXzE1PjIwNTE8L1BfMTU+DQoJCTxBZG5vdGFjamU+DQoJCQk8UF8xNj4yPC9QXzE2Pg0KCQkJPFBfMTc+MjwvUF8xNz4NCgkJCTxQXzE4PjI8L1BfMTg+DQoJCQk8UF8xOEE+MjwvUF8xOEE+DQoJCQk8WndvbG5pZW5pZT4NCgkJCQk8UF8xOU4+MTwvUF8xOU4+DQoJCQk8L1p3b2xuaWVuaWU+DQoJCQk8Tm93ZVNyb2RraVRyYW5zcG9ydHU+DQoJCQkJPFBfMjJOPjE8L1BfMjJOPg0KCQkJPC9Ob3dlU3JvZGtpVHJhbnNwb3J0dT4NCgkJCTxQXzIzPjI8L1BfMjM+DQoJCQk8UE1hcnp5Pg0KCQkJCTxQX1BNYXJ6eU4+MTwvUF9QTWFyenlOPg0KCQkJPC9QTWFyenk+DQoJCTwvQWRub3RhY2plPg0KCQk8Um9kemFqRmFrdHVyeT5WQVQ8L1JvZHphakZha3R1cnk+DQoJCTxGUD4xPC9GUD4NCgkJPERvZGF0a293eU9waXM+DQoJCQk8S2x1Y3o+cHJlZmVyb3dhbmUgZ29kemlueSBkb3dvenU8L0tsdWN6Pg0KCQkJPFdhcnRvc2M+ZG5pIHJvYm9jemUgMTc6MDAgLSAyMDowMDwvV2FydG9zYz4NCgkJPC9Eb2RhdGtvd3lPcGlzPg0KCQk8RmFXaWVyc3o+DQoJCQk8TnJXaWVyc3phRmE+MTwvTnJXaWVyc3phRmE+DQoJCQk8VVVfSUQ+YWFhYTExMTEzMzMzOTk5MDwvVVVfSUQ+DQoJCQk8UF83PmxvZMOzd2thIFppbW5vdGVjaCBtazE8L1BfNz4NCgkJCTxQXzhBPnN6dC48L1BfOEE+DQoJCQk8UF84Qj4xPC9QXzhCPg0KCQkJPFBfOUE+MTYyNi4wMTwvUF85QT4NCgkJCTxQXzExPjE2MjYuMDE8L1BfMTE+DQoJCQk8UF8xMj4yMzwvUF8xMj4NCgkJPC9GYVdpZXJzej4NCgkJPEZhV2llcnN6Pg0KCQkJPE5yV2llcnN6YUZhPjI8L05yV2llcnN6YUZhPg0KCQkJPFVVX0lEPmFhYWExMTExMzMzMzk5OTE8L1VVX0lEPg0KCQkJPFBfNz53bmllc2llbmllIHNwcnrEmXR1PC9QXzc+DQoJCQk8UF84QT5zenQuPC9QXzhBPg0KCQkJPFBfOEI+MTwvUF84Qj4NCgkJCTxQXzlBPjQwLjY1PC9QXzlBPg0KCQkJPFBfMTE+NDAuNjU8L1BfMTE+DQoJCQk8UF8xMj4yMzwvUF8xMj4NCgkJPC9GYVdpZXJzej4NCgkJPEZhV2llcnN6Pg0KCQkJPE5yV2llcnN6YUZhPjM8L05yV2llcnN6YUZhPg0KCQkJPFVVX0lEPmFhYWExMTExMzMzMzk5OTI8L1VVX0lEPg0KCQkJPFBfNz5wcm9tb2NqYSBsb2TDs3drYSBwZcWCbmEgbWxla2E8L1BfNz4NCgkJCTxQXzhBPnN6dC48L1BfOEE+DQoJCQk8UF84Qj4xPC9QXzhCPg0KCQkJPFBfOUE+MC45NTwvUF85QT4NCgkJCTxQXzExPjAuOTU8L1BfMTE+DQoJCQk8UF8xMj41PC9QXzEyPg0KCQk8L0ZhV2llcnN6Pg0KCQk8UGxhdG5vc2M+DQoJCQk8WmFwbGFjb25vPjE8L1phcGxhY29ubz4NCgkJCTxEYXRhWmFwbGF0eT4yMDIyLTAxLTI3PC9EYXRhWmFwbGF0eT4NCgkJCTxGb3JtYVBsYXRub3NjaT42PC9Gb3JtYVBsYXRub3NjaT4NCgkJPC9QbGF0bm9zYz4NCgkJPFdhcnVua2lUcmFuc2FrY2ppPg0KCQkJPFphbW93aWVuaWE+DQoJCQkJPERhdGFaYW1vd2llbmlhPjIwMjItMDEtMjY8L0RhdGFaYW1vd2llbmlhPg0KCQkJCTxOclphbW93aWVuaWE+NDM1NDM0MzwvTnJaYW1vd2llbmlhPg0KCQkJPC9aYW1vd2llbmlhPg0KCQk8L1dhcnVua2lUcmFuc2FrY2ppPg0KCTwvRmE+DQoJPFN0b3BrYT4NCgkJPEluZm9ybWFjamU+DQoJCQk8U3RvcGthRmFrdHVyeT5LYXBpYcWCIHpha8WCYWRvd3kgNSAwMDAgMDAwPC9TdG9wa2FGYWt0dXJ5Pg0KCQk8L0luZm9ybWFjamU+DQoJCTxSZWplc3RyeT4NCgkJCTxLUlM+MDAwMDA5OTk5OTwvS1JTPg0KCQkJPFJFR09OPjk5OTk5OTk5OTwvUkVHT04+DQoJCQk8QkRPPjAwMDA5OTk5OTwvQkRPPg0KCQk8L1JlamVzdHJ5Pg0KCTwvU3RvcGthPg0KPC9GYWt0dXJhPg0K"
  }
}

Oczywiście mam podpięty token sesji pod to wywołanie "PUT" - sesja utworzona bez wskazanego szyfrowania treści

XML opisujący FV jest OK. Przechodzi przez inną aplikację.
Porównywałem invoice body z widocznym w innej aplikacji i jest takie samo.
To samo z Hashem - też powinien być OK.

natomiast cały czas dostaję zwrotkę z KSEF błędem:

Kopiuj
"exceptionDetailList": [
    {
        "exceptionCode": 21001,
        "exceptionDescription": "Nieczytelna treść."
    }
]

Niestety nie mogę tu załączyć xml-a FV.
Można go pobrać tu jak by ktoś miał czas sprawdzić czy na pewno mam dobrze hash wyliczony i body.
https://devdt.pl/prv/fv.txt
Może ktoś ma pomysł co jeszcze mogę sprawdzić bo utknąłem.
Z góry dzięki.

edytowany 1x, ostatnio: RafKrak
Grzegorz W
Wartości w json są poprawne, mnie wychodzi to samo. Xml też zgodny ze schemą. Może problem jest w nagłówku HTML? Powinno być coś takiego: Content-Length: <rozmar> Accept: application/json SessionToken: <token> Content-Type: application/json
RK
@Grzegorz W - Dzięki za poświęcony czas i potwierdzenie. Z apki c# przechodzi - z Postmana i mojej VB.net nie ... przyjrzę się samemu requestowi skoro mam potwierdzenie ze json body jest ok. DZIĘKI !
RK
Znalezione... problemem było to że taki w JSON były z dużej liter a mają być zmałej (nazwy tagów)
RK
  • Rejestracja:ponad rok
  • Ostatnio:około rok
  • Postów:6
0

Invoice/Send nie działa z POSTMANA -- WHY ??
Na oko prosty temat ale utknąłem wiec z góry dziękuje za wszelkie wskazówki.
Jak puścić request do https://ksef-demo.mf.gov.pl/api/online/Invoice/Send z poziomu POSTMAN
W nagłówkach mam:
image

Sesja utworzona bez wskazanego szyfrowania.

W body wklejam takiego JSONA.

Kopiuj
{
  "InvoiceHash": {
    "HashSHA": {
      "Algorithm": "SHA-256",
      "Encoding": "Base64",
      "Value": "QohnFbnJGdX4pyHgfAL4j6/ipwrm8iAeySAh48yPo+Y="
    },
    "FileSize": 3342
  },
  "InvoicePayload": {
    "Type": "plain",
    "InvoiceBody": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxGYWt0dXJhIHhtbG5zOmV0ZD0iaHR0cDovL2NyZC5nb3YucGwveG1sL3NjaGVtYXR5L2R6aWVkemlub3dlL21mLzIwMjIvMDEvMDUvZUQvRGVmaW5pY2plVHlweS8iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQp4bWxucz0iaHR0cDovL2NyZC5nb3YucGwvd3pvci8yMDIzLzA2LzI5LzEyNjQ4LyI+DQoJPE5hZ2xvd2VrPg0KCQk8S29kRm9ybXVsYXJ6YSBrb2RTeXN0ZW1vd3k9IkZBICgyKSIgd2Vyc2phU2NoZW15PSIxLTBFIj5GQTwvS29kRm9ybXVsYXJ6YT4NCgkJPFdhcmlhbnRGb3JtdWxhcnphPjI8L1dhcmlhbnRGb3JtdWxhcnphPg0KCQk8RGF0YVd5dHdvcnplbmlhRmE+MjAyMi0wMS0wMVQwMDowMDowMFo8L0RhdGFXeXR3b3J6ZW5pYUZhPg0KCQk8U3lzdGVtSW5mbz5TYW1wbG9GYWt0dXI8L1N5c3RlbUluZm8+DQoJPC9OYWdsb3dlaz4NCgk8UG9kbWlvdDE+DQoJCTxEYW5lSWRlbnR5ZmlrYWN5am5lPg0KCQkJPE5JUD42NzUxMzM4ODcyPC9OSVA+DQoJCQk8TmF6d2E+UmFmYcWCIEt1Ym93aWN6PC9OYXp3YT4NCgkJPC9EYW5lSWRlbnR5ZmlrYWN5am5lPg0KCQk8QWRyZXM+DQoJCQk8S29kS3JhanU+UEw8L0tvZEtyYWp1Pg0KCQkJPEFkcmVzTDE+dWwuIEt3aWF0b3dhIDEgbS4gMjwvQWRyZXNMMT4NCgkJCTxBZHJlc0wyPjAwLTAwMSBXYXJzemF3YTwvQWRyZXNMMj4NCgkJPC9BZHJlcz4NCgkJPERhbmVLb250YWt0b3dlPg0KCQkJPEVtYWlsPmFiY0BhYmMucGw8L0VtYWlsPg0KCQkJPFRlbGVmb24+NjY3NDQ0NTU1PC9UZWxlZm9uPg0KCQk8L0RhbmVLb250YWt0b3dlPg0KCTwvUG9kbWlvdDE+DQoJPFBvZG1pb3QyPg0KCQk8RGFuZUlkZW50eWZpa2FjeWpuZT4NCgkJCTxOSVA+NjU5MTUxMTk0MTwvTklQPg0KCQkJPE5hendhPlNlcGllbGFrPC9OYXp3YT4NCgkJPC9EYW5lSWRlbnR5ZmlrYWN5am5lPg0KCQk8QWRyZXM+DQoJCQk8S29kS3JhanU+UEw8L0tvZEtyYWp1Pg0KCQkJPEFkcmVzTDE+dWwuIFBvbG5hIDE8L0FkcmVzTDE+DQoJCQk8QWRyZXNMMj4wMC0wMDEgV2Fyc3phd2E8L0FkcmVzTDI+DQoJCTwvQWRyZXM+DQoJCTxEYW5lS29udGFrdG93ZT4NCgkJCTxFbWFpbD5qYW5Aa293YWxza2kucGw8L0VtYWlsPg0KCQkJPFRlbGVmb24+NTU1Nzc3OTk5PC9UZWxlZm9uPg0KCQk8L0RhbmVLb250YWt0b3dlPg0KCQk8TnJLbGllbnRhPmZkZmQ3NzgzNDM8L05yS2xpZW50YT4NCgk8L1BvZG1pb3QyPg0KCTxGYT4NCgkJPEtvZFdhbHV0eT5QTE48L0tvZFdhbHV0eT4NCgkJPFBfMT4yMDIyLTAyLTE1PC9QXzE+DQoJCTxQXzFNPldhcnN6YXdhPC9QXzFNPg0KCQk8UF8yPkZWMjAyMi8wMi8xNTA8L1BfMj4NCgkJPFBfNj4yMDIyLTAxLTI3PC9QXzY+DQoJCTxQXzEzXzE+MTY2Ni42NjwvUF8xM18xPg0KCQk8UF8xNF8xPjM4My4zMzwvUF8xNF8xPg0KCQk8UF8xM18zPjAuOTU8L1BfMTNfMz4NCgkJPFBfMTRfMz4wLjA1PC9QXzE0XzM+DQoJCTxQXzE1PjIwNTE8L1BfMTU+DQoJCTxBZG5vdGFjamU+DQoJCQk8UF8xNj4yPC9QXzE2Pg0KCQkJPFBfMTc+MjwvUF8xNz4NCgkJCTxQXzE4PjI8L1BfMTg+DQoJCQk8UF8xOEE+MjwvUF8xOEE+DQoJCQk8WndvbG5pZW5pZT4NCgkJCQk8UF8xOU4+MTwvUF8xOU4+DQoJCQk8L1p3b2xuaWVuaWU+DQoJCQk8Tm93ZVNyb2RraVRyYW5zcG9ydHU+DQoJCQkJPFBfMjJOPjE8L1BfMjJOPg0KCQkJPC9Ob3dlU3JvZGtpVHJhbnNwb3J0dT4NCgkJCTxQXzIzPjI8L1BfMjM+DQoJCQk8UE1hcnp5Pg0KCQkJCTxQX1BNYXJ6eU4+MTwvUF9QTWFyenlOPg0KCQkJPC9QTWFyenk+DQoJCTwvQWRub3RhY2plPg0KCQk8Um9kemFqRmFrdHVyeT5WQVQ8L1JvZHphakZha3R1cnk+DQoJCTxGUD4xPC9GUD4NCgkJPERvZGF0a293eU9waXM+DQoJCQk8S2x1Y3o+cHJlZmVyb3dhbmUgZ29kemlueSBkb3dvenU8L0tsdWN6Pg0KCQkJPFdhcnRvc2M+ZG5pIHJvYm9jemUgMTc6MDAgLSAyMDowMDwvV2FydG9zYz4NCgkJPC9Eb2RhdGtvd3lPcGlzPg0KCQk8RmFXaWVyc3o+DQoJCQk8TnJXaWVyc3phRmE+MTwvTnJXaWVyc3phRmE+DQoJCQk8VVVfSUQ+YWFhYTExMTEzMzMzOTk5MDwvVVVfSUQ+DQoJCQk8UF83PmxvZMOzd2thIFppbW5vdGVjaCBtazE8L1BfNz4NCgkJCTxQXzhBPnN6dC48L1BfOEE+DQoJCQk8UF84Qj4xPC9QXzhCPg0KCQkJPFBfOUE+MTYyNi4wMTwvUF85QT4NCgkJCTxQXzExPjE2MjYuMDE8L1BfMTE+DQoJCQk8UF8xMj4yMzwvUF8xMj4NCgkJPC9GYVdpZXJzej4NCgkJPEZhV2llcnN6Pg0KCQkJPE5yV2llcnN6YUZhPjI8L05yV2llcnN6YUZhPg0KCQkJPFVVX0lEPmFhYWExMTExMzMzMzk5OTE8L1VVX0lEPg0KCQkJPFBfNz53bmllc2llbmllIHNwcnrEmXR1PC9QXzc+DQoJCQk8UF84QT5zenQuPC9QXzhBPg0KCQkJPFBfOEI+MTwvUF84Qj4NCgkJCTxQXzlBPjQwLjY1PC9QXzlBPg0KCQkJPFBfMTE+NDAuNjU8L1BfMTE+DQoJCQk8UF8xMj4yMzwvUF8xMj4NCgkJPC9GYVdpZXJzej4NCgkJPEZhV2llcnN6Pg0KCQkJPE5yV2llcnN6YUZhPjM8L05yV2llcnN6YUZhPg0KCQkJPFVVX0lEPmFhYWExMTExMzMzMzk5OTI8L1VVX0lEPg0KCQkJPFBfNz5wcm9tb2NqYSBsb2TDs3drYSBwZcWCbmEgbWxla2E8L1BfNz4NCgkJCTxQXzhBPnN6dC48L1BfOEE+DQoJCQk8UF84Qj4xPC9QXzhCPg0KCQkJPFBfOUE+MC45NTwvUF85QT4NCgkJCTxQXzExPjAuOTU8L1BfMTE+DQoJCQk8UF8xMj41PC9QXzEyPg0KCQk8L0ZhV2llcnN6Pg0KCQk8UGxhdG5vc2M+DQoJCQk8WmFwbGFjb25vPjE8L1phcGxhY29ubz4NCgkJCTxEYXRhWmFwbGF0eT4yMDIyLTAxLTI3PC9EYXRhWmFwbGF0eT4NCgkJCTxGb3JtYVBsYXRub3NjaT42PC9Gb3JtYVBsYXRub3NjaT4NCgkJPC9QbGF0bm9zYz4NCgkJPFdhcnVua2lUcmFuc2FrY2ppPg0KCQkJPFphbW93aWVuaWE+DQoJCQkJPERhdGFaYW1vd2llbmlhPjIwMjItMDEtMjY8L0RhdGFaYW1vd2llbmlhPg0KCQkJCTxOclphbW93aWVuaWE+NDM1NDM0MzwvTnJaYW1vd2llbmlhPg0KCQkJPC9aYW1vd2llbmlhPg0KCQk8L1dhcnVua2lUcmFuc2FrY2ppPg0KCTwvRmE+DQoJPFN0b3BrYT4NCgkJPEluZm9ybWFjamU+DQoJCQk8U3RvcGthRmFrdHVyeT5LYXBpYcWCIHpha8WCYWRvd3kgNSAwMDAgMDAwPC9TdG9wa2FGYWt0dXJ5Pg0KCQk8L0luZm9ybWFjamU+DQoJCTxSZWplc3RyeT4NCgkJCTxLUlM+MDAwMDA5OTk5OTwvS1JTPg0KCQkJPFJFR09OPjk5OTk5OTk5OTwvUkVHT04+DQoJCQk8QkRPPjAwMDA5OTk5OTwvQkRPPg0KCQk8L1JlamVzdHJ5Pg0KCTwvU3RvcGthPg0KPC9GYWt0dXJhPg0K"
  }
}

W zwrotce cały czas dostaję 400

Kopiuj
 "exceptionDetailList": [
            {
                "exceptionCode": 21001,
                "exceptionDescription": "Nieczytelna treść."
            }

Macie jakiś pomysł co jest źle ?

Z góry dzięki za wskazówki.

JR
  • Rejestracja:ponad rok
  • Ostatnio:2 miesiące
  • Postów:3
0

@RafKrak: "Nieczytelna treść" pojawia się gdy masz nieprawidłowy json. Ja nie mogłem się doszukać przyczyny, okazało się że wielkość znaków ma ogromne znaczenie. Dobrzy ludzie tutaj podesłali mi przykładowy json. Zrób próbę z czymś takim:

Kopiuj
{
    "invoiceHash": {
        "fileSize": 2505,
        "hashSHA": {
            "algorithm": "SHA-256",
            "encoding": "Base64",
            "value": "797991d276edb508a7a64ad1447bf9aadf091e0655403aa70e7cc0ea6185f25c"
        }
    },
    "invoicePayload": {
        "invoiceBody": "PD94bWwgdmVyc2lvbj0iMS4wI.........C9GYWt0dXJhPg==",
        "type": "plain"
    }
}

edytowany 1x, ostatnio: JRN
RK
Tak wlasnie znalazłem ... wielkość literki jednej ... "invoiceBody" ma być a miałem "InvoiceBody" ma być małe "i" --- dzięki za pomoc !
J3
  • Rejestracja:ponad rok
  • Ostatnio:około rok
  • Postów:6
0

Tak tylko w celu potwierdzenia, bo wiem że ksef nie działa, też wam leci taki błąd podczas próby wysłania faktury?
" I/O error on POST request for "https://ksef-test.mf.gov.pl/api/online/Session/AuthorisationChallenge": Connection reset; nested exception is javax.net.ssl.SSLException: Connection reset)""

SI
Nie działa, ale jeżeli dobrze pamiętam to zapowiedzieli że dzisiaj będą problemy w dostępie.
TW
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:1
0

Cześć wszystkim a więc otrzymałem już po wszelkich wygibasach taką wiadomość po wysłaniu Faktury na endpoint https://ksef-demo.mf.gov.pl/api/online/Invoice/Send

Kopiuj
{
  "timestamp": "2023-12-14T11:53:28.526Z",
  "referenceNumber": "20231214-SE-E3AAC357DC-AD4F881DC5-4F",
  "processingCode": 100,
  "processingDescription": "Proces został zarejestrowany.",
  "elementReferenceNumber": "20231214-EE-2175BEBD2B-F40308B155-35"
}

Lecz niestety jak już zapytam o tą fakturę o ten proces dostaje tak :

Kopiuj
{
	"exception": {
		"serviceCtx": "srvTRMFC",
		"serviceCode": "20231214-EX-FC2BF13358-021FFC8371-5D",
		"serviceName": "online.invoice.invoice.status",
		"timestamp": "2023-12-14T12:13:03.789Z",
		"referenceNumber": "20231214-SE-A6308A9073-19AAFEB67B-9D",
		"exceptionDetailList": [
			{
				"exceptionCode": 21164,
				"exceptionDescription": "Faktura o podanym identyfikatorze nie istnieje."
			}
		]
	}
}
edytowany 2x, ostatnio: twinslavie
TO
  • Rejestracja:prawie 2 lata
  • Ostatnio:3 minuty
  • Postów:12
0

Webservice KSeF nie działa - co robić?
Mam niewielkie doświadczenie z http, stąd moja prośba o radę.
Jak prawidłowo obsłużyć sytuację gdzie zamiast oczekiwanego wyniku w response przychodzi html z komunikatem błędu przeznaczonym dla przeglądarki internetowej?
Jak rozpoznać taką sytuację? Jak wyświetlić komunikat błędu przekazany na stronie?

edytowany 1x, ostatnio: TymOnX
TW
A w jakim programie korzystasz z obsługi poleceń HTTP ? Postman ? Insomnia ?
TO
Piszę program w c#, mam zaimportowane OpenAPI do klas, a w takiej sytuacji jak dziś wywala się brzydki błąd o problemie parsowania odpowiedzi przez jsona, bo w odpowiedzi jest html. Mogę cośtam nadpisać w wygenerowanych klasach, żeby to lepiej wyglądało, tylko nie wiem na jakich warunkach się oprzeć. W responsie były tylko 2 nagłówki, bodajże: Connection: keep-alive i Server: bigIP
Dzyszla
Ja im to zgłaszałem już 3-krotnie, że mają zwracać odpowiedź w kodzie błędu i najlepiej w formacie JSONa i niech się wypchają z HTML na 200. Zapewniali, że to poprawione. I deux pas. Pisz do nich na maila, przecież to jest jakieś nieporozumienie, co oni robią. Wysyłasz accepta jsona, a oni z radością dają "wszystko OK - masz tu HTMLa".
VL
  • Rejestracja:ponad rok
  • Ostatnio:4 miesiące
  • Postów:3
0

Witajcie.

Mam gorącą prośbę - czy ktoś może poratować aktualnym podpisanym plikiem xml dla InitSessionSigned, który na pewno przechodzi na ksef-test?

Walczę z tym od kilku dni, przerobiłem już chyba wszystkie przykłady na generowanie certyfikatu i porównania z plikami zamieszczanymi w tym wątku.
Podpis mam raczej prawidłowy, w każdym razie przechodzi walidację na weryfikacjapodpisu.pl
Co więcej, przechodzi autoryzacja na testowej aplikacji podatnika ("Podpisane żądanie autoryzacyjne/Dodaj plik") XD, ale w api już nie - dokument niezgody ze schemą (xsd).

Poratuje ktoś?

edytowany 1x, ostatnio: vladdyrykov
VL
Jakby ktoś chciał jednak pomóc to już nie trzeba, poradziłem sobie sam XD ale chętnie udostępnię swoją wersję jeśli ktoś będzie potrzebować.
RN
Jak najbardziej, możesz podać? Z góry dziękuję. Mam problem z encryption.
VL
Cześć, sorry że dopiero teraz. Zobacz post: Krajowy system e-Faktur
WJ
  • Rejestracja:ponad rok
  • Ostatnio:11 dni
  • Postów:8
0

Próbowałem "oswoić" nową funkcję API /Visibility/Hide ciągle zwraca mi "internal error" (500, "Błąd wewnętrzny (C)", czy może coś wczoraj było zepsute?

  • Wywoływana po stronie Odbiorcy faktury
  • Sesja powiązana z tokenem o pełnych uprawnieniach (aby wykluczyć możliwość, że przyczyną błędu jest ich brak)
  • Fakturę o numerze KSeF którą chcę ukryć, mogę np. pobrać (więc na pewno istnieje)
  • Faktura na pewno jest widoczna - zwraca ją Query/Invoice/Sync

Gdy wywołuję /Visibility/Show, to zgodnie z oczekiwaniem mam informację że faktura nie jest ukryta:

Kopiuj
[2023-12-12 17:13:36.1506]: Wysyłanie żądania HTTP
URL: https://ksef-test.mf.gov.pl/api/online/Invoice/Visibility/Show
Metoda: POST
HTTP Headers:
Content-Type:application/json
SessionToken:50c81632c6c9eaed023ac53ae97805e2ac6a61af7cf0608675898e2f886eadec
ksef-number-variant:v36
Dane:
{ "invoiceHideCancelationRequest":{"hidingCancelationReason":"Test","ksefReferenceNumber":"1111111111-20231211-E44A8F-1D26BE-F7"}}

[2023-12-12 17:13:36.2447]: Odpowiedź serwera: 400
tekst: {"exception":{"serviceCtx":"srvTEMFB","serviceCode":"20231212-EX-3126F2D900-58F48EC1EF-15","serviceName":"online.invoice.invoice.show","timestamp":"2023-12-12T16:13:36.493Z","referenceNumber":"20231212-SE-F70079BD25-8AE2F4B764-79","exceptionDetailList":[{"exceptionCode":21188,"exceptionDescription":"Faktura nie jest ukryta lub nie można uzyskac do niej dostępu."}]}}

Ale gdy dla tej faktury wywołuję Visibility/Hide, to dostaję błąd 500 (albo - w prywatnym narzeczu AK - "C")

Kopiuj
[2023-12-12 17:28:57.3990]: Wysyłanie żądania HTTP
URL: https://ksef-test.mf.gov.pl/api/online/Invoice/Visibility/Hide
Metoda: POST
HTTP Headers:
Content-Type:application/json
SessionToken:50c81632c6c9eaed023ac53ae97805e2ac6a61af7cf0608675898e2f886eadec
ksef-number-variant:v36
Dane:
{"invoiceHideRequest":{"hidingReason":"test","ksefReferenceNumber":"1111111111-20231211-E44A8F-1D26BE-F7"}}

[2023-12-12 17:28:57.5430]: Odpowiedź serwera: 500
tekst: {"exception":{"serviceCtx":"default","serviceCode":"20231212-EX-F73D57ECD7-C31E1027E4-27","serviceName":"online.invoice.invoice.hide","timestamp":"2023-12-12T16:28:57.775Z","referenceNumber":"20231212-SE-F70079BD25-8AE2F4B764-79","exceptionDetailList":[{"exceptionCode":-1000,"exceptionDescription":"Błąd wewnętrzny (C)."}]}}

/* numer NIP w numerze KSeF zmieniłem ze względu na zobowiązanie o poufności danych) */

Funkcji Show/Hide nie widzę w specyfikacji API (PDF), wystawionej na serwerze testowym, choć są w yaml-u. Więc nawet tego nie mogę wysłać na oficjalny e-mail helpdesku, bo w sumie to funkcje nieudokumentowane. Pozostało mi się tylko zapytać w tym wątku...

edytowany 1x, ostatnio: Witold Jaworski
Dzyszla
Oni dopiero wczoraj aktualizowali PDF. Sama funkcja pewnie przestała działać. Sprawdź dziś.
WJ
Dzięki, wczoraj (14 grudnia, po 23:00) faktycznie polecenia Show/Hide zaczęły działać, ale znalazłem dziwoląg w ich wynikach - zrobię o tym nowy post.
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:39 minut
  • Postów:1595
0

Hej sprawdzicie mnie?

Próbuję wysłać inittoken ale cały czas dostaję

Kopiuj
Błąd: {'serviceCtx': 'default', 'serviceCode': '20231214-EX-2AF57EFE0B-A759908AD8-BF', 'serviceName': 'online.session.session.token.init', 'timestamp': '2023-12-14T18:39:27.916Z', 'referenceNumber': '20231214-SE-0CC4847180-F912C29B0C-ED', 'exceptionDetailList': [{'exceptionCode': 20005, 'exceptionDescription': 'Nieprawidłowo zaszyfrowana treść.'}]}

Testowy token to: 4EA55DA74A1B9A92E064CC1DD8EC82CA71DBB133E6B697E5BF8E8837760B5B83
klucz publiczny pobrałem z testówki ten:
https://ksef-test.mf.gov.pl/security/pem

możecie sprawdzić czy nie walnąłem się przy generowaniu tokena przy
challenge:'20231214-CR-38BC3A046C-6B7B033145-A8'
time: '2023-12-14T18:41:33.449Z'

Kopiuj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:InitSessionTokenRequest
	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>20231214-CR-38BC3A046C-6B7B033145-A8</Challenge>
		<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
			<ns2:Identifier>5340820650</ns2:Identifier>
		</Identifier>
		<DocumentType>
			<ns2:Service>KSeF</ns2:Service>
			<ns2:FormCode>
				<ns2:SystemCode>FA (1)</ns2:SystemCode>
				<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
				<ns2:TargetNamespace>http://crd.gov.pl/wzor/2021/11/29/11089/</ns2:TargetNamespace>
				<ns2:Value>FA</ns2:Value>
			</ns2:FormCode>
		</DocumentType>		
		<Token>ENp8VO3+uWOhenJ9+fW9knncUwbBD3p/lkAFOyqFiXUKySLAIymCgpG6mbcI6snC4p1G1A4v2U2Xqg90OGsALgYq2SvaF8FKWa9RGXdSfWb0F0lqJpa8mNfiie+neQBUZvvNeaE31mccmcApxIYKxjFXgrIuf/ebQXS3tK69f6C49n+ir8VU1e8wn/f1+9Rp/JdaXJ+phLudwHL+CS2AiIMG2oH3PjAnuvN4C1pGXDgZ2CCr7H2reQ7WiDU8d3Zu6XwuOgYWiBIutjZ4zokYmlzOF9aVVVJKh2iCRJm/QOvrzsAvNWQ2i59IABzkKUqOtHxav0v2eQPsWeskgZDG+A==</Token>
	</ns3:Context>
</ns3:InitSessionTokenRequest>

Będę bardzo wdzięczny za pomoc w sprawdzeniu tego

VL
Cześć, FA (1) już nie działa. Sprawdź dla SystemCode FA (2) oraz TargetNamespace http://crd.gov.pl/wzor/2023/06/29/12648/ Jeszcze sprawdź czy czas zaszyfrowany w Token ma odpowiedni format (c#: challengeTimestamp.ToUnixTimeMilliseconds())
woolfik
Poprawiłem obie wartości, data też jest ok i ciągle to samo
Sławomir Osoba
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:1
0
Jacek Posiewała napisał(a):

Czy ktoś jest mi w stanie w prosty sposób wyjaśnić co ma zawierać kod QR, który ma być obowiązkowo zamieszczany na każdej wizualizacji faktury przesłanej do KSEF?

Zawartość kodu została "ujawniona" podczas jednej z prezentacji KAS. Będzie to link. W przykładzie był taki:
https://ksef.mf.gov.pl/api/common/Verify/5257775469-20220223-92C40A-AF2A4C-FC/YwucKLcs88uk6ivN00%2FC%2FNRYAKH2FduOb0v%2FccwpjTI%3D

Dzyszla
Lub był to jakiś wolny pomysł wykonany przed pojawieniem się w ogóle czegokolwiek - dla mnie to bez wartości.
Sławomir Osoba
W nowej dokumentacji 1.5 pojawił się analogiczny format.
Dzyszla
A jednak nie do końca... Oni piszą "web", na prezentacji było "api". Oni piszą "common/verification", a w przykładach podają "verify". Jak ja mam to na poważnie traktować?! Przecież tu się nic z niczym nie zgadza, nie mówiąc już, że w ogóle nie ma przypadków opisanych wymienionych w projekcie rozporządzenia. Kurna, chyba bym zwalniał tych ludzi jak leci. [i cyk, mail numer 51 do MF - po stu wreszcie zdecydują się zaprosić łaskawie na sensowne konsultacje?]
Marcin Gorski
  • Rejestracja:prawie 3 lata
  • Ostatnio:około rok
  • Postów:7
0

Cześć,

czy faktura V2 coś się zmieniła od września? Bo ja nie widzę zmian, a może nie zaktualizowali schemy? https://www.podatki.gov.pl/e-deklaracje/dokumentacja-it/struktury-dokumentow-xml/#ksef

Link o informacjach nowej faktury V2.
https://www.podatki.gov.pl/ksef/wyjasnienia-ksef/krajowy-system-e-faktur-przystosowany-do-struktury-fa-2/

Czy oni może mówią o tych zmianach z września? Ten KSeF to jeden duży śmietnik.

Pozdrawiam

Dzyszla
Od września jest dany wzór.
Marcin Gorski
a ok, dziękuje za info :)
VL
  • Rejestracja:ponad rok
  • Ostatnio:4 miesiące
  • Postów:3
1
woolfik napisał(a):

Hej sprawdzicie mnie?

Próbuję wysłać inittoken ale cały czas dostaję

Kopiuj
Błąd: {'serviceCtx': 'default', 'serviceCode': '20231214-EX-2AF57EFE0B-A759908AD8-BF', 'serviceName': 'online.session.session.token.init', 'timestamp': '2023-12-14T18:39:27.916Z', 'referenceNumber': '20231214-SE-0CC4847180-F912C29B0C-ED', 'exceptionDetailList': [{'exceptionCode': 20005, 'exceptionDescription': 'Nieprawidłowo zaszyfrowana treść.'}]}

Testowy token to: 4EA55DA74A1B9A92E064CC1DD8EC82CA71DBB133E6B697E5BF8E8837760B5B83
klucz publiczny pobrałem z testówki ten:
https://ksef-test.mf.gov.pl/security/pem

możecie sprawdzić czy nie walnąłem się przy generowaniu tokena przy
challenge:'20231214-CR-38BC3A046C-6B7B033145-A8'
time: '2023-12-14T18:41:33.449Z'

Kopiuj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:InitSessionTokenRequest
	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>20231214-CR-38BC3A046C-6B7B033145-A8</Challenge>
		<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
			<ns2:Identifier>5340820650</ns2:Identifier>
		</Identifier>
		<DocumentType>
			<ns2:Service>KSeF</ns2:Service>
			<ns2:FormCode>
				<ns2:SystemCode>FA (1)</ns2:SystemCode>
				<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
				<ns2:TargetNamespace>http://crd.gov.pl/wzor/2021/11/29/11089/</ns2:TargetNamespace>
				<ns2:Value>FA</ns2:Value>
			</ns2:FormCode>
		</DocumentType>		
		<Token>ENp8VO3+uWOhenJ9+fW9knncUwbBD3p/lkAFOyqFiXUKySLAIymCgpG6mbcI6snC4p1G1A4v2U2Xqg90OGsALgYq2SvaF8FKWa9RGXdSfWb0F0lqJpa8mNfiie+neQBUZvvNeaE31mccmcApxIYKxjFXgrIuf/ebQXS3tK69f6C49n+ir8VU1e8wn/f1+9Rp/JdaXJ+phLudwHL+CS2AiIMG2oH3PjAnuvN4C1pGXDgZ2CCr7H2reQ7WiDU8d3Zu6XwuOgYWiBIutjZ4zokYmlzOF9aVVVJKh2iCRJm/QOvrzsAvNWQ2i59IABzkKUqOtHxav0v2eQPsWeskgZDG+A==</Token>
	</ns3:Context>
</ns3:InitSessionTokenRequest>

Będę bardzo wdzięczny za pomoc w sprawdzeniu tego

Tutaj masz działający request na 100%. Jeśli w tym co generujesz nie ma gdzieś byka to znaczy że źle szyfrujesz token.

Kopiuj
<?xml version="1.0" encoding="utf-8"?>
<ns3:InitSessionTokenRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001">20231206-CR-E1965C1A43-02B3E652DC-81</Challenge>
    <Identifier xsi:type="ns2:SubjectIdentifierByCompanyType" xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001">
      <ns2:Identifier>1111111111</ns2:Identifier>
    </Identifier>
    <DocumentType xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001">
      <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>
    <Token xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001">LYplRV6pSqYMt1J9dpULaSccDpNojZnuQpdzijlWIj/cD6y9ON9VANSOnCRgMs5X023fGWgS/CrFnGdPXXzJfR+PFzztLAQwmlSVfNemIZIGKMc10WRrocE0wdu7ydoV31/9lp7In2W7sLNpu1GjBMG6YAc/hDRoskPUkoz7Z09xb7zD0xIzrfrqINgtjePyYL5/MCGMMczy61eivyPQwdXHmLUdT7rlfcRUrIkE20dQvh7WLnPWHHjUmVJS/QXnUuyvPKbbdvmKTKv3EaOrfuf5t/VNXjkBa0xRMfjDNjsyq60ZNcoUyWefc79zY1XCqfp8nm9GsVgNjdF2VoXZsQ==</Token>
  </ns3:Context>
</ns3:InitSessionTokenRequest>

Jeśli używasz net framework < 4.8 to szyfrowanie działa za pomocą bouncy castle. Jeśli 4.8 albo net core, to ten same efekt można uzyskać bez tej biblioteki:

Kopiuj
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;

// klucz publiczny środowiska testowego z publicKey.pem
private const string __pubKeyTest = @"-----BEGIN PUBLIC KEY-----
                                              MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWosgHSpiRLadA0fQbzshi5TluliZfDsJujPlyYqp6A3qnzS3WmHxtwgO58uTbemQ1HCC2qwrMwuJqR6l8tgA4ilBMDbEEtkzgbjkJ6xoEqBptgxivP/ovOFYYoAnY6brZhXytCamSvjY9KI0g0McRk24pOueXT0cbb0tlwEEjVZ8NveQNKT2c1EEE2cjmW0XB3UlIBqNqiY2rWF86DcuFDTUy+KzSmTJTFvU/ENNyLTh5kkDOmB1SY1Zaw9/Q6+a4VJ0urKZPw+61jtzWmucp4CO2cfXg9qtF6cxFIrgfbtvLofGQg09Bh7Y6ZA5VfMRDVDYLjvHwDYUHg2dPIk0wIDAQAB
                                     -----END PUBLIC KEY-----";

// token = token wygenerowany w Aplikacji Podatnika

var valueToEncrypt = $"{token}|{challengeTimestamp.ToUnixTimeMilliseconds()}";
var bytesToEncrypt = Encoding.UTF8.GetBytes(valueToEncrypt);

var rsaEngine = new Pkcs1Encoding(new RsaEngine());
var pem = __pubKeyTest;

using (var stringReader = new StringReader(pem))
{
       var pemObject = new PemReader(stringReader).ReadObject();
       var keyParameter = (AsymmetricKeyParameter)pemObject;
       rsaEngine.Init(true, keyParameter);
}

var encryptedToken = Convert.ToBase64String(rsaEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));

Powodzenia!

edytowany 4x, ostatnio: vladdyrykov
woolfik
no właśnie ja to w pythonie dziergam ale sprawdzę twoim kodem i zobaczę co wyjdzie :)
woolfik
faktycznie mam błąd przy generowaniu tokena, na twoim xml dostałem nieprawidłowy czas tokena co oznacza, że token jest poprawnie zakodowany, na moim wali błędem muszę znaleźć przyczynę w pythonie nie w xml
JacekStawicki360
  • Rejestracja:ponad 3 lata
  • Ostatnio:13 dni
  • Postów:19
0

Czesc
od kilku dni wciaz wisi wywolanie poniższej metody na Test. Ktoś ma pomysł dlaczego? Zakres dat był dość wąski. Spodziewana liczba zwracanych faktur to kilka szt.

Code 325: Zakończenie etapu podziału na podzapytania oraz inicjalizacja podprocesów przygotowania części odpowiedzi

Kopiuj
/online/Query/Invoice/Async/Status/{elementReferenceNumber}
edytowany 1x, ostatnio: JacekStawicki360
Zobacz pozostałe 2 komentarze
KE
U mnie jest ten sam problem - czy ktoś jeszcze mógłby to potwierdzić? (żebyśmy mieli pewność, że to konsekwencja problemów na środowisku testowym, a nie np. błędnie inicjalizowanych zapytań)
ZO
U mnie też właśnie leży od zeszłego piątku to pobieranie :(
casebe fx
Cały czas odpowiedź 325. A działało jeszcze tydzień temu.
KE
A zgłaszał ktoś z Was ten problem do MF? Znamy jakieś ich stanowisko co do tego problemu?
Zaczęło to w końcu dla was działać albo są jakieś informacje odnośnie tego? Ja dopiero co zaczynam integracje, i Sync (relatywnie) działa bez problemowo, ale Async się zatrzymuje na właśnie 325.
PA
  • Rejestracja:ponad rok
  • Ostatnio:6 miesięcy
  • Postów:5
0

Hej.
Ktoś poratuje z 21405 Dokument nie jest zgodny ze schemą (json) na https://ksef-test.mf.gov.pl/api/online/Invoice/Send?

<?php $faktura = '<?xml version="1.0" encoding="UTF-8"?>
    <Faktura xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2022/01/05/eD/DefinicjeTypy/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://crd.gov.pl/wzor/2023/06/29/12648/">
        <Naglowek>
            <KodFormularza kodSystemowy="FA (2)" wersjaSchemy="1-0E">FA</KodFormularza>...';

$faktura_base64 = base64_encode($faktura);
$faktura_hash = hash("SHA256", $faktura);
$faktura_hash_base64=base64_encode($faktura_hash);
$faktura_dlugosc = strlen($faktura);

$do_wyslania =
json_encode(array(
"invoiceHash" => array(
"hashSHA" => array(
"algorithm" => "SHA-256",
"encoding" => "Base64",
"value" => $faktura_hash_base64
),
"fileSize" => $faktura_dlugosc
),
"invoicePayload" => array(
"type" => "plain",
"invoiceBody" => $faktura_base64
)
))
;
$curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://ksef-test.mf.gov.pl/api/online/Invoice/Send",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => "PUT",
            CURLOPT_POSTFIELDS => $do_wyslania,
            CURLOPT_HTTPHEADER => array(
                
                "Content-Type: application/json",
                "SessionToken: $session_token",
                "Accept: application/json"
            ),
        ));

        $response = curl_exec($curl);

{
"invoiceHash":{
"hashSHA":{
"algorithm":"SHA-256",
"encoding":"Base64",
"value":"OGQxNjc2YTcxN2QyOTFhMjBmMTRkYzk0MzgzNTY0NDc0NzIzNzNjMWFkNjY2NmU3ZGI1N2FjMGVlYmQwNDUxZA=="
},
"fileSize":5136},
"invoicePayload":{
"type":"plain",
"invoiceBody":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KICAgICAgICA8RmFrdHVyYSB4bWxuczpldGQ9Imh0dHA6Ly9jcmQuZ292LnBsL3htbC9zY2hlbWF0eS9kemllZHppbm93ZS9tZi8yMDIyLzAxLzA1L2VEL0RlZmluaWNqZVR5cHkvIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgIHhtbG5zPSJodHRwOi8vY3JkLmdvdi5wbC93em9yLzIwMjMvMDYvMjkvMTI2NDgvIj4KICAgICAgICAgICAgPE5hZ2xvd2VrPgogICAgICAgICAgICAgICAgPEtvZEZvcm11bGFyemEga29kU3lzdGVtb3d5PSJGQSAoMikiIHdlcnNqYVNjaGVteT0iMS0wRSI+RkE8L0tvZEZvcm11bGFyemE+CiAgICAgICAgICAgICAgICA8V2FyaWFudEZvcm11bGFyemE+MjwvV2FyaWFudEZvcm11bGFyemE+CiAgICAgICAgICAgICAgICA8RGF0YVd5dHdvcnplbmlhRmE+MjAyMi0wMS0wMVQwMDowMDowMFo8L0RhdGFXeXR3b3J6ZW5pYUZhPgogICAgICAgICAgICAgICAgPFN5c3RlbUluZm8+RHVka29tYXQ8L1N5c3RlbUluZm8+CiAgICAgICAgICAgIDwvTmFnbG93ZWs+CiAgICAgICAgICAgIDxQb2RtaW90MT4KICAgICAgICAgICAgICAgIDxEYW5lSWRlbnR5ZmlrYWN5am5lPgogICAgICAgICAgICAgICAgICAgIDxOSVA+NjAxMjU0NzM4MDwvTklQPgogICAgICAgICAgICAgICAgICAgIDxOYXp3YT5UZXN0b3dhIEluZm9ybWF0eWthPC9OYXp3YT4KICAgICAgICAgICAgICAgIDwvRGFuZUlkZW50eWZpa2FjeWpuZT4KICAgICAgICAgICAgICAgIDxBZHJlcz4KICAgICAgICAgICAgICAgICAgICA8S29kS3JhanU+UEw8L0tvZEtyYWp1PgogICAgICAgICAgICAgICAgICAgIDxBZHJlc0wxPnVsLiDEhndpYXJ0a2kgMy80PC9BZHJlc0wxPgogICAgICAgICAgICAgICAgICAgIDxBZHJlc0wyPjAwLTAwMSBXYXJzemF3YTwvQWRyZXNMMj4KICAgICAgICAgICAgICAgIDwvQWRyZXM+CiAgICAgICAgICAgICAgICA8RGFuZUtvbnRha3Rvd2U+CiAgICAgICAgICAgICAgICAgICAgPEVtYWlsPmFiY0BhYmMucGw8L0VtYWlsPgogICAgICAgICAgICAgICAgICAgIDxUZWxlZm9uPjY2NzQ0NDU1NTwvVGVsZWZvbj4KICAgICAgICAgICAgICAgIDwvRGFuZUtvbnRha3Rvd2U+CiAgICAgICAgICAgIDwvUG9kbWlvdDE+CiAgICAgICAgICAgIDxQb2RtaW90Mj4KICAgICAgICAgICAgICAgIDxEYW5lSWRlbnR5ZmlrYWN5am5lPgogICAgICAgICAgICAgICAgICAgIDxOSVA+MTExMTExMTExMTwvTklQPgogICAgICAgICAgICAgICAgICAgIDxOYXp3YT5GLkguVS4gSmFuIEtvd2Fsc2tpPC9OYXp3YT4KICAgICAgICAgICAgICAgIDwvRGFuZUlkZW50eWZpa2FjeWpuZT4KICAgICAgICAgICAgICAgIDxBZHJlcz4KICAgICAgICAgICAgICAgICAgICA8S29kS3JhanU+UEw8L0tvZEtyYWp1PgogICAgICAgICAgICAgICAgICAgIDxBZHJlc0wxPnVsLiBQb2xuYSAxPC9BZHJlc0wxPgogICAgICAgICAgICAgICAgICAgIDxBZHJlc0wyPjAwLTAwMSBXYXJzemF3YTwvQWRyZXNMMj4KICAgICAgICAgICAgICAgIDwvQWRyZXM+CiAgICAgICAgICAgICAgICA8RGFuZUtvbnRha3Rvd2U+CiAgICAgICAgICAgICAgICAgICAgPEVtYWlsPmphbkBrb3dhbHNraS5wbDwvRW1haWw+CiAgICAgICAgICAgICAgICAgICAgPFRlbGVmb24+NTU1Nzc3OTk5PC9UZWxlZm9uPgogICAgICAgICAgICAgICAgPC9EYW5lS29udGFrdG93ZT4KICAgICAgICAgICAgICAgIDxOcktsaWVudGE+ZmRmZDc3ODM0MzwvTnJLbGllbnRhPgogICAgICAgICAgICA8L1BvZG1pb3QyPgogICAgICAgICAgICA8RmE+CiAgICAgICAgICAgICAgICA8S29kV2FsdXR5PlBMTjwvS29kV2FsdXR5PgogICAgICAgICAgICAgICAgPFBfMT4yMDIyLTAyLTE1PC9QXzE+CiAgICAgICAgICAgICAgICA8UF8xTT5XYXJzemF3YTwvUF8xTT4KICAgICAgICAgICAgICAgIDxQXzI+RlYyMDIyLzAyLzE1MDwvUF8yPgogICAgICAgICAgICAgICAgPFBfNj4yMDIyLTAxLTI3PC9QXzY+CiAgICAgICAgICAgICAgICA8UF8xM18xPjE2NjYuNjY8L1BfMTNfMT4KICAgICAgICAgICAgICAgIDxQXzE0XzE+MzgzLjMzPC9QXzE0XzE+CiAgICAgICAgICAgICAgICA8UF8xM18zPjAuOTU8L1BfMTNfMz4KICAgICAgICAgICAgICAgIDxQXzE0XzM+MC4wNTwvUF8xNF8zPgogICAgICAgICAgICAgICAgPFBfMTU+MjA1MTwvUF8xNT4KICAgICAgICAgICAgICAgIDxBZG5vdGFjamU+CiAgICAgICAgICAgICAgICAgICAgPFBfMTY+MjwvUF8xNj4KICAgICAgICAgICAgICAgICAgICA8UF8xNz4yPC9QXzE3PgogICAgICAgICAgICAgICAgICAgIDxQXzE4PjI8L1BfMTg+CiAgICAgICAgICAgICAgICAgICAgPFBfMThBPjI8L1BfMThBPgogICAgICAgICAgICAgICAgICAgIDxad29sbmllbmllPgogICAgICAgICAgICAgICAgICAgICAgICA8UF8xOU4+MTwvUF8xOU4+CiAgICAgICAgICAgICAgICAgICAgPC9ad29sbmllbmllPgogICAgICAgICAgICAgICAgICAgIDxOb3dlU3JvZGtpVHJhbnNwb3J0dT4KICAgICAgICAgICAgICAgICAgICAgICAgPFBfMjJOPjE8L1BfMjJOPgogICAgICAgICAgICAgICAgICAgIDwvTm93ZVNyb2RraVRyYW5zcG9ydHU+CiAgICAgICAgICAgICAgICAgICAgPFBfMjM+MjwvUF8yMz4KICAgICAgICAgICAgICAgICAgICA8UE1hcnp5PgogICAgICAgICAgICAgICAgICAgICAgICA8UF9QTWFyenlOPjE8L1BfUE1hcnp5Tj4KICAgICAgICAgICAgICAgICAgICA8L1BNYXJ6eT4KICAgICAgICAgICAgICAgIDwvQWRub3RhY2plPgogICAgICAgICAgICAgICAgPFJvZHphakZha3R1cnk+VkFUPC9Sb2R6YWpGYWt0dXJ5PgogICAgICAgICAgICAgICAgPEZQPjE8L0ZQPgogICAgICAgICAgICAgICAgPERvZGF0a293eU9waXM+CiAgICAgICAgICAgICAgICAgICAgPEtsdWN6PnByZWZlcm93YW5lIGdvZHppbnkgZG93b3p1PC9LbHVjej4KICAgICAgICAgICAgICAgICAgICA8V2FydG9zYz5kbmkgcm9ib2N6ZSAxNzowMCAtIDIwOjAwPC9XYXJ0b3NjPgogICAgICAgICAgICAgICAgPC9Eb2RhdGtvd3lPcGlzPgogICAgICAgICAgICAgICAgPEZhV2llcnN6PgogICAgICAgICAgICAgICAgICAgIDxOcldpZXJzemFGYT4xPC9OcldpZXJzemFGYT4KICAgICAgICAgICAgICAgICAgICA8VVVfSUQ+YWFhYTExMTEzMzMzOTk5MDwvVVVfSUQ+CiAgICAgICAgICAgICAgICAgICAgPFBfNz5sb2TDs3drYSBaaW1ub3RlY2ggbWsxPC9QXzc+CiAgICAgICAgICAgICAgICAgICAgPFBfOEE+c3p0LjwvUF84QT4KICAgICAgICAgICAgICAgICAgICA8UF84Qj4xPC9QXzhCPgogICAgICAgICAgICAgICAgICAgIDxQXzlBPjE2MjYuMDE8L1BfOUE+CiAgICAgICAgICAgICAgICAgICAgPFBfMTE+MTYyNi4wMTwvUF8xMT4KICAgICAgICAgICAgICAgICAgICA8UF8xMj4yMzwvUF8xMj4KICAgICAgICAgICAgICAgIDwvRmFXaWVyc3o+CiAgICAgICAgICAgICAgICA8RmFXaWVyc3o+CiAgICAgICAgICAgICAgICAgICAgPE5yV2llcnN6YUZhPjI8L05yV2llcnN6YUZhPgogICAgICAgICAgICAgICAgICAgIDxVVV9JRD5hYWFhMTExMTMzMzM5OTkxPC9VVV9JRD4KICAgICAgICAgICAgICAgICAgICA8UF83PnduaWVzaWVuaWUgc3ByesSZdHU8L1BfNz4KICAgICAgICAgICAgICAgICAgICA8UF84QT5zenQuPC9QXzhBPgogICAgICAgICAgICAgICAgICAgIDxQXzhCPjE8L1BfOEI+CiAgICAgICAgICAgICAgICAgICAgPFBfOUE+NDAuNjU8L1BfOUE+CiAgICAgICAgICAgICAgICAgICAgPFBfMTE+NDAuNjU8L1BfMTE+CiAgICAgICAgICAgICAgICAgICAgPFBfMTI+MjM8L1BfMTI+CiAgICAgICAgICAgICAgICA8L0ZhV2llcnN6PgogICAgICAgICAgICAgICAgPEZhV2llcnN6PgogICAgICAgICAgICAgICAgICAgIDxOcldpZXJzemFGYT4zPC9OcldpZXJzemFGYT4KICAgICAgICAgICAgICAgICAgICA8VVVfSUQ+YWFhYTExMTEzMzMzOTk5MjwvVVVfSUQ+CiAgICAgICAgICAgICAgICAgICAgPFBfNz5wcm9tb2NqYSBsb2TDs3drYSBwZcWCbmEgbWxla2E8L1BfNz4KICAgICAgICAgICAgICAgICAgICA8UF84QT5zenQuPC9QXzhBPgogICAgICAgICAgICAgICAgICAgIDxQXzhCPjE8L1BfOEI+CiAgICAgICAgICAgICAgICAgICAgPFBfOUE+MC45NTwvUF85QT4KICAgICAgICAgICAgICAgICAgICA8UF8xMT4wLjk1PC9QXzExPgogICAgICAgICAgICAgICAgICAgIDxQXzEyPjU8L1BfMTI+CiAgICAgICAgICAgICAgICA8L0ZhV2llcnN6PgogICAgICAgICAgICAgICAgPFBsYXRub3NjPgogICAgICAgICAgICAgICAgICAgIDxaYXBsYWNvbm8+MTwvWmFwbGFjb25vPgogICAgICAgICAgICAgICAgICAgIDxEYXRhWmFwbGF0eT4yMDIyLTAxLTI3PC9EYXRhWmFwbGF0eT4KICAgICAgICAgICAgICAgICAgICA8Rm9ybWFQbGF0bm9zY2k+NjwvRm9ybWFQbGF0bm9zY2k+CiAgICAgICAgICAgICAgICA8L1BsYXRub3NjPgogICAgICAgICAgICAgICAgPFdhcnVua2lUcmFuc2FrY2ppPgogICAgICAgICAgICAgICAgICAgIDxaYW1vd2llbmlhPgogICAgICAgICAgICAgICAgICAgICAgICA8RGF0YVphbW93aWVuaWE+MjAyMi0wMS0yNjwvRGF0YVphbW93aWVuaWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDxOclphbW93aWVuaWE+NDM1NDM0MzwvTnJaYW1vd2llbmlhPgogICAgICAgICAgICAgICAgICAgIDwvWmFtb3dpZW5pYT4KICAgICAgICAgICAgICAgIDwvV2FydW5raVRyYW5zYWtjamk+CiAgICAgICAgICAgIDwvRmE+CiAgICAgICAgICAgIDxTdG9wa2E+CiAgICAgICAgICAgICAgICA8SW5mb3JtYWNqZT4KICAgICAgICAgICAgICAgICAgICA8U3RvcGthRmFrdHVyeT5LYXBpYcWCIHpha8WCYWRvd3kgNSAwMDAgMDAwPC9TdG9wa2FGYWt0dXJ5PgogICAgICAgICAgICAgICAgPC9JbmZvcm1hY2plPgogICAgICAgICAgICAgICAgPFJlamVzdHJ5PgogICAgICAgICAgICAgICAgICAgIDxLUlM+MDAwMDA5OTk5OTwvS1JTPgogICAgICAgICAgICAgICAgICAgIDxSRUdPTj45OTk5OTk5OTk8L1JFR09OPgogICAgICAgICAgICAgICAgICAgIDxCRE8+MDAwMDk5OTk5PC9CRE8+CiAgICAgICAgICAgICAgICA8L1JlamVzdHJ5PgogICAgICAgICAgICA8L1N0b3BrYT4KICAgICAgICA8L0Zha3R1cmE+"
}
}

Z góry dzięki.

edytowany 2x, ostatnio: pablood
Zobacz pozostałe 3 komentarze
PA
Możecie powiedzieć, krok po kroku, jak uzyskać prawidłowe wartości: 1. Faktura w xml 2. Robię z niej base64, który wklejam invoicePayload->invoiceBody 3. Fakturę w xml hashuję SHA256, z hasha robię base64 i to wklejam do invoiceHash->hashSHA->value 4. Obliczam długość z faktury w xml i wklejam do invoiceHash->fileSize Już nie wiem, co dalej sprawdzać. Jeśli skrót jest za długi, to jaki powinien być poprawny dla powyższej faktury?
Dzyszla
SHA256 zawsze zwraca... 256 bitów. Zakodowane w base64 będzie to zawsze 44 znaki i co więcej - ze znakiem równości na końcu (ze specyfiki base64: 256, po wyrównaniu do 24 bitów = 264/6 = 44 znaki).
PA
Hmm, próbuję to nawet policzyć w narzędziach online i wynik mam ten sam: 1. SHA256 z faktury = 8d1676a717d291a20f14dc9438356447472373c1ad6666e7db57ac0eebd0451d = 64 znaki 2. Base64 z powyższego = OGQxNjc2YTcxN2QyOTFhMjBmMTRkYzk0MzgzNTY0NDc0NzIzNzNjMWFkNjY2NmU3ZGI1N2FjMGVlYmQwNDUxZA== 88 znaków. Jak z tego mogą wyjść 44 znaki? Coś z tym SHA256 jest nie tak?
Dzyszla
Bo kodujesz jakąś wartość zapisaną hex, a masz binarną zakodować.
PA
Uprzejmie dziękuję! O to właśnie chodziło. Dla potomnych: $faktura=file_get_contents($source); $faktura_hash = hash("sha256", $faktura, true); <-true robi różnicę $faktura_base64 = base64_encode($faktura); $faktura_hash_base64 = base64_encode($faktura_hash); $faktura_dlugosc = filesize($source); Teraz mam działający skrót długości 44 znaków: jRZ2pxfSkaIPFNyUODVkR0cjc8GtZmbn21esDuvQRR0= Faktura zarejestrowana.
Dzyszla
  • Rejestracja:około 3 lata
  • Ostatnio:2 dni
  • Postów:108
0

Czas na przejrzenie zmian:

  1. W specyfikacji (PDF) pojawiają się zapisy o kodach QR, ale ani to zgodne z zapisami w projekcie rozporządzenia, ani nawet samo ze sobą (adresy linków w przykładach i opisie)
  2. Interfejs anonimowy
    a. Pojawia się nowy endpoint download/{KsefReferenceNumber} - treścią żądania POST jest JSON ze skrótem pytanej faktury, jej numerem i adresatem.
    b. Pojawia się nowy endpoint verification/{KsefReferenceNumber} - treścią żądania POST jest... dowolny typ? no brawo!
    c. Co ciekawe, cały YAML nosi wersję 2.1.0
  3. interfejs interaktywny
    a. Zwiększono ilość elementów, jaka może być zwrócona w ramach sprawdzenia identyfikatora płatności ze 100 do 10'000. W dalszym ciągu błedną pozostaje definicja obiektu RequestPaymentIdentifierResponse.paymentIdentifier, bo identyfikatory nie odpowiadają podanej masce
    b. Do w/w odpowiedzi dodano paginację - niestety nie ma żądania związanego z paginacją.
    c. Do informacji o fakturze w ramach odpowiedzi na QueryInvoiceSync: dodano znacznik ukrycia oraz czas tego ukrycia.
    d. Przy żądaniu płatności muszą być minimum 2 faktury (było: 1) oraz maksimum może być ich 10'000 (było: 100)

O większości z tych zmian w historii się nie doszukacie.

edytowany 2x, ostatnio: Dzyszla
PrzemekPB
W aplikacji MF Web na wydrukach jest dodawany kod QR. Opis jak to zrobić jest w pliku specyfikacji 1.5. Generowanie dotyczy faktur wystawionych w trybie online, zastanawiam się jaki będzie mechanizm (jeżeli będzie) dla faktur wystawionych w trybie offline .
Dzyszla
Dlatego napisałem do nich maila, że niech się wypchają z taką specyfikacją, która jest z niczym nie zgodna.
WJ
KSeF-online.yaml, który pobrałem przed chwilą ma już wpisane "version: 2.2.0", więc chyba zgłoszenie dotyczące numerka już uwzględnili. Tak - na dobry początek. Ciekawe, czy za tą niezgodnością specyfikacji z przepisami stoi zwykły bałagan (np. z powodu zmiany ministra)? Uwag do propozycji rozporządzenia (aby zostawili tokeny, i uprościli to wszystko) raczej tu jeszcze nie uwzględniali, bo okres ich zgłaszania upływa dopiero 18 grudnia...
WJ
.. albo ta specyfikacja to odbicie jakichś zmian, które dopiero zamierzają wprowadzić w kolejnej nowelizacji ustawy :)
Dzyszla
W common jest 2.1, nie w online.
WJ
  • Rejestracja:ponad rok
  • Ostatnio:11 dni
  • Postów:8
0

Chyba z tym opublikowanym dzisiaj KSeF-online.yaml (version 2.2.0) jest coś nie tak, albo nie rozumiem zawiłości YAML-a. Chodzi o strukturę którą należy wysłać w /online/Query/Invoice/Sync
(zapytanie o faktury).

Dotychczasowa struktura żądania - taka jak poniżej - nadal działa:

Kopiuj
{ 
  "queryCriteria":{ 
	"type":"range", 
	"subjectType":"subject2", 
	"invoicingDateFrom":"2023-11-01T00:00:00.000+01:00", 
	"invoicingDateTo":"2023-12-01T00:00:00.000+01:00" 
  } 
}

ale w tym nowym pliku umieścili inną strukturę, służącą do odczytywania ukrytych faktur:

Kopiuj
{
  "queryCriteria": {
    "hidingDateFrom": "2023-12-15T12:09:34.718Z",
    "hidingDateTo": "2023-12-15T12:09:34.718Z",
    "isHidden": true,
    "subjectType": "subject1"
  }
}

Sprawdzam tę definicję - i nie rozumiem:

  1. Jakim cudem stara struktura (ta z pierwszego przykładu) jest akceptowana, skoro ten YAML jako jedyną dopuszczalną podaje strukturę pytania o ukryte faktury (tę drugą)?
  2. Dlaczego definicja tej nowej struktury (za polem "isHidden") ma w YAML-u atrybut deprecated: true?
Dzyszla
Nie, to tylko kolejne mapowanie. Można teraz dodać parametr do każdego z typów, po którym się szuka "isHidden", a dodatkowo można szukać po dacie ukrycia.
WJ
Dzięki za szybką odpowiedź! Chciałbym tylko zrozumieć: to gdzie w tej specyfikacji jest w takim razie ten poprzedni wariant zapytania (bez "isHidden"), i dlaczego nowa struktura jest "deprecated"? (Tzn. jak osoba nie znająca poprzednich wersji specyfikacji ma się zorientować, co może przekazać jako request do tego żądania)?
Dzyszla
Zobacz QueryCriteriaInvoiceType bo do tego to zmierza. Tam masz mapping, który pozwala na użycie jedneg oz trzech typów. Dodatkowo masz właściwości na tym samym poziomie: hidingDateFrom, hidingDateTo, isHidden, subjectType, z czego required jest tylko subjectType i type, który to właśnie ma mapowanie. Deprecated jest bez przedrostka V2, ale w konstrukcji oba są identyczne.
WJ
Dzięki, teraz zrozumiałem jak czytać te deklaracje. Ciekawostka: przykład 2 to przykład z yamla MF. Użyty w InvoiceSync, powoduje błąd: {"exceptionCode":21001,"exceptionDescription":"Nieczytelna treść."}. Na wszelki wypadek przedstawiam przykład poprawnego requesta, dla którego InvoiceSync pokazuje ukryte faktury (używam w kryterium dat faktur, a nie dat ukrycia): { "queryCriteria":{ "isHidden":true, "type":"range", "subjectType":"subject2", "invoicingDateFrom":"2023-05-13T00:00:00.000+01:00", "invoicingDateTo":"2023-05-31T00:00:00.000+01:00" } }
ZB
  • Rejestracja:ponad rok
  • Ostatnio:około godziny
  • Postów:34
0

Czy tylko ja nie mogę otworzyć 31 strony tego wątku? Mam błąd serwera. Inne się otwierają poprawnie.

edytowany 1x, ostatnio: zbynioh
Zobacz pozostały 1 komentarz
ZB
Ku...a, a ja mam "Whoops, looks like something went wrong" (ps. wpienia też czas który musi upłynąć między kolejnymi postami/komentarzami dozwolonymi do publikacji)
Dzyszla
Nikt nie przewidział, że ktoś z jednego wątku zrobi osobne forum :)
Tomek Kot
ja tylko dodam że chyba idą zmiany w piątek o 16 bo ksef test nie działa - co za mistrzowie tam pracują <3
Dzyszla
No to miłego weekendu wszystkim i trzymajcie się zdrowo!
WJ
  • Rejestracja:ponad rok
  • Ostatnio:11 dni
  • Postów:8
0

Znalazłem powtarzalny błąd: funkcje online/Invoice/Visibility/Show i online/Invoice/Visibility/Hide wobec pojedynczej faktury można wywołać tylko raz. Gdy:

  1. ukryjesz fakturę poleceniem Hide
  2. odsłonisz ją z powrotem poleceniem Show
  3. i próbujesz powtórnie ukryć poleceniem Hide, to dostajesz błąd:
Kopiuj
{"exceptionCode":21187,"exceptionDescription":"Faktura jest już ukryta."}

co jest nieprawdą, bo jest widoczna

Zgłosiłem, może naprawią.

Inne uwagi co do pary poleceń Show/Hide:

  • można je wywoływać wyłącznie po stronie Odbiorcy faktury (gdy próbuję ukryć fakturę sprzedaży, otrzymuję błąd: {"exceptionCode":21169,"exceptionDescription":"Brak autoryzacji lub faktura o podanym identyfikatorze nie istnieje."}
  • ukryte przez Nabywcę faktury są nadal widoczne po stronie Sprzedawcy (u Sprzedawcy nic nie ulega zmianie)
  • brak jakichkolwiek zmiennych parametrów w url serwisów Show/Hide oraz przypisany im limit wywołań (20/10 minut) świadczą, że w zamyśle twórców mają służyć do jakichś pojedynczych wykluczeń.

Nie mam na razie jednak pomysłu, do czego ta funkcjonalność "ukrywania faktur przed samym sobą" może być potrzebna. Przecież jeżeli to program pobiera faktury zakupu z KSeF, to program też może decydować, aby (z powodu jakiejś pokrętnej logiki biznesowej przedsiębiorstwa użytkownika) niektórych z nich nie pokazywać w zestawieniach. Pod co do tego funkcje API po stronie serwera?

Zobacz pozostałe 14 komentarzy
BS
@Witold Jaworski: dostałeś jakąś odpowiedziedź? też zauważyłem to dziwne zachowanie.
WJ
@bsi: Na razie zespół KSeF sprytnie złączył dwa oddzielne zgłoszenia, które wysłałem im 15 grudnia (1. Błędny adres linka w dokumentacji. 2. Problemy z Show/Hide) w jedno, i zgodnie z najlepszą szkołą biurokracji obsłużył to łatwiejsze (29 grudnia napisali, że poprawili dokumentację) i zapewne odfajkował jako "obsłużone". Aby wytrącić ich z tego trybu samozadowolenia, 30 grudnia wysłałem im ponownie to zgłoszenie o Show/Hide. Poczekamy, zobaczymy...
BS
@Witold Jaworski: 🙄 jak byś coś wiedział to daj znać, dziekuje 😊
WJ
Dzisiaj dostałem odpowiedź, że opisany błąd został poprawiony "w wersji 2.4.0" (API?). Odpowiada mi "druga linia wsparcia technicznego", co ciekawe - tym razem to wygląda na wiadomość z systemu, który obsługuje jakiegoś ticketa, którego założyli dla mojego e-maila (czyżby początek uruchamiania regularnej obsługi zgłoszeń?).
Dzyszla
To już od kilku miesięcy tak dostaję.
AL
  • Rejestracja:około 3 lata
  • Ostatnio:10 miesięcy
  • Postów:38
0

W dokumentacji do 1.5, pojawił się opis QR Code - cztery zdania, sklecone na kolenie. Jest też coś o ukrywaniu - tu również bez niespodzianki - żenada.

Zobacz pozostałe 5 komentarzy
WJ
Aha, no to w takim razie OK. W każdym razie sprawdziłem, że linki działają, tylko trzeba zachować binarną zgodność wysłanych plików XML, aby ich skrót był niezmienny (zdarzyło mi się o tym zapomnieć, ładując je jako XML i potem zapisując do pliku - niektóre procesory XML potrafią z przodu dodać BOM, albo CrLf na końcu.
Dzyszla
A myślisz, że zdecydowali się już, czy będzie to common/verify, czy onnline/verification czy jeszcze inny adres jednak wymyślą? Dla mnie to jest żałosne, że oni nawet nie panują nad nazwami metod, nazwami parametrów, że o panowaniu nad YAMLem nie wspomnę...
WJ
Obstawiam (ale tylko na zasadzie "zakładu"), że dla funkcji wizualnej weryfikacji będą używać obecnego przedrostka web/verifiy. Będą je różnicować dalszymi parametrami. Absolutnie się zgadzam, że jakość tej dokumentacji jest niska. Od roku się zastanawiam, czy nie powinniśmy (jako programiści, implementujący te wszystkie e-Deklaracje, JPK, e-sprawozdania, KSeF itp) żądać od odpowiednich Ministerstw oprócz specyfikacji przykładowych (działających) programów. Język dowolny - byleby były. (To byłoby jakieś wyjaśnienie do ich wypocin).
Dzyszla
Ja nie wiem, czy to o obecnym ministrze cyfryzacji mówili, że podobno zwolennik otwartego kodu i chce, żeby wszystkie apki rządowe były open source?
WJ
Biorąc pod uwagę, że piszą je z podatków, czyli za pieniądze nas wszystkich - dziwne, że nikt o to się do tej pory nie upominał. Systemy mogą być otwarte, a mimo to pozostawać bezpieczne. Tylko który urzędnik zdecydowałby się wzięcie odpowiedzialności za takie "ujawnienie"? Pisze to bez ironii, bo to taka sama pułapka psychologiczna, jak w korporacjach: "lepiej się nie wychylać", "na wszystko mieć potwierdzenie, że mi kazano" .
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)