eDavki in SOAP

Vse drugo, kar ne spada v nobeno zgornjo kategorijo.
odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 11.07.2005 12:52:56

Novo vprašanje glede eDavkov. Namreč, direktiva je, da bomo delali preko web services. Imamo certifikat in ko se prijavimo na naslov https://beta.edavki.durs.si/SoapPortal/ ... .asmx?WSDL preko browserja, mi lepo ponudi izbiro certifikata in pokaže tale xml dokument. Če to naredim s komponento HHTRIO, mi sicer tudi ponudi izbiro certifikata, potem pa vrne empty page. Ve kdo v čem je trik? Ali potrebujem kakšne druge komponente za tole.

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 12.07.2005 10:06:01

Borlandova SOAP implementacija ima težave s client-side certifikati kadar gre za SOAP preko SSL.

Priporočam da namesto direktne uporabe THttpRIO komponente raje uvoziš WSDL preko WSDL Importerja, s čimer boš dobil unit, ki definira vse interface in tipe, ki jih spletni servis izpostavlja.

Ker ima tudi WSDL Importer težave s https povezavami, ti priporočam da WSDL datoteko shraniš na lokalno mašino in jo uvoziš od tam.

1. Izberi File->New->Other->WebServices->WSDL Importer
2. Generiran unit dodaj v svoj projekt.

Interface nato uporabljaš nekako v tem smislu:

Koda: Izberi vse

const
  DAVCNA_STEVILKA = 12345678;
  TAX_PAYER_TYPE = 'FO';
var
  Edp: EdpSoapServiceSoap;
  LoginHandle: string;
begin
  Edp := GetEdpSoapServiceSoap;  //uporabimo privzete parametre
  LoginHandle := Edp.LoginUsingClientCertificate(DAVCNA_STEVILKA, TAX_PAYER_TYPE);

  ...
  
  Edp.Logout(LoginHandle);
end;
Za generiranje in pošiljanje dokumentov boš pa itak uporabil njihove sheme, ki jih verjetno že imaš.
Zadnjič spremenil _MeSSiah_, dne 12.07.2005 10:06:35, skupaj popravljeno 1 krat.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 13.07.2005 07:56:55

Ne razumem zakaj bi pa tole delal. Ker potem s privzetimi parametri ti isto kreira HttpRIO in vzame default naslov, ki je pa tvoj na disku in potem se nič ne zgodi.
Našel sem eno kodo na netu, pa mi dela malo problemov. Ne prevede se takoj in za določene stvari mi ni jasno kaj narediti

Koda: Izberi vse

 
Rio.HTTPWebNode.OnBeforePost := OnBeforePost;


procedure TForm1.OnBeforePost(const HTTPReqResp: THTTPReqResp; Data:
Pointer);
var
  Store        : IStore;
  Certs        : ICertificates;
  Cert         : ICertificate2;
  CertContext  : ICertContext;
  PCertContext : PCCERT_CONTEXT;
  V            : OleVariant;
begin
  (*
    thumbprint of the certificate to use. Look at CAPICOM docs to see
    how to find certs using other Id's
  *)
  V := '07C1E1CA997417E1CFF235FDD39C3093B7A827D2';

  (* create Certificate store object *)
  Store := CoStore.Create;

  (* open the My Store containing certs with private keys *)
  Store.Open( CAPICOM_CURRENT_USER_STORE, 'MY',
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );

  (* find the certificate with the given thumbprint *)
  Certs := Store.Certificates.Find( CAPICOM_CERTIFICATE_FIND_SHA1_HASH,
          V, False );

  (* any certificates found? *)
  if Certs.Count > 0 then
  begin
    (* get the certificate context *)
    Cert := IInterface( Certs.Item[ 1 ] ) as ICertificate2;
    CertContext := Cert as ICertContext;
    CertContext.Get_CertContext( Integer( PCertContext ) );

    (* set the certificate to use for the SSL connection *)
    if InternetSetOption( Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
        PCertContext, Sizeof( CERT_CONTEXT ) ) = False then
    begin
      ShowMessage( 'Something went wrong' );
    end;
  end;
end; 

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 13.07.2005 13:06:18

Ne razumem zakaj bi pa tole delal
Ker morajo biti interfaci, ki jih WebService izpostavlja, registrirani preden jih lahko uporabiš. Zato sem sklepal da boš WSDL datoteko uvozil preko WSDL Importerja. In ker ima WSDL Importer včasih težave z dostopom do WSDL preko https, sem ti pač predlagal, da datoteko shrani na svojo mašino in jo uvozi od tam. Če WSDLa ne misliš uvažati (če v runtime registriraš interface z RegisterInterface ipd...), potem prezri nasvet glede shranjevanja na lokalno mašino.
Ker potem s privzetimi parametri ti isto kreira HttpRIO in vzame default naslov, ki je pa tvoj na disku in potem se nič ne zgodi
Mhm. In tole si preveril? No, ko boš preveril, boš videl da nima datoteka na mojem disku nikakršne veze z GetEdpSoapServiceSoap, saj se v primeru privzetih nastavitev uporabi naslov, ki je definiran v WSDL datoteki - v tem primeru

Koda: Izberi vse

<soap:address location="http://10.4.25.180:81/SoapPortal/EdpSoapService.asmx">
.
Ne prevede se takoj in za določene stvari mi ni jasno kaj narediti
Za začetek uvozi CAPICOM type library, če še nisi - Project->Import Type Library. Tvoja koda s pomočjo MS Crypto API klicev v tvoji osebni shrambi certifikatov poišče certifikat, ki ima SHA1 odtis (thumbprint) enak 07C1E1CA997417E1CFF235FDD39C3093B7A827D2. Odtis svojega certifikata najlažje izveš tako, da odpreš certifikat in na jezičku Detail pogledaš vrednosti "Thumbprint" ter "Thumbprint algorithm". Ta certifikat se nato uporabi v trenutni SSL seji.

Za več informacij pa si boš verjetno moral pogledati CAPICOM pomoč na MSDN.
Zadnjič spremenil _MeSSiah_, dne 13.07.2005 13:08:41, skupaj popravljeno 1 krat.

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 13.07.2005 13:10:54

Mnja, sem opazil da url, ki je objavljen v WSDL opisu, sploh ne deluje oz. ni pravilen. Morda imajo na eDavkih težave z beta storitvami in imaš zaradi tega probleme z dostopom. Jaz bi preveril na DURSu kako je s tem.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 13.07.2005 14:44:30

Trenutno čakam na certifikat. Sem pa prejšnjič delal na kolegovi mašini in smo potem WSDL res pobrali dol z brskalnikom in ga uvozili iz diska. Priznam pa da nisem preveril kode, le ugibal. Bom preveri in se oglasim.
CAPICOM sem uvozil. Problem je, ker Store.Certificates vrne drug interface. Ne tistega, ki ima implementiran Find. PCCERT_CONTEXT ni nikjer definiran in pri uporabi InternetSetOption ne vem kaj naj dam za zadnji parameter ker je CERT_CONTEXT nepoznan.

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 13.07.2005 15:39:58

1. Preveri da uporabljaš pravilno različico CAPICOM wrapperja. Platform SDK Redistributable: CAPICOM

2. PCCERT_CONTEXT je definiran v WinCrypt.h (Platform SDK). Mislim da imajo na Jedi Api Library ta header preveden v Delphi.

3.

Koda: Izberi vse

const 
  INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
INTERNET_OPTION_CLIENT_CERT_CONTEXT je podprt samo na Internet Explorer 5.5 in novejših, na mašinah s starejšim Explorerjem stvar ne bo delovala.
Zadnjič spremenil _MeSSiah_, dne 13.07.2005 15:41:34, skupaj popravljeno 1 krat.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 21.07.2005 15:08:42

Stvar je zdej sledeča. Dobil certifikat in preko browserja se lahko prijavim in dobim recimo obrazec DDV-O.
Tudi tisti naslov 10.4.25.180:81 sem spremenil v beta.edavki.durs.si.
Ob klicanju LoginUsingClientCertificate mi javi "A certificate is required to complete client auth...pa url...in soap action" kakšna ideja?

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 21.07.2005 16:19:30

V HTTPWebNode.OnBeforePost si porihtal tisto nalaganje in dodajanje certifikata k SSL povezavi? Če naložiš pravilni certifikat (tisti, s katerim si prijavljen na eDavkih), bi morala stvar načeloma delovati brez težav, razen če na eDavkih zahtevajo, da je vsak SOAP zahtevek digitalno podpisan... v tem primeru boš dobil pa kar nekaj sivih las :)

V glavnem, preveri najprej, če se OnBeforePost pravilno sproži, če naložiš pravi certifikat (si vpisal pravi thumbprint?), ipd...

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 22.07.2005 07:49:38

Evo danes je na sporedu ukvarjanje s temle OnBeforePost in certifikatom in CAPICOM. Ajaj, me že zdej glava boli. Vprašanja po moje sledijo.

Odgovori