Autor Téma: eNeschopenka  (Přečteno 929 krát)

Offline MartinOVA

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
eNeschopenka
« kdy: 14-01-2020, 12:44:22 »
Zdar,
hledám informace  jak pomocí web. služby stáhnou seznam zaměstnanců, kteří mají nemocenskou (pro mého zamestnavatele).
Prošel jsem https://www.cssz.cz/web/cz/informace-pro-sw-vyvojare, ale nemám jasno.

Mám DEMO certifikat PostSignum xy_PEM.crt, který jsem zaregistroval pomocí podpora.eneschopenka@cssz.cz

Ale nevím jakou web. službu (WSDL) mám použít, spíš jak ji použít?

Děkuji za info, případně za konstruktivní řešení.


Offline Marek Weyda

  • Hrdina
  • ****
  • Příspěvků: 250
  • Karma: 8
    • Verze Delphi: Delphi 2007, 10.1 Berlin
Re:eNeschopenka
« Odpověď #1 kdy: 15-01-2020, 08:59:17 »
Excellent
Rated 1 time
Jsem čerstvě po naprogramování komunikace našeho ERP s rozhraním ČSSZ VREP, takže mohu poradit. Řešili jsme nejenom e-neschopenku, ale i všechna další podání (ELDP, ZZVDPN20 a další), abychom již mohli odstřihnout software třetích stran. Tady se musím ČSSZ zastat, ačkoliv se státními úřady v oblasti IT nemáme nejlepší zkušenosti, tak v tomto případě bylo vše perfektně popsané a stačí úplně k naprogramování tyto dokumenty:

https://www.cssz.cz/documents/20143/181606/csszpodavacidotazovaciprotokol20110608.pdf/c48bf534-22d9-501d-62e9-62ca567e04b3
(jedná se o obecný popis komunikace s ČSSZ VREP i datové schránky, kde je perfektně popsána webová služba a komunikace s ní, struktura XML, GovTalkMessage, CSSZMessage a další; jsou tam i příklady pro programátory, které jsou 100 procentně funkční, osobně vyzkoušeno)

https://www.cssz.cz/documents/20143/99425/eNeschopenka_-_Popis_rozhrani_pro_zamestnavatele_1-2.pdf/53264ff1-f344-03e2-eec1-f7adf915db0e
(tam jsou další informace k e-neschopence)

Pro další podání, nejenom e-neschopenku, má ČSSZ v sekci pro vývojáře vždy XSD schémata a většinou i PDF s dalším podrobným popisem.

Jak použít webovou službu tedy doporučuji přečíst hlavně ten první dokument a tam je vše potřebné popsáno, další informace již opravdu netřeba. Úplně na konci v tom dokumentu jsou odkazy na jednotlivé webové služby.

Stručně řečeno je potřeba postupovat takto: vytvořit obecnou obálku GovTalkMessage, v ní pak CSSZMessage a v ní pak konkrétní XML pro konkrétní podání (DZDPN20 je pro e-neschopenku). Podání DZDPN20 pak musí obsahovat ještě na rozdíl od ostatních veřejnou část šifrovacího certifikátu, kterou použije ČSSZ v odpovědi. Směrem k nim se to zase šifruje jejich certifikátem, který je ke stažení na jejich stránkách. Dále je potřeba ještě podepsat podpisovým certifikátem.

Doporučuji nejprve odladit na jejich testovacím rozhraní. To má adresu https://t-epodani.cssz.cz/VREP/ws/public.svc

Osobně mám zkušenost, že vše se díky jejich dokumentaci podařilo téměř na první dobrou, jediné, co jsem musel více řešit, ale to není věc ČSSZ, tak že naši klienti mají certifikáty porůznu - někdo nainstalované v úložišti, někdo v souboru, někdo používá čipovou kartu a podobně, k zadání PINu používají virtuální klávesnice a různé další vymoženosti. Takže možná spíše se při programování budete potýkat s tímto než se samotným napojením na ČSSZ VREP. Ale vše se nakonec zvládlo bez větších zákysů.

Tak snad budou tyto informace k užitku. Zatím nemáme ani hlášené nějaké větší problémy s rozhraním ČSSZ VREP, jak proběhlo v tisku, to jsme moc nezaznamenali. Asi si to už odladili. Ze začátku tam měli podle mě problém s množstvím přístupů, co jim to po 1. lednu asi zahltilo webové rozhraní.

Offline MartinOVA

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
Re:eNeschopenka
« Odpověď #2 kdy: 15-01-2020, 15:19:07 »
Díky za informace. Zdroje jsem přečetl, posunulo mě to dál.

Sestavil jsem vstupní xml DZDPN20:
<?xml version="1.0"?>
-<DZDPN xmlns="http://schemas.cssz.cz/nem/DZDPN20" verze="2020.0">
<Zamestnavatel>123456</Zamestnavatel>
-<IntervalNotifikaci>
<DatumOd>2020-01-01</DatumOd>
<DatumDo>2020-01-15</DatumDo>
</IntervalNotifikaci>
<SifrovaciCertifikat/>
</DZDPN>

A vím že musím xml data:
1) komprimovat GZIP
2) přidat šifrovací certifikát
3) převést na Base64
4) zabalit do obálky GovTalk
5) zavolat web. službu APEP, přes metody IBusinessTransactions

Ale nevím jak. , jaké použít metody.
Používám Delphi 10 Professional, bez dalších komponent.

Offline MartinOVA

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
Re:eNeschopenka
« Odpověď #3 kdy: 29-01-2020, 13:09:04 »
submission poll mi vrací na testu(https://vrep1-t.cssz.cz/VREP/submission) chybu "Nepodařilo se dekódovat podpis".
Myslím že minuly týden mi to nedělalo.

Nevíte co je to za chybu "Nepodařilo se dekódovat podpis"?
- přece šifrování a podepisování jsou dvě rozdílné věcí a myslím si, že nemám nic podpisovat.


Offline Marek Weyda

  • Hrdina
  • ****
  • Příspěvků: 250
  • Karma: 8
    • Verze Delphi: Delphi 2007, 10.1 Berlin
Re:eNeschopenka
« Odpověď #4 kdy: 29-01-2020, 13:25:57 »
Nevíte co je to za chybu "Nepodařilo se dekódovat podpis"?
- přece šifrování a podepisování jsou dvě rozdílné věcí a myslím si, že nemám nic podpisovat.

Při dotazování na výsledek zpracování (submit_poll) se posílá Correlation ID a variabilní symbol, nic jiného netřeba. Tato chyba podle mě může být reakce na podání. ČSSZ VREP často podání přijme, ale chybu pak pošle až při dotazu na výsledek zpracování. Byl původní dokument opravdu správně podepsán ? Nicméně mně to vracelo chybu vždy při požadavku na zpracování (submit_request), nikdy se mi nestalo, že by při submit_poll hlásilo podobnou chybu. Chyby podpisu mi to píše zásadně při submit_request. Při submit_poll mi to píše akorát u některých zákazníků, že podpisový certifikát není registrovaný. Ale to se netýká ověření podpisu jako takového. To se týká jeho registrace a tato chyba je vždy na straně klientů, kteří používají certifikáty k podpisu a jaksi si je zapomínají registrovat u sociálky.

Takže v tomto případě nevím. Pokud tuto chybu opravdu vrací rozhraní ČSSZ VREP a ne nějaká komponenta, kterou používáte, tak bych zkusil zapátrat tam.

EDIT 1: A opravdu zkuste ověřit, že tu chybu vrací rozhraní ČSSZ VREP a nebo komponenta, kterou pro komunikaci používáte. To bych viděl jako zásadní. Já osobně jsem toto hlášení z rozhraní ČSSZ VREP ještě nedostal. Nevím, co používáte za komponenty, ale já řešil už s tím ČSSZ VREP dost rozmanité hlášky, co většinou právě ani nebyly přímo vrácené chyby z ČSSZ VREP, ale ty chyby vyhazovaly komponenty.
« Poslední změna: 29-01-2020, 13:34:36 od Marek Weyda »

Offline MartinOVA

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
Re:eNeschopenka
« Odpověď #5 kdy: 29-01-2020, 13:55:34 »
1) Hlašku mi vrací VREP:
<?xml version="1.0" encoding="UTF-8"?>
-<GovTalkMessage xmlns:xsig="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.govtalk.gov.uk/CM/envelope">
<EnvelopeVersion>2.0</EnvelopeVersion>
-<Header>
-<MessageDetails>
<Class>CSSZ_DZDPN</Class>
<Qualifier>error</Qualifier>
<Function>submit</Function>
<TransactionID/>
<CorrelationID>0596C75CE2FB47978331B36F83C96EF5</CorrelationID>
<ResponseEndPoint PollInterval="60">https://t-epodani.cssz.cz/VREP/submission</ResponseEndPoint>
<Transformation>XML</Transformation>
<GatewayTimestamp>2020-01-29T09:51:00.000</GatewayTimestamp>
</MessageDetails>
-<SenderDetails>
-<IDAuthentication>
<SenderID>*****</SenderID>
-<Authentication>
<Method>clear</Method>
<Value>*****</Value>
</Authentication>
</IDAuthentication>
</SenderDetails>
</Header>
-<GovTalkDetails>
-<Keys>
<Key Type="SpokeName">VREP</Key>
</Keys>
-<GovTalkErrors>
-<Error Id="0">
<RaisedBy>Business</RaisedBy>
<Number>17807</Number>
<Type>business</Type>
<Text>Nepodařilo se dekódovat podpis.</Text>
</Error>
</GovTalkErrors>
………..

2)
Jestli to s tím nemůže souviset, Na CSSZ píšou
23. 1. 2020 Informace o změně algoritmů pro šifrování odpovědí
https://www.cssz.cz/web/cz/informace-pro-sw-vyvojare

3)
Pro sifrovaní mých vstupních dat používám SSL metodu
lFlags := CMS_BINARY;
CMS_encrypt(lRecips, lBioIn, EVP_aes_256_cbc, lFlags)

Offline Marek Weyda

  • Hrdina
  • ****
  • Příspěvků: 250
  • Karma: 8
    • Verze Delphi: Delphi 2007, 10.1 Berlin
Re:eNeschopenka
« Odpověď #6 kdy: 29-01-2020, 15:09:40 »
2)
Jestli to s tím nemůže souviset, Na CSSZ píšou
23. 1. 2020 Informace o změně algoritmů pro šifrování odpovědí
https://www.cssz.cz/web/cz/informace-pro-sw-vyvojare

3)
Pro sifrovaní mých vstupních dat používám SSL metodu
lFlags := CMS_BINARY;
CMS_encrypt(lRecips, lBioIn, EVP_aes_256_cbc, lFlags)

Ajaj, tak to je asi ono, co píšete.

V tom oznámení pro vývojáře je doslova napsáno:

"V souvislosti s praxí certifikačních autorit, které umožňují svým klientům ukládat na čipové karty (USB token Bit4Id TokenME apod.) nejen zaručený elektronický podpis, ale i komerční certifikát (určený například pro šifrování odpovědí), jsme byli nuceni dnes večer provést downgrade algoritmů pro šifrování odpovědi z modernějších algoritmů RSA-OAEP + AES-256-CBC na starší verzi RSA + AES-128-CBC. Důvodem tohoto kroku je funkčnost čipových karet, které nedokáží modernější algoritmy dešifrovat."

Takže podle mě je to přesně to, co vás postihlo. Zkuste použít tu starší verzi, co tam popisují - RSA + AES-128-CBC.

To tedy zírám, že udělali downgrade :D Naopak u EET udělali obrácenou věc :)

Mě to tedy naštěstí nepostihlo, ale nepoužívám OpenSSL jako vy. Tak snad je to ono, zkuste to poladit, ale myslím, že jste na správné cestě, zní to dost logicky, že příčina je právě v tomto, zvláště když píšete, že ještě minulý týden vám to fungovalo.

Offline Marek Weyda

  • Hrdina
  • ****
  • Příspěvků: 250
  • Karma: 8
    • Verze Delphi: Delphi 2007, 10.1 Berlin
Re:eNeschopenka
« Odpověď #7 kdy: 29-01-2020, 15:29:05 »
Ještě mě tedy mate ale jedna věc, že vám to vrací chybu, že se nepodařilo dekódovat podpis na straně sociálky, ale v tom oznámení píší o změně algoritmu šifrování dat v odpovědi od ČSSZ VREP kvůli těm čipovým kartám, co nedokázaly ty modernější algoritmy dešifrovat. Takže v podstatě by se mělo jednat o jiný směr komunikace, než se zdá, že nefunguje vám. Ale bůhví, co všechno změnili. Když na něco přijdete, dejte vědět, jak jsem psal, u nás s tím problém naštěstí vůbec není, ani jsem o tom oznámení nevěděl, ale docela by mě to zajímalo, na co přijdete.

Offline MartinOVA

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
Re:eNeschopenka
« Odpověď #8 kdy: 30-01-2020, 15:19:05 »
Na testu jsem DZDPN prokopal.

Chyb bylo několik: (co jsem myslel, že funguje OK ,tak Nee)
1) Neměl jsem zprávu podepsanou
2) Na ČSSZ certifikát zadala se špatným vystavitelem.
3) Downgrade z aes_256_cbc na aes_128_cbc

Ale mám ještě dotaz na URL adresy:
https://vrep1-t.cssz.cz/VREP/submission
https://vrep2-t.cssz.cz/VREP/submission
https://vrep1-t.cssz.cz/VREP/poll
https://vrep2-t.cssz.cz/VREP/poll

1) Chápu správně: pro podání - submission, pro dotaz - poll ?
2) Na uzavření transakce jakou adresu ?
3) V jakém případě použít druhou adresu ?

Offline Marek Weyda

  • Hrdina
  • ****
  • Příspěvků: 250
  • Karma: 8
    • Verze Delphi: Delphi 2007, 10.1 Berlin
Re:eNeschopenka
« Odpověď #9 kdy: 31-01-2020, 08:39:40 »
Ale mám ještě dotaz na URL adresy:
https://vrep1-t.cssz.cz/VREP/submission
https://vrep2-t.cssz.cz/VREP/submission
https://vrep1-t.cssz.cz/VREP/poll
https://vrep2-t.cssz.cz/VREP/poll

1) Chápu správně: pro podání - submission, pro dotaz - poll ?
2) Na uzavření transakce jakou adresu ?
3) V jakém případě použít druhou adresu ?

Tak já používám rozhraní webové služby a to na adrese https://vrep1.cssz.cz/VREP/ws/public.svc (záložní je pak https://vrep2.cssz.cz/VREP/ws/public.svc).

Webová služba implementuje jediné veřejné rozhraní IBusinessTransaction, kde jsou všechny potřebné metody - tedy:

PollResponse Submit(string tclass, BindingList<BodyPart> bodies, BindingList<OptionalParameter> optionals) - jde o metodu pro odeslání podání
PollResponse Poll(string correlationid, BindingList<OptionalParameter> optionals) - jde o metodu pro dotaz na stav podání
void Dispose(string correlationid, BindingList<OptionalParameter> optionals) - ukončí transakci

V Delphi pak je potřeba se s tímto rozhraním patřičně skamarádit :)

Vše je právě dost dobře popsané v tom dokumentu od sociálky - v podstatě si myslím, že to mají opravdu hodně jednoduše a srozumitelně dělané. Jediný problém, který asi měli, je ten, že v lednu se jim spustila lavina dotazů na nemocnost a asi jejich webové služby nestíhaly. Ale jak už jsem psal, já jsem toto třeba nezaznamenal, až teď na konci ledna mi přišla jednou jedinkrát u jednoho našeho zákazníka chybová hláška, že rozhraní je nedostupné. Ale za chvíli vše fungovalo.