Witam.
Mam prośbę o rzucenie okiem i podpowiedź, co robię źle.
- AuthorisationChallenge
- InitToken
- Invoice/Send <tu pojawia się błąd 21405 - Dokument nie jest zgodny ze schemą (json).
W PHP:
<?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>
<WariantFormularza>2</WariantFormularza>
<DataWytworzeniaFa>2022-01-01T00:00:00Z</DataWytworzeniaFa>
<SystemInfo>Dudkomat</SystemInfo>
</Naglowek>
<Podmiot1>
<DaneIdentyfikacyjne>
<NIP>6012547380</NIP>
<Nazwa>Testowa Informatyka</Nazwa>
</DaneIdentyfikacyjne>
<Adres>
<KodKraju>PL</KodKraju>
<AdresL1>ul. Ćwiartki 3/4</AdresL1>
<AdresL2>00-001 Warszawa</AdresL2>
</Adres>
<DaneKontaktowe>
<Email>[email protected]</Email>
<Telefon>667444555</Telefon>
</DaneKontaktowe>
</Podmiot1>
<Podmiot2>
<DaneIdentyfikacyjne>
<NIP>1111111111</NIP>
<Nazwa>F.H.U. Jan Kowalski</Nazwa>
</DaneIdentyfikacyjne>
<Adres>
<KodKraju>PL</KodKraju>
<AdresL1>ul. Polna 1</AdresL1>
<AdresL2>00-001 Warszawa</AdresL2>
</Adres>
<DaneKontaktowe>
<Email>[email protected]</Email>
<Telefon>555777999</Telefon>
</DaneKontaktowe>
<NrKlienta>fdfd778343</NrKlienta>
</Podmiot2>
<Fa>
<KodWaluty>PLN</KodWaluty>
<P_1>2022-02-15</P_1>
<P_1M>Warszawa</P_1M>
<P_2>FV2022/02/150</P_2>
<P_6>2022-01-27</P_6>
<P_13_1>1666.66</P_13_1>
<P_14_1>383.33</P_14_1>
<P_13_3>0.95</P_13_3>
<P_14_3>0.05</P_14_3>
<P_15>2051</P_15>
<Adnotacje>
<P_16>2</P_16>
<P_17>2</P_17>
<P_18>2</P_18>
<P_18A>2</P_18A>
<Zwolnienie>
<P_19N>1</P_19N>
</Zwolnienie>
<NoweSrodkiTransportu>
<P_22N>1</P_22N>
</NoweSrodkiTransportu>
<P_23>2</P_23>
<PMarzy>
<P_PMarzyN>1</P_PMarzyN>
</PMarzy>
</Adnotacje>
<RodzajFaktury>VAT</RodzajFaktury>
<FP>1</FP>
<DodatkowyOpis>
<Klucz>preferowane godziny dowozu</Klucz>
<Wartosc>dni robocze 17:00 - 20:00</Wartosc>
</DodatkowyOpis>
<FaWiersz>
<NrWierszaFa>1</NrWierszaFa>
<UU_ID>aaaa111133339990</UU_ID>
<P_7>lodówka Zimnotech mk1</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>1626.01</P_9A>
<P_11>1626.01</P_11>
<P_12>23</P_12>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>2</NrWierszaFa>
<UU_ID>aaaa111133339991</UU_ID>
<P_7>wniesienie sprzętu</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>40.65</P_9A>
<P_11>40.65</P_11>
<P_12>23</P_12>
</FaWiersz>
<FaWiersz>
<NrWierszaFa>3</NrWierszaFa>
<UU_ID>aaaa111133339992</UU_ID>
<P_7>promocja lodówka pełna mleka</P_7>
<P_8A>szt.</P_8A>
<P_8B>1</P_8B>
<P_9A>0.95</P_9A>
<P_11>0.95</P_11>
<P_12>5</P_12>
</FaWiersz>
<Platnosc>
<Zaplacono>1</Zaplacono>
<DataZaplaty>2022-01-27</DataZaplaty>
<FormaPlatnosci>6</FormaPlatnosci>
</Platnosc>
<WarunkiTransakcji>
<Zamowienia>
<DataZamowienia>2022-01-26</DataZamowienia>
<NrZamowienia>4354343</NrZamowienia>
</Zamowienia>
</WarunkiTransakcji>
</Fa>
<Stopka>
<Informacje>
<StopkaFaktury>Kapiał zakładowy 5 000 000</StopkaFaktury>
</Informacje>
<Rejestry>
<KRS>0000099999</KRS>
<REGON>999999999</REGON>
<BDO>000099999</BDO>
</Rejestry>
</Stopka>
</Faktura>';
$faktura_base64 = base64_encode($faktura);
$faktura_hash = hash("SHA256", $faktura);
$faktura_dlugosc = strlen($faktura);
$do_wyslania =
json_encode(array(
"invoiceHash" => array(
"hashSHA" => array(
"algorithm" => "SHA-256",
"encoding" => "Base64",
"value" => $faktura_hash
),
"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",
"Accept: application/json",
//"Authorization: Bearer $session_token",
"SessionToken: $session_token"
),
));
$response = curl_exec($curl);
$odp_faktura = JSON::toArray($response);
{"invoiceHash":
{"hashSHA":{
"algorithm":"SHA-256",
"encoding":"Base64",
"value":"8d1676a717d291a20f14dc9438356447472373c1ad6666e7db57ac0eebd0451d"
},
"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+"
}
}
Odpowiedź z KSEF:
[exception] => Array
(
[serviceCtx] => default
[serviceCode] => 20231214-EX-78B3DC59BD-BAFA92F562-65
[serviceName] => online.invoice.invoice.send
[timestamp] => 2023-12-14T11:53:29.065Z
[exceptionDetailList] => Array
(
[0] => Array
(
[exceptionCode] => 21405
[exceptionDescription] => Dokument nie jest zgodny ze schemą (json).
)
)
)
Z góry dzięki za pomoc.