Code Monkey home page Code Monkey logo

eet-client's Introduction

Client for EET - Elektronická evidence tržeb

Build status Code coverage Latest Stable Version Composer Downloads

This repository provides a client library for electronic record of sales (EET) required by czech law. Tento repozitář obsahuje klientskou knihovnu pro elektronickou evidenci tržeb (EET)

Instalace

Nejlepší způsob jak slevomat/eet-client nainstalovat je pomocí Composeru:

> composer require slevomat/eet-client

Použití

POZOR: Všechny částky jsou uváděny v setinách měny. Tedy pokud chcete odeslat tržbu 55.5 Kč, vložíte do třídy Receipt hodnotu jako integer 5550.

$crypto = new CryptographyService('cesta k privátnímu klíči', 'cesta k veřejnému klíči', 'heslo privátního klíče (nebo prázdný string pokud bez hesla)');
$configuration = new Configuration(
    'DIČ poplatníka',
    'Identifikace provozovny ',
    'Identifikace pokladního zařízení',
    EvidenceEnvironment::get(EvidenceEnvironment::PLAYGROUND), // nebo EvidenceEnvironment::get(EvidenceEnvironment::PRODUCTION) pro komunikaci s produkčním systémem
    false // zda zasílat účtenky v ověřovacím módu
);
$client = new Client($crypto, $configuration, new GuzzleSoapClientDriver(new \GuzzleHttp\Client()));

$receipt = new Receipt(
	true,
	'CZ683555118',
	'0/6460/ZQ42',
	new \DateTimeImmutable('2016-11-01 00:30:12'),
    3411300
);

try {
    $response = $client->send($receipt);
    echo $response->getFik();
} catch (\SlevomatEET\FailedRequestException $e) {
    echo $e->getRequest()->getPkpCode(); // if request fails you need to print the PKP and BKP codes to receipt
} catch (\SlevomatEET\InvalidResponseReceivedException $e) {
    echo $e->getResponse()->getRequest()->getPkpCode(); // on invalid response you need to print the PKP and BKP too
}

Generování klíčů

Klíče obdržené z portálu Finanční správy jsou ve formátu .p12 a je třeba převést do formátu PEM.

V příkazové řádce proveďte tyto příkazy:

$ openssl pkcs12 -in cesta/k/souboru.p12 -out public.pub -clcerts -nokeys

$ openssl pkcs12 -in cesta/k/souboru.p12 -out private.key -nocerts

Cestu k výsledným public.pub a private.key pak nastavíte jako veřejný, resp. privátní klíč při vytváření CryptographyService

Pro testovací prostředí (playground) je třeba využít speciální testovací certifikáty. Tyto playground certifikáty jsou distribuovány s knihovnou v adresáři cert. Detailnější popis naleznete v dokumentaci k testovacímu prostředí EET.

Parametry účtenky

XML jméno (dokumentace EET) Popis Umístění v klientu Poznámka
uuid_zpravy UUID zprávy Receipt::$uuid automaticky generováno
dat_odesl Datum odeslání tržby $response->getRequest()->getSendTime() automaticky generováno
prvni_zaslani Příznak první zaslání Receipt::$firstSend
overeni Příznak ověřovacího módu Configuration::$verificationMode výchozí false
dic_popl DIČ poplatníka Configuration::$vatId
dic_poverujiciho DIČ pověřujícího poplatníka Receipt::$delegatedVatId
id_provoz ID provozovny Configuration::$premiseId
id_pokl ID pokladny Configuration::$cashRegisterId
porad_cis Číslo účtenky Receipt::$receiptNumber
dat_trzby Datum uskutečnění tržby Receipt::$receiptTime
celk_trzba Celková částka Receipt::$totalPrice
zakl_nepodl_dph Celková částka plnění osvobozených od DPH, ostatních plnění Receipt::$priceZeroVat
zakl_dan1 Základ daně se základní sazbou DPH Receipt::$priceStandardVat
dan1 DPH se základní sazbou Receipt::$vatStandard
zakl_dan2 Základ daně s první zníženou sazbou Receipt::$priceFirstReducedVat
dan2 DPH s první sníženou saznou Receipt::$vatFirstReduced
zakl_dan3 Základ daně s druhou sníženou sazbou Receipt::$priceSecondReducedVat
dan3 DPH s druhou sníženou sazbou Receipt::$vatSecondReduced
cest_sluz Celková částka v režimu DPH pro cestovní službu Receipt::$priceTravelService
pouzit_zboz1 Celková částka v režimu DPH pro prodej použitého zboží se základní sazbou Receipt::$priceUsedGoodsStandardVat
pouzit_zboz2 Celková částka v režimu DPH pro prodej použitého zboží s první sníženou sazbou Receipt::$priceUsedGoodsFirstReducedVat
pouzit_zboz3 Celková částka v režimu DPH pro prodej použitého zboží s druhou sníženou sazbou Receipt::$priceUsedGoodsSecondReducedVat
urceno_cerp_zuct Částka plateb určená k následnému čerpání nebo zúčtování Receipt::$priceSubsequentSettlement
cerp_zuct Částka plateb které jsou následným čerpáním nebo zúčtováním Receipt::$priceUsedSubsequentSettlement
rezim Režim tržby Configuration::$evidenceMode výchozí bežný
pkp Podpisový kód poplatníka $response->getRequest()->getPkpCode()
bkp Bezpečnostní kód poplatníka $response->getRequest()->getBkpCode()

Client driver

Odeslání požadavku na servery EET neprobíhá přímo přes SoapClient integrovaný v PHP, ale pomocí rozhraní SoapClientDriver. Hlavním důvodem je nemožnost nastavení timeoutu požadavků integrovaného SoapClienta.

Součástí knihovny je implentace rozhraní s pomocí guzzlehttp/guzzle. Výchozí timeout této implementace je 2.5 sekundy, nastavitelný parametrem konstruktoru.

eet-client's People

Contributors

fra-iesus avatar hrach avatar janlanger avatar jaygridley avatar kukulich avatar ondrejmirtes avatar paveljurasek avatar pepakriz avatar peter279k avatar vasekpurchart avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eet-client's Issues

Kontrola existence cesty k veřejnému klíči

Trošku jsem se natrápil, když jsem měl typo v cestě k veřejnému klíči a jediné co jsem dostával bylo, že nemám správně podepsanou zprávu (až jako odpověď od serveru). Nečekal jsem, že implementace přes tu knihovnu na WSE, nekontroluje existenci cesty a silent to podepisuje nějakým nesmyslem.

Možná by bylo fajn přidat kontrolu na existenci klíče. (Tuším že cestu k privátnímu klíči to kontroluje v části kde se počítá PKP).

Invalid response received. Check response data for errors and warnings

Dobrý den,

nedaří se mi zprovoznit vaší knihovnu.

      $crypto = new CryptographyService($this->get('kernel')->getRootDir().'/Certificates/private.key', $this->get('kernel')->getRootDir().'/Certificates/public.pub', 'password');
       $configuration = new Configuration(
           'DIC',
           21,
           1,
           EvidenceEnvironment::get(EvidenceEnvironment::PLAYGROUND), // nebo EvidenceEnvironment::get(EvidenceEnvironment::PRODUCTION) pro komunikaci s produkčním systémem
           false // zda zasílat účtenky v ověřovacím módu
       );
       $client = new Client($crypto, $configuration, new GuzzleSoapClientDriver(new \GuzzleHttp\Client()));

       $receipt = new Receipt(
           true,
           'CZ683555118',
           1234,
           new \DateTimeImmutable('2016-11-01 00:30:12'),
           3411300
       );


       try {
           $response = $client->send($receipt);
           $fik =  $response->getFik();
           $bkp = $response->getBkp();
           echo '<br />FIK:'.$fik;
           echo '<br />BKP:'.$bkp;
       } catch (\SlevomatEET\FailedRequestException $e) {
           $pkb =  $e->getRequest()->getPkpCode(); // if request fails you need to print the PKP and BKP codes to receipt
       } catch (\SlevomatEET\InvalidResponseReceivedException $e) {
           echo $e->getMessage();
           $pkb =  $e->getResponse()->getRequest()->getPkpCode(); // on invalid response you need to print the PKP and BKP too
       }

Skočí to na poslední catch.

$e->getMessage();

Invalid response received. Check response data for errors and warnings

var_dump($client);

object(SlevomatEET\Client)#481 (4) {
  ["cryptographyService":"SlevomatEET\Client":private]=>
  object(SlevomatEET\Cryptography\CryptographyService)#488 (3) {
    ["privateKeyFile":"SlevomatEET\Cryptography\CryptographyService":private]=>
    string(65) "/var/www/vhosts/x.cz/httpdocs/app/Certificates/private.key"
    ["privateKeyPassword":"SlevomatEET\Cryptography\CryptographyService":private]=>
    string(11) "password"
    ["publicKeyFile":"SlevomatEET\Cryptography\CryptographyService":private]=>
    string(64) "/var/www/vhosts/x.cz/httpdocs/app/Certificates/public.pub"
  }
  ["configuration":"SlevomatEET\Client":private]=>
  object(SlevomatEET\Configuration)#483 (6) {
    ["vatId":"SlevomatEET\Configuration":private]=>
    string(12) "DIC"
    ["premiseId":"SlevomatEET\Configuration":private]=>
    string(2) "21"
    ["cashRegisterId":"SlevomatEET\Configuration":private]=>
    string(1) "1"
    ["verificationMode":"SlevomatEET\Configuration":private]=>
    bool(false)
    ["evidenceMode":"SlevomatEET\Configuration":private]=>
    object(SlevomatEET\EvidenceMode)#485 (1) {
      ["value":"Consistence\Enum\Enum":private]=>
      int(0)
    }
    ["evidenceEnvironment":"SlevomatEET\Configuration":private]=>
    object(SlevomatEET\EvidenceEnvironment)#484 (1) {
      ["value":"Consistence\Enum\Enum":private]=>
      string(10) "playground"
    }
  }
  ["soapClient":"SlevomatEET\Client":private]=>
  NULL
  ["soapClientDriver":"SlevomatEET\Client":private]=>
  object(SlevomatEET\Driver\GuzzleSoapClientDriver)#482 (3) {
    ["httpClient":"SlevomatEET\Driver\GuzzleSoapClientDriver":private]=>
    object(GuzzleHttp\Client)#480 (1) {
      ["config":"GuzzleHttp\Client":private]=>
      array(7) {
        ["handler"]=>
        object(GuzzleHttp\HandlerStack)#477 (3) {
          ["handler":"GuzzleHttp\HandlerStack":private]=>
          object(Closure)#472 (2) {
            ["static"]=>
            array(2) {
              ["default"]=>
              object(Closure)#476 (2) {
                ["static"]=>
                array(2) {
                  ["default"]=>
                  object(GuzzleHttp\Handler\CurlMultiHandler)#478 (5) {
                    ["factory":"GuzzleHttp\Handler\CurlMultiHandler":private]=>
                    object(GuzzleHttp\Handler\CurlFactory)#479 (2) {
                      ["handles":"GuzzleHttp\Handler\CurlFactory":private]=>
                      NULL
                      ["maxHandles":"GuzzleHttp\Handler\CurlFactory":private]=>
                      int(50)
                    }
                    ["selectTimeout":"GuzzleHttp\Handler\CurlMultiHandler":private]=>
                    int(1)
                    ["active":"GuzzleHttp\Handler\CurlMultiHandler":private]=>
                    NULL
                    ["handles":"GuzzleHttp\Handler\CurlMultiHandler":private]=>
                    array(0) {
                    }
                    ["delays":"GuzzleHttp\Handler\CurlMultiHandler":private]=>
                    array(0) {
                    }
                  }
                  ["sync"]=>
                  object(GuzzleHttp\Handler\CurlHandler)#474 (1) {
                    ["factory":"GuzzleHttp\Handler\CurlHandler":private]=>
                    object(GuzzleHttp\Handler\CurlFactory)#475 (2) {
                      ["handles":"GuzzleHttp\Handler\CurlFactory":private]=>
                      NULL
                      ["maxHandles":"GuzzleHttp\Handler\CurlFactory":private]=>
                      int(3)
                    }
                  }
                }
                ["parameter"]=>
                array(2) {
                  ["$request"]=>
                  string(10) "<required>"
                  ["$options"]=>
                  string(10) "<required>"
                }
              }
              ["streaming"]=>
              object(GuzzleHttp\Handler\StreamHandler)#471 (1) {
                ["lastHeaders":"GuzzleHttp\Handler\StreamHandler":private]=>
                array(0) {
                }
              }
            }
            ["parameter"]=>
            array(2) {
              ["$request"]=>
              string(10) "<required>"
              ["$options"]=>
              string(10) "<required>"
            }
          }
          ["stack":"GuzzleHttp\HandlerStack":private]=>
          array(4) {
            [0]=>
            array(2) {
              [0]=>
              object(Closure)#473 (1) {
                ["parameter"]=>
                array(1) {
                  ["$handler"]=>
                  string(10) "<required>"
                }
              }
              [1]=>
              string(11) "http_errors"
            }
            [1]=>
            array(2) {
              [0]=>
              object(Closure)#468 (1) {
                ["parameter"]=>
                array(1) {
                  ["$handler"]=>
                  string(10) "<required>"
                }
              }
              [1]=>
              string(15) "allow_redirects"
            }
            [2]=>
            array(2) {
              [0]=>
              object(Closure)#469 (1) {
                ["parameter"]=>
                array(1) {
                  ["$handler"]=>
                  string(10) "<required>"
                }
              }
              [1]=>
              string(7) "cookies"
            }
            [3]=>
            array(2) {
              [0]=>
              object(Closure)#470 (1) {
                ["parameter"]=>
                array(1) {
                  ["$handler"]=>
                  string(10) "<required>"
                }
              }
              [1]=>
              string(12) "prepare_body"
            }
          }
          ["cached":"GuzzleHttp\HandlerStack":private]=>
          NULL
        }
        ["allow_redirects"]=>
        array(5) {
          ["max"]=>
          int(5)
          ["protocols"]=>
          array(2) {
            [0]=>
            string(4) "http"
            [1]=>
            string(5) "https"
          }
          ["strict"]=>
          bool(false)
          ["referer"]=>
          bool(false)
          ["track_redirects"]=>
          bool(false)
        }
        ["http_errors"]=>
        bool(true)
        ["decode_content"]=>
        bool(true)
        ["verify"]=>
        bool(true)
        ["cookies"]=>
        bool(false)
        ["headers"]=>
        array(1) {
          ["User-Agent"]=>
          string(38) "GuzzleHttp/6.2.1 curl/7.29.0 PHP/7.1.2"
        }
      }
    }
    ["connectionTimeout":"SlevomatEET\Driver\GuzzleSoapClientDriver":private]=>
    float(2.5)
    ["requestTimeout":"SlevomatEET\Driver\GuzzleSoapClientDriver":private]=>
    float(2.5)
  }
}

var_dump($receipt);

object(SlevomatEET\Receipt)#465 (19) {
  ["uuid":"SlevomatEET\Receipt":private]=>
  object(Ramsey\Uuid\Uuid)#462 (3) {
    ["codec":protected]=>
    object(Ramsey\Uuid\Codec\StringCodec)#459 (1) {
      ["builder":"Ramsey\Uuid\Codec\StringCodec":private]=>
      object(Ramsey\Uuid\Builder\DefaultUuidBuilder)#464 (1) {
        ["converter":"Ramsey\Uuid\Builder\DefaultUuidBuilder":private]=>
        object(Ramsey\Uuid\Converter\Number\DegradedNumberConverter)#463 (0) {
        }
      }
    }
    ["fields":protected]=>
    array(6) {
      ["time_low"]=>
      string(8) "aa52d74a"
      ["time_mid"]=>
      string(4) "0811"
      ["time_hi_and_version"]=>
      string(4) "4263"
      ["clock_seq_hi_and_reserved"]=>
      string(2) "89"
      ["clock_seq_low"]=>
      string(2) "09"
      ["node"]=>
      string(12) "95d89383f3ee"
    }
    ["converter":protected]=>
    object(Ramsey\Uuid\Converter\Number\DegradedNumberConverter)#463 (0) {
    }
  }
  ["firstSend":"SlevomatEET\Receipt":private]=>
  bool(true)
  ["delegatedVatId":"SlevomatEET\Receipt":private]=>
  NULL
  ["receiptNumber":"SlevomatEET\Receipt":private]=>
  string(17) "production_test_1"
  ["receiptTime":"SlevomatEET\Receipt":private]=>
  object(DateTimeImmutable)#466 (3) {
    ["date"]=>
    string(26) "2017-11-01 00:30:12.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(3) "UTC"
  }
  ["totalPrice":"SlevomatEET\Receipt":private]=>
  int(0)
  ["priceZeroVat":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceStandardVat":"SlevomatEET\Receipt":private]=>
  NULL
  ["vatStandard":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceFirstReducedVat":"SlevomatEET\Receipt":private]=>
  NULL
  ["vatFirstReduced":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceSecondReducedVat":"SlevomatEET\Receipt":private]=>
  NULL
  ["vatSecondReduced":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceTravelService":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceUsedGoodsStandardVat":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceUsedGoodsFirstReducedVat":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceUsedGoodsSecondReducedVat":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceForSubsequentSettlement":"SlevomatEET\Receipt":private]=>
  NULL
  ["priceUsedSubsequentSettlement":"SlevomatEET\Receipt":private]=>
  NULL
}

Vypadá v pohodě.

Invalid response received. Check response data for errors and warnings.

Zdravím, narazil jsem prakticky na stejnou chybu, která se tady již řešila a úplně si s ní nevím rady. Při odeslání se mi vrátí vyjímka: "Invalid response received. Check response data for errors and warnings." a nedaří se mi přijít na to proč.

Kód mám momentálně prakticky stejně jako v ukázce tedy:
`
$key = DIR . "/cert/EET_CA1_Playground_With_Password-CZ683555118.key";
$pub = DIR . "/cert/EET_CA1_Playground-CZ683555118.pub";

$crypto = new CryptographyService($key', $pub', 'eet');

$configuration = new Configuration(
'CZ683555118',
'1',
'1',
EvidenceEnvironment::get(EvidenceEnvironment::PLAYGROUND),
false
);

$client = new Client($crypto, $configuration, new GuzzleSoapClientDriver(new \GuzzleHttp\Client()));

$receipt = new \SlevomatEET\Receipt(
true,
'CZ683555118',
'45',
new \DateTimeImmutable(),
1000
);

try {
$response = $client->send($receipt);
echo $response->getFik();
} catch (\SlevomatEET\FailedRequestException $e) {
echo $e->getRequest()->getPkpCode();
} catch (\SlevomatEET\InvalidResponseReceivedException $e) {
echo $e->getResponse()->getRequest()->getPkpCode();
}
`

Prosím vás, dělám tam nějakou zásadní chybu? Certifikáty jsem stáhnul s celou knihovnou, tak ty asi budou platné.

Díky,
A.

Removal of GuzzleSoapClientDriver

Default SoapClient does have connection_timeout option and also there is common runtime configuration option default_socket_timeout to set timeout for all socket based streams.

Eventually there could be implemented very simple workaround using cURL instead of using another external library not distributed with PHP by default (see http://stackoverflow.com/a/3500554/2678658 for code example)

Keep things simple :-)

Inquiry for cooperation

Hi,

We are working on the implementation of fiscalization for one Czech client and we would need help with connecting to Czech Tax Authorities, so we decided to contact you with the hope that you can help us with your esteemed experience.

At this time, our development team is working on the solution, but we need someone who can help us to connect with Czech Tax Authorities by providing specific local inputs. This would take approximately 3-4 hours of your time per week, depending on the phase of integration. Of course, you would be paid for your time invested.

Please let us know if you are interested in cooperation so we can agree on terms.

Thank you and best regards,

Kristian

EET Chybove stavy

Dobrý den,

jak prosím získam chybový stav zaslaný z EET serveru?
Problém je v tom, že mi script skončí na InvalidResponseReceivedException s message Invalid response received. Check response data for errors and warnings.

Chtěl bych tedy zjístit v čem je problém, že mi to nevráci FIK.

Edit: Zkoušel jsem $e->getCode() vráci to 0, nicméně nic jsem o 0 nenašel.

Otázka: DIC Kupujícího

Dobrý den,

chci se jen ujistit. Kde v tomhle ukazkovém kódu mam dávat DIC kupujícího(nebo ten tam nemusí být)?

$crypto = new CryptographyService('cesta k privátnímu klíči', 'cesta k veřejnému klíči', 'heslo privátního klíče (nebo prázdný string pokud bez hesla)');
$configuration = new Configuration(
    'DIČ poplatníka',
    'Identifikace provozovny ',
    'Identifikace pokladního zařízení',
    EvidenceEnvironment::get(EvidenceEnvironment::PLAYGROUND), // nebo EvidenceEnvironment::get(EvidenceEnvironment::PRODUCTION) pro komunikaci s produkčním systémem
    false // zda zasílat účtenky v ověřovacím módu
);
$client = new Client($crypto, $configuration, new GuzzleSoapClientDriver(new \GuzzleHttp\Client()));

$receipt = new Receipt(
	true,
	'CZ683555118',
	'0/6460/ZQ42',
	new \DateTimeImmutable('2016-11-01 00:30:12'),
    3411300
);

try {
    $response = $client->send($receipt);
    echo $response->getFik();
} catch (\SlevomatEET\FailedRequestException $e) {
    echo $e->getRequest()->getPkpCode(); // if request fails you need to print the PKP and BKP codes to receipt
} catch (\SlevomatEET\InvalidResponseReceivedException $e) {
    echo $e->getResponse()->getRequest()->getPkpCode(); // on invalid response you need to print the PKP and BKP too
}

Díky

Neodesílá faktury a vrací špatný PKB

Dobrý den,

jíž od včerejšího večera(13.6.2017) mi nejde odeslat platbu na EET. Vrací to PKB v takovém formátu:

pdZ: uUCJwbkfi:LONh^dGoJQFxIA(!ma N%'qLg51?uwEG:Xl=[ph

cm[A6JIZH?0;/LLt)CơRw8>#G}W73M
gpO$&]$
~:
TPk[.efR?

Zkoušel jsem se včera dostat na portal etržeb, ale bylo tam uvedeno, že system nefunguje a na opravach se pracuje. Teď to vypadá, že etržby fungují, ale faktury se pořád neodesílají na EET.

Můj kód(poslední úprava před 2 měsíci)

        $crypto = new CryptographyService($this->container->get('kernel')->getRootDir() . '/Certificates/private.key', $this->container->get('kernel')->getRootDir() . '/Certificates/public.pub', 'Gz711bk96xi');
        $configuration = new Configuration(
            "$this->dicPoplatnik",
            "$this->cisloProvozovny",
            "$this->cisloPokladny",
            EvidenceEnvironment::get(EvidenceEnvironment::PRODUCTION),
            false
        );
        $client = new Client($crypto, $configuration, new GuzzleSoapClientDriver(new \GuzzleHttp\Client()));

        $receipt = new Receipt(
            true,
            $this->dicKupujici,
            "$this->cisloFaktury",
            $this->datumPlatby,
            ($this->cena * 100)
        );

        try {
            $response = $client->send($receipt);
            return ['fik' => $response->getFik(), 'bkp' => $response->getBkp(), 'pkb' => null];
        } catch (\SlevomatEET\FailedRequestException $e) {
            return ['fik' => null, 'bkp' => null, 'pkb' => $e->getRequest()->getPkpCode()];
        } catch (\SlevomatEET\InvalidResponseReceivedException $e) {
            return ['fik' => null, 'bkp' => null, 'pkb' => $e->getResponse()->getRequest()->getPkpCode()];
        }

Nevíte v čem může být problém? Je chyba na jejích straně? Díky

Receipt bere jen INT

Zdravim,

jak mam zaslat DPH(vetsinou desetinna cisla) na eet, kdyz Receipt prijima jen INT?

Extrahování p12

Dobrý den,

implementace testovacího prostředí byla opravdu jednoduchá - za to bychom chtěli poděkovat.

Máme ale problém při získání soukromého a veřejného klíče z p12 pro produkční prostředí vygenerováno přes https://ca1.eet.cz/app/createRequest. Pomocí
$ openssl pkcs12 -in 1980770601.p12 -nocerts -out private.key
$ ssh-keygen -y -f private.key > public.pub
jsem si získal potřebné soubory, ale při podpisu dostávám error 4 Neplatny podpis SOAP zpravy. Předpokládám, že problém je v postupu extrahování dat z p12. Mohl bych poprosit o postup získání potřebných souborů?

Přepnutí prostředí, zapnutí ověřovacího módu a kontrolu správnosti cest ke klíčům jsem udělal.

[Otázka] Prodej použitého zboží, 0 DPH správný formát

Dobrý den,

prodáváme použité zboží(já se starám jen o technickou stránku) a stali jsme se platce dph. Kontaktovál nas finanční úřad abychom upravili pokladní systém a odesílali platby v jiném formátu. Příklad:

Př. Celková částka tržby : 140,-Kč
Celkový základ daně se základní sazbou DPH: 20,08 Kč
Celková DPH se základní sazbou: 4,22 Kč
Celková částka v režimu DPH pro prodej použitého zboží se  základní sazbou: 115,70 Kč.

Účetní pořád tvrdí, že na to žádný vzoreček není, že se to ma naťukat ikdyž ji pořad vysvětlujeme, že nenáme fyzickou pokladnu a potřebujeme vzorec...
Email na finanční úřad se skoro po týdnu vratil jako nedoručený ...

Můžete poradit nebo mě nasměrovat jak se pani dostala k částkam

zakl_dan1 = 20,08
dan1 = 4,22

Děkují

EvidenceResponse::getRawData() nevrací všechna data

Narazil jsem na to, že z EvidenceResponse nelze vytáhnout všechna data z odpovědi XML. Raw data například neobsahují texty chyb (pouze atributy XML), nebo varování. Nelze tak nijak z knihovny vyexportovat všechna varování. Celý stdClass se vůbec nějak podivně serializuje:

Hlavicka => stdClass #2cfe
  uuid_zpravy => "f11c788c-f67a-41ea-9451-922ca9946a47" (36)
  bkp => "C0E71E70-7426660E-3CDB300F-23264AE2-29C3B485" (44)
  dat_prij => "2017-02-21T17:18:59+01:00" (25)
Potvrzeni => stdClass #d2ba
  fik => "c977ab23-76a0-4cc1-b0c3-6bdb6429815f-ff" (39)
  test => TRUE
Varovani => stdClass #7288
  kod_varov => 1

Otázka: Celková tržba

Dobrý den,

opravdu musím odesílat částku v setinách? Protože, jsem to hledal v etržby dokumentaci, a nikde jsem to nenašel. Ve vzoru je tohle:

Celková částka tržby celk_trzba 3264.00

A není napsáno, jestli to je 3200Kč nebo 32,64Kč.... Spíše bych se přiklonil k tomu prvnímu.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.