todvora / eet-client

Client and library for #EET communication - http://www.etrzby.cz/ , written in Java
MIT License
48 stars 26 forks source link

BKP by měl být k dispozici vždy #11

Closed Dacesilian closed 7 years ago

Dacesilian commented 7 years ago

Dobrý den, děkuji za skvělou knihovnu! Mám dotaz na získání BKP v případě chyby. BKP by měl být dostupný a tisknout se na účtenku vždy.

Když server odpoví, ale nedostanu FIK (SubmitResult result = client.submitReceipt(..)), volání result.getBKP() vrátí NULL.

Když dojde k chybě komunikace (catch (final CommunicationException e)), není metoda pro získání BKP k dispozici. Možná by šel BKP získat přes e.getRequest().getKontrolniKody().getBkp()?

Jak prosím dostat BKP vždy? Děkuji.

Dacesilian commented 7 years ago

Možná by mohla být metoda public String getBKP(final byte[] pkp) v SecurityCodesGenerator statická? Na první pohled nevyužívá clientKey.

Zdá se, že ano, dává to dobře vypadající BKP: getBKP(result.getRequest().getKontrolniKody().getPkp().getValue()) resp. getBKP(e.getRequest().getKontrolniKody().getPkp().getValue())

todvora commented 7 years ago

Dobrý den, BKP kód je dostupný vždy po zavolání funkce client.submitReceipt. Buď přímo přes result.getBKP() nebo přes objekt chyby, přesně jak píšete e.getRequest().getKontrolniKody().getBkp(). Právě jsem doplnil i pomocnou metodu do objektu výjimky a v příštím release bude možné volat i exception.getBKP().

Můžete prosím blíže popsat situaci, kdy result.getBKP() vrací null? Výsledek toho volání by nijak neměl záviset na komunikaci s WS. Kódy jsou předpočítány dříve, než dojde k samotné komunikaci.

Díky!

EDIT: Release 2.0.2 k dispozici, exception.getBKP() implementováno.

Dacesilian commented 7 years ago

Používám CommunicationMode.TEST a endpoint PRODUCTION, server vrátí Datovou zpravu evidovane trzby v overovacim modu se podarilo zpracovat (správně) a result.getBKP() je null.

SubmitResult result = client.submitReceipt(data, CommunicationMode.TEST, endpoint, submType);
System.out.println("BKP = " + result.getBKP());

Druhý případ - přímo getKontrolniKody().getBkp() jsem nezkoušel, děkuji za úpravu. Já jsem to řešil vyčleněním těch metod z SecurityCodesGenerator.

todvora commented 7 years ago

Aha, už to vidím, V případě SubmitResult se BKP získával z hlavičky odpovědi (result.getHlavicka().getBkp()), ne samotného requestu. Mělo by jít vždy o ta samá data, kód jsem tedy upravil a už by měl vždy vracet správný BKP, bez ohledu na stav odpovědi z WS.

Pokud to je možné, otestujte prosím verzi 2.0.3 a dejte vědět, jestli je problém vyřešen :-)

Díky za hlášení problému a dodatečné info!

Dacesilian commented 7 years ago

Už to funguje ve všech případech! Děkuji.

todvora commented 7 years ago

Super, také díky :+1: