Dokument wysłany do KSeF nie jest zgodny ze schematem

0

Witam.

Mam prośbę o rzucenie okiem i podpowiedź, co robię źle.

  1. AuthorisationChallenge
  2. InitToken
  3. 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.

0

Hash tez ma byc potraktowany base64.
Jak popatrzysz tu: to payloadtype powinien być

0
KsefIntegrator napisał(a):

Hash tez ma byc potraktowany base64.
Jak popatrzysz tu: to payloadtype powinien być

Dzięki za podpowiedź, ale wciąż bez sukcesu. Po zrobieniu base64 na hashu wciąż jest 21405 - Dokument nie jest zgodny ze schemą (json).
Przy zamianie type na payloadType wyskakuje błąd 21001 - Nieczytelna treść.
To samo, kiedy się doda timestamp. Chyba ten webinar się zestarzał i nie odwzorowuje stanu bieżącego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1