Code Monkey home page Code Monkey logo

eetcli's Introduction

EETCLI - Commandline klient pro EET (etrzby.cz)

Tento klient slouží pro odesílání tržeb pomocí skriptu nebo externího programu. Základním zadáním bylo udělat co nejjednodušší a nejodolnější implementaci tak, aby klient sice jen odesílal data na server ale v případě potřeby i uchovával informace pro pozdější kontrolu.

Vlastnosti

  • Multiplatformnost (PHP+PHAR)
  • Jednoduchost (řeší se pouze načtení, vytvoření a odeslání účtenky)
  • Vše ostatní je na skriptech a aplikacích, které klienta využijí
  • V základním režimu pouze vrací FIK
  • V rozšířeném režimu může vrátit jakoukoliv položku z EET
  • Může být použit i k vytvoření účtenky pomocí parametru --format @sablonauctenky.txt
  • Umí načíst, vytvořit, zapsat, otestovat a odeslat EET soubor EETFile
  • EET soubor může být vytvořen i externí aplikací, například účetním programem
  • Může být spouštěn i jako externí program například z účetního software při vytvoření paragonu.
  • Konfigurace v ini souboru nebo přímo z příkazové řádky. Lokace ini souboru je konfigurovatelná.
  • V základní konfiguraci nastaven pro neprodukční prostředí.
  • Dokud nenastavíte DIČ (v ini nebo --dic), klient vrací výchozí testovací účtenku.

Licence

Tento projekt je licencován pod GPL3. Zříkám se jakékoliv zodpovědnosti při používání tohoto programu. I když se snažím vše odzkoušet, používání pro odesílání datových zpráv do EET je jen na Vás a Vaší zodpovědnosti. Použil jsem komponenty třetích stran, které jsou rovněž šířeny pod otevřenou licencí, zejména

Použití

Malý návod k použití je i součástí samotného příkazu.

$ eetcli [--options]
Opensource klient pro etrzby.cz licencovany pod GPL3
Vice informaci na http://github.com/limosek/eetcli/

Seznam dostupnych maker na vystupu v poli format:
Poznamka: format muze zacinat znakem '@' coz znamena, ze bude nacten ze souboru, ne z parametru. Napr. @soubor.txt.
 {fik}           fik kod
 {bkp}           bkp kod
 {pkp}           pkp kod
   a dalsi: {uuid_zpravy},{dat_odesl},{prvni_zaslani},{overeni},{dic_popl},{dic_poverujiciho},{id_provoz},{id_pokl},{porad_cis},{dat_trzby},{celk_trzba},{zakl_nepodl_dph},{zakl_dan1},{dan1},{zakl_dan2},{dan2},{zakl_dan3},{dan3},{cest_sluz},{pouzit_zboz1},{pouzit_zboz2},{pouzit_zboz3},{urceno_cerp_zuct},{cerp_zuct},{pkp},{bkp},{fik}

Seznam promennych prostredi, ktere je mozno pouzit:
 TMP             adresar pro docasne soubory
 EETCLI_INI      ini soubor k nacteni (jinak postupne: /mnt/c/Users/LukasMacura/eetcli/../eetcli.ini,/home/limo/eetcli.ini,/home/limo/.eetclirc,/etc/eetcli.ini,/mnt/c/Users/LukasMacura/eetcli/../eetcli.ini.dist
 EETCLI_DEBUG    debug level (0-4)

Mody pouziti:
-N file.eet              Vytvor EET soubor z parametru a nikam nezasilej. Je mozno pouzit i makra v nazvu souboru, napr. {uuid_zpravy}

-C file.eet              Vytvor EET soubor z parametru a zaroven zasli na etrzby. Je mozno pouzit i makra v nazvu souboru, napr. {uuid_zpravy}

-S file.eet              Nacti EET soubor a pokud jeste nebyl zaslan, posli na etrzby. Nasledne uloz pod stejnym jmenem. V pripade, ze uz byl dany eet soubor zaslan drive, vrati se chyba.

-P file.eet              Nacti EET soubor, otestuj jeho stav a pouze vypis informace podle format. Pokud nesedi kontrolni soucty, vrat chybu.

-T file.eet              Nacti EET soubor, otestuj jeho stav a pouze vrat chybove hlaseni a navratovy kod podle stavu souboru.

nebo vubec nepouzit EET soubor a pouze odeslat trzbu (--dic, --trzba, --uuid, ...)

Navratove kody:
1        Docasna technicka chyba zpracovani - odeslete prosim datovou zpravu pozdeji
2        Kodovani XML neni platne
3        XML zprava nevyhovela kontrole XML schematu
4        Neplatny podpis SOAP zpravy
5        Neplatny kontrolni bezpecnostni kod poplatnika (BKP)
6        DIC poplatnika ma chybnou strukturu
7        Datova zprava je prilis velka
8        Datova zprava nebyla zpracovana kvuli technicke chybe nebo chybe dat
20       Chyba pri praci se souborem
21       Uctenka jiz byla zaslana
22       Chyba v parametrech
23       Chyba ve formatu souboru
24       Chyba pri uzamykani souboru
25       Uctenka je nova (vysledek testu)
26       Uctenka jiz byla zaslana (vysledek testu)
27       Kontrolni soucty v EET souboru nesedi
29       EET uctenka neodeslana kvuli chybe
30       EET soubor odeslan v overovacim rezimu

Options:
  -d, --debug <arg>
  -e, --errors <arg>
  -o, --output <arg>
  -h, --help [<arg>]
  --key <arg>
  --crt <arg>
  -n, --overovaci [<arg>]
  -p, --neprodukcni [<arg>]
  --uuid <arg>
  --dic <arg>
  --provozovna <arg>
  --pokladna <arg>
  --pc <arg>
  --cas <arg>
  --trzba <arg>
  --zakl_nepodl_dph <arg>
  --zakl_dan1 <arg>
  --dan1 <arg>
  --zakl_dan2 <arg>
  --dan2 <arg>
  --zakl_dan3 <arg>
  --dan3 <arg>
  --format <arg>
  -N, --create-eet [<arg>]
  -C, --create-send-eet [<arg>]
  -S, --send-eet [<arg>]
  -P, --print-eet [<arg>]
  -T, --test-eet [<arg>]
Pouzijte eetcli -h -d 4 pro vice informaci.

Konfigurace

Všechny parametry mohou být zadány přímo přes příkazovou řádku, nicméně pokud si vytvoříte ini soubor, můžete některé věci přednastavit. Můžete vyjít z eetcli.ini.dist. Nezapomeňte, že dokud nenakonfigurujete své údaje, klient funguje v ověřovacím režimu s testovacími certifikáty! INI soubor se načítá z těchto umístění v tomto pořadí:

  • z adresáře, kde je eetcli.php (dirname(eetcli.ini)/eetcli.ini)
  • z domácího adresáře uživatele HOME/eetcli.ini, HOME/.eetclirc
  • z globálního config adresáře (/etc/eetcli.ini)
  • z distribučního phar archivu (eetcli.ini.dist)
[global]
; Pro vyssi uroven ladicich informaci
;debug=4

; Kam zapsat vystup. Pokud neni nastaveno, pak stdout
;output=fik.txt
; Kam zapsat chyby. Pokud neni nastaveno, pak stderr
;errors=eet.log

[eet]
; Vychozi stav v distribucnim balicku je overovaci. Odkomentujte pro ostry
overovaci=1
; Vychozi stav v distribucnim balicku je neprodukcni prostredi. Odkomentujte pro ostry
neprodukcni=1
; Format, ve kterem se vypisi data. Je mozno pouzit \n,\r a jine znacky. Makra budou zamenena za kody. 
;format=fik={FIK}\nbkp={BKP}\npkp={PKP}\n

[cert]
; Vychozi distribucni certifikaty. Zmente za svoje
crt=./keys/EET_CA1_Playground-CZ1212121218.crt
key=./keys/EET_CA1_Playground-CZ1212121218.pem

[firma]
; Vychozi informace pro testovaci certifikat. Zamente za vase data
dic=CZ1212121218
pokladna=1
provozovna=181

Příklady bez použití EET souboru

Odešli tržbu 500,-Kč v ověřovacím režimu, použij klíč abcd.pem a certifikat abcd.crt. Použij pořadové číslo 1, pokladnu 1 a provozovnu 11.

$ eetcli --crt abcd.crt --key abcd.pem --pc 1 --pokladna 1 --provozovna 11 --trzba 500 -n
1

nebo v ostrém režimu ale v produkčním prostředí

eetcli --crt abcd.crt --key abcd.pem --pc 1 --pokladna 1 --provozovna 11 --trzba 500 -p
Neprodukční prostředí. Pro produkční zadejte -d 0.
0210c205-1f2f-40a9-be8a-9f7eb7953aa5-ff

nebo ostrý režim a ostré prostředí

eetcli --crt abcd.crt --key abcd.pem --pc 1 --pokladna 1 --provozovna 11 --trzba 500 -p 0 -n 0
0210c205-1f2f-40a9-be8a-9f7eb7953aa5-xx

Příklady s použitím EET souboru

Vytvoření EET souboru, který se bude jmenovat dle UUID.

eetcli -N {uuid_zpravy}.eet

Zaslání vytvořeného souboru na server. Pokud se vše podaří, uloží informace a fik zpět do EET souboru. Pokud ne, uloží do EET souboru stav jako neodeslaný.

eetcli -S b7bc6474-47aa-aaaa-81fb-45e4f715aaaa.eet

Test kontrolních kódů v EET souboru

eetcli -T soubor.eet

Vypsání EET souboru jako účtenky

eetcli -P soubor.eet --format '@doc/uctenka.txt'

Instalace

Teoreticky by mělo stačit stáhnout PHP a pak spouštět přímo eetcli. Návod pro instalaci pro jednotlivé systémy nebudu psát, kdo chce tento SW používat, jistě si to najde:) Případně mi pošlete info a já můžu návod upravit. Instalace na debian a podobných systémech:

sudo apt-get update
sudo apt-get install php-cli php-curl php-soap php-dom
wget https://raw.githubusercontent.com/limosek/eetcli/1.0/bin/eetcli
chmod +x eetcli
./eetcli -h

Pokud chcete, můžete klienta přidat i do spustitelné cesty, takže bude zavolatelný z jakéhokoliv místa.

Certifikáty pro EET jsou distribuovány jako .p12 soubory. Tento klient vyžaduje .pem a .crt soubory, které je potřeba extrahovar z .p12. Pokud máte nainstalovaný program make a openssl, můžete si certifikát převést takto (pouze pokud si stáhnete git repozitář):

git clone https://github.com/limosek/eetcli.git
cd eetcli
# Zkopirujte svuj .p12 klic do adresare keys/ a nasledne
make pem P12=keys/muj_klic.p12 PASS=heslo_ke_klici 

V adresáři keys pak vzniknou nové soubory .pem a .crt, které můžete použít a odkázat se na ně například z ini souboru.

Vývoj a kustomizace phar

Pokud chcete pomoci s vývojem, určitě neodmítnu :) Teoreticky si můžete vytvořit svůj vlastní phar archív a uložit do něj své klíče i ini soubor. Stačí na to pustit make a vytvoří se eetcli.phar který je modifikován pro vaše použití. Součástí takového balíku jsou pak všechny klíče z adresáře keys tak eetcli.ini. S tím jsou zase samozřejmě spojeny bezpečnostní věci, tedy že byste pak neměli phar archív nikdy dát z ruky, ale to už je mimo rámec tohoto dokumentu. Pokud chcete vytvořit vývojové prostředí, potřebujete mít k dispozici php, phar, composer a make. Pro vytvoření phar archivu můžete použít:

git clone [email protected]:limosek/eetcli.git
cd eetcli
make clean
make

Pokud chcete změnit parametry pharu, můžete použít například:

make P12=cesta_ke_klici.p12 PASS=heslo_ke_klici 

Nezapomeňte, že součástí vytvořeného archivu jsou hesla, klíče ale i ini soubory!

Pro vyčištění do původního stavu použijte

make distclean

Pro vytvoření čistého eetcli (v adresáři bin) pro účely další distribuce (bez klíčů a osobních informací), použijte

make distphar

eetcli's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

psakar

eetcli's Issues

Neplatny podpis SOAP zpravy

Nefunfuje mi defaultní testovací režim EET, program končí chybou "Neplatny podpis SOAP zpravy".

/eetcli --trzba 15
Vracim vychozi uctenku, protoze je pouzity testovaci DIC.
Neprodukční prostředí. Pro produkční zadejte -p 0.
Neplatny podpis SOAP zpravy

Protože jsem se dočetl, že 2.6.2020 měnili playground klíče, zkusil jsem i stáhnout aktuální playground EET_CA1_Playground_v3.zip z https://www.etrzby.cz/cs/technicka-specifikace a nahradit použitý klíč v ./keys/ a přegenerovat klíče pomocí:
make pem P12=keys/EET_CA1_Playground-CZ1212121218.p12 PASS=eet
ty jsem z ./keys/ nakopíroval do ./bins/.keys/
bohužel i s novými klíči to končí stejnou chybou.
Prosím o zprovoznění.
použitý ini soubor je zde:
eetcli.ini.txt

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.