Autor Téma: Registr plátců DPH přes SOAP  (Přečteno 12888 krát)

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Registr plátců DPH přes SOAP
« kdy: 05-04-2013, 08:58:49 »
Nedělali jste někdo komunikaci s registrem plátců DPH ?
O komunikaci SOAP se pokouším prvně.
http://epodpora.mfcr.cz/33-1218.html
Naimportoval jsem WSDL soubor a hází mi to chybu viz příloha
už u tohohle kódu:
var S:StatusNespolehlivyPlatceResponse;
    Par:StatusNespolehlivyPlatceRequest;
    U:Ucet;
begin
 SetLength(Par, 20);
 Par[0]:='CZ126333';
S:=(HTTPRIO1 as rozhraniCRPDPH).getStatusNespolehlivyPlatce(Par);
http://adisrws.mfcr.cz/adistc/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP?wsdl
Jestli to tak nepůjde, jak poslat podobný dotaz pomocí synapse ?

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
     <soapenv:Body>
          <StatusNespolehlivyPlatceRequest
               xmlns="http://adis.mfcr.cz/rozhraniCRPDPH/">
               <dic>445522999</dic>
               <dic>8855229999</dic>
               <dic>7755229999</dic>
               <dic>010101010</dic>
          </StatusNespolehlivyPlatceRequest>
     </soapenv:Body>
</soapenv:Envelope>
« Poslední změna: 05-04-2013, 09:02:41 od Petr P. »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #1 kdy: 05-04-2013, 11:01:27 »
Nedělali jste někdo komunikaci s registrem plátců DPH ?
O komunikaci SOAP se pokouším prvně.
...
Jestli to tak nepůjde, jak poslat podobný dotaz pomocí synapse ?
Konkretne tohle pripojeni jsem nedelal a ani nevim, jestli uz maji posledni verze Delphi opravny binding.
Nepodelil ses s nama o verzi Delphi, coz muze mit dost rozhodujici. Pro starsi verze bylo pravidlem, ze clovek musel zacit tady http://cc.embarcadero.com/Item/24535.

Jinak samozrejme SOAP zpravu muzes vytvaret 'rucne', ja to treba delaval pres DOM a pak ji posles jako beznou HTTP(s) request na server a prectes si odpoved. Z HTTP odpovedi si vyndas SOAP zpravu a tu rozparsujes. A delal bych to az v pripade, ze vsechny pokusy se standardni podporou selzou.

Podivej se packet snifferem, co to Delphi posila a jak se to lisi od vzoru
« Poslední změna: 05-04-2013, 11:03:01 od pf1957 »

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #2 kdy: 05-04-2013, 11:35:23 »
Mám Turbo Delphi 2006 a tuhle aktualizaci jsem dělal.
http://cc.embarcadero.com/Item/24535.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #3 kdy: 05-04-2013, 11:47:02 »
Mám Turbo Delphi 2006 a tuhle aktualizaci jsem dělal.
http://cc.embarcadero.com/Item/24535.
No a vystup co ti z Delphi leze mas, abys ho srovnal se vzorem a zjistil, co je jinak? Nejsnazsi bude lapit komunikaci treba WireSharkem.

Offline anec

  • Mladík
  • **
  • Příspěvků: 99
  • Karma: 3
Re:Registr plátců DPH přes SOAP
« Odpověď #4 kdy: 05-04-2013, 13:41:00 »
řešil jsem to taky a nevyřešil, nakonec jsem šel cestou nejmenšího odporu = synapse

hsend.Document.LoadFromStream(finstream);
presult:=hsend.HTTPMethod('POST', furltext);
fdownstream.CopyFrom(hsend.Document, 0);

a výsledek rozparsovat ručně

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #5 kdy: 05-04-2013, 14:36:59 »
Mám Turbo Delphi 2006 a tuhle aktualizaci jsem dělal.
http://cc.embarcadero.com/Item/24535.
No a vystup co ti z Delphi leze mas, abys ho srovnal se vzorem a zjistil, co je jinak? Nejsnazsi bude lapit komunikaci treba WireSharkem.
WireShark jsem stáhnul, ale jak se  zjistí výstup, jsem zatím nenašel. Vypadá to, že bude lepší to udělat přes synapsi, jak píše anec.
« Poslední změna: 05-04-2013, 15:09:18 od Petr P. »

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #6 kdy: 05-04-2013, 15:24:03 »
V XE2 to přes standardní SOAPHTTPClient jede. Stačí imporotvat wsdl - pak myslim upravit

  InvRegistry.RegisterParamInfo(TypeInfo(rozhraniCRPDPH), 'getStatusNespolehlivyPlatce', 'parameters', '',
                                '[ArrayItemName="dic"]');

a

  RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'dic');

Pozor na velká a málá písmena. Pak už vy to mělo pře interface jít zavolat. Bez výše uvedené úpravy to hlásí prázdný seznam dič.

Příklad volání:

Kód: Delphi [Vybrat]
  1. var A:rozhraniCRPDPH;
  2.     I:StatusNespolehlivyPlatceRequest;
  3.     R:StatusNespolehlivyPlatceResponse;
  4. begin
  5.  Setlength(I,1);
  6.  I[0]:='46345680';
  7.  A:=GetrozhraniCRPDPH(false,'',HTTPRIO1);
  8.  R:=A.getStatusNespolehlivyPlatce(I);
  9.  Memo1.Clear;
  10.  Memo1.Lines.Add(R.status.statusText);
  11.  Memo1.Lines.Add(R.statusPlatceDPH[0].DIC);
  12.  R.Free;
  13.  Setlength(I,0);
  14.  A:=nil;
  15. end;
« Poslední změna: 05-04-2013, 15:55:24 od zdenek »

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #7 kdy: 05-04-2013, 16:45:08 »
V XE2 to přes standardní SOAPHTTPClient jede. Stačí imporotvat wsdl - pak myslim upravit

  InvRegistry.RegisterParamInfo(TypeInfo(rozhraniCRPDPH), 'getStatusNespolehlivyPlatce', 'parameters', '',
                                '[ArrayItemName="dic"]');

a

  RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'dic');


Tyhle dvě funkce v Turbo Delphi 2006 bohužel nejsou.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #8 kdy: 05-04-2013, 16:56:38 »
Nevím úplně co je turbo delphi 2006, ale v delphi 2006 to je. Tohle je import wsdl v d2006:

Kód: Delphi [Vybrat]
  1.   InvRegistry.RegisterInterface(TypeInfo(rozhraniCRPDPH), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'UTF-8');
  2.   InvRegistry.RegisterDefaultSOAPAction(TypeInfo(rozhraniCRPDPH), 'http://adis.mfcr.cz/rozhraniCRPDPH/getStatusNespolehlivyPlatce');
  3.   InvRegistry.RegisterInvokeOptions(TypeInfo(rozhraniCRPDPH), ioDocument);
  4.   InvRegistry.RegisterInvokeOptions(TypeInfo(rozhraniCRPDPH), ioLiteral);
  5.   RemClassRegistry.RegisterXSInfo(TypeInfo(NespolehlivyPlatceType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'NespolehlivyPlatceType');
  6.   RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'DICType');
  7.   RemClassRegistry.RegisterXSInfo(TypeInfo(SeznamZverejnenychUctuType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'SeznamZverejnenychUctuType');
  8.   RemClassRegistry.RegisterXSClass(InformaceOPlatciType, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'InformaceOPlatciType');
  9.   RemClassRegistry.RegisterXSClass(ZverejnenyUcetType, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'ZverejnenyUcetType');
  10.   RemClassRegistry.RegisterXSClass(StatusType, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'StatusType');
  11.   RemClassRegistry.RegisterXSClass(ucet, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'ucet');
  12.   RemClassRegistry.RegisterXSInfo(TypeInfo(dic), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'dic');
  13.   RemClassRegistry.RegisterXSInfo(TypeInfo(StatusNespolehlivyPlatceRequest), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'StatusNespolehlivyPlatceRequest');
  14.   RemClassRegistry.RegisterXSInfo(TypeInfo(Array_Of_InformaceOPlatciType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'Array_Of_InformaceOPlatciType');
  15.   RemClassRegistry.RegisterXSClass(StatusNespolehlivyPlatceResponse, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'StatusNespolehlivyPlatceResponse');
  16.   RemClassRegistry.RegisterSerializeOptions(StatusNespolehlivyPlatceResponse, [xoLiteralParam]);

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #9 kdy: 05-04-2013, 17:22:45 »
RemClassRegistry.RegisterXSInfo(..)  tam skutečně je, ale  InvRegistry.RegisterParamInfo(..) tam není.
Zkoušel jsem doplnit tu první funkci, ale nefunguje to taky.
« Poslední změna: 05-04-2013, 17:26:33 od Petr P. »

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #10 kdy: 05-04-2013, 17:26:11 »
Máte pravdu. Teď jsem to zkoušel na d2006 a ten soap má nějaký bug, jednak už generuje blbě request ale ani po ruční nápravě se to nesrovnalo.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #11 kdy: 05-04-2013, 17:30:01 »
RemClassRegistry.RegisterXSInfo(..)  tam skutečně je, ale  InvRegistry.RegisterParamInfo(..) tam není.
Zkoušel jsem doplnit tu první funkci, ale nefunguje to taky.
Rozsireni tech metode se objevilo teprve nedavno: v D2010 to jeste neni a v XE2 uz ano.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #12 kdy: 05-04-2013, 17:31:39 »
Máte pravdu. Teď jsem to zkoušel na d2006 a ten soap má nějaký bug, jednak už generuje blbě request ale ani po ruční nápravě se to nesrovnalo.
To by mohla byt dobra zprava, ze to trochu opravili - v tech starsich verzich se to dalo pouzit jen na jednoduche veci.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #13 kdy: 05-04-2013, 17:59:05 »
To by mohla byt dobra zprava, ze to trochu opravili - v tech starsich verzich se to dalo pouzit jen na jednoduche veci.

Já jsem přecháze D2007 - XE2 a tam je rozdíl v použitelnosti obrovský. Není ani tak problém, když si člověk dělá svého klienta i svůj server, ale jak je nutné se propojit na třetí stranu, tak je konec. Třeba ares jsme nakonec dělali tak, že jsme udělali http.get a pak parsovali xml. SOAP jsme vůbec nerozchodili.

Těch implementací soap pro delphi asi bude víc (možná i indy mají něco svého). Tak jedině zkusit něco jiného než to standardní rozhraní HTTPSOAPClient.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #14 kdy: 05-04-2013, 18:08:17 »
Já jsem přecháze D2007 - XE2 a tam je rozdíl v použitelnosti obrovský.
Ja s tim delal naposled taky v D2007 a Delphi nebyl schopen napr. sezrat schema, ktere bylo prilohou ETSI normy ve vice nez 70 souborech, i kdyz jsem se to snazili ruzne mergovat a upravovat... Nakonec jsme to generovali a parsovali pomoci DOMu, abychom se nezbavili uplnen moznosti bindingu na objekty a posilali to taky pres HTTP.