IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Dotaz na katastr nemovitostí

Aktivity
Avatar
David Šabacký:10.11.2021 16:24

Po spuštění mi php vrací chybu:
PHP Fatal error: Uncaught SoapFault exception: [Sender] looks like we got no XML document

Vypadá to, že návratová hodnota není ve formátu XML.

Můj kód:

<?php

$options = array(
        'soap_version' => SOAP_1_2,
        'exceptions' => true,
        'trace' => 1,
        'cache_wsdl' => WSDL_CACHE_NONE,
        'login' => 'WSTEST',
        'password' => 'WSHESLO',
        'encoding'=>'UTF-8'

    );
    $soap = new SoapClient('https://wsdptrial.cuzk.cz/trial/dokumentace/ws29/wsdp/vyhledat_v29.wsdl', $options);


    $params = array('katastrUzemiKod' => 693936, 'kmenoveCislo' => 77);
    $response = $soap->__soapCall('najdiParcelu', $params);

?>

moc děkuju

David

Zkusil jsem: chyba se objeví okamžitě po

$soap = new SoapClient('https://wsdptrial.cuzk.cz/trial/dokumentace/ws29/wsdp/vyhledat_v29.wsdl', $options);

Pokud stáhnu do PC ten "https://wsdp­trial.cuzk.cz/tri­al/dokumentace/ws29/wsdp­/vyhledat_v29­.wsdl", validací na XML mi projde.

 
Odpovědět
10.11.2021 16:24
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.11.2021 8:15

https://www.freeformatter.com/…tor-xsd.html
Take hlasi, ze xml je ok + Found XSD reference 'vyhledat_v29.xsd' but unable to load it as it is not an absolute URL. Only checking for well-formedness (schemaLocati­on="vyhledat_v29­.xsd")

Ta php chybova hlaska vypada, ze znamena, ze nedostal xml.

Napada mne, jen, jestli netreba zadat nejake parametry vyhledavani? Jinak netusim, proc si s tim neporadil. Treba davas spatne heslo nebo hlavicku zpravy a tak na tu url vrati soap prazdny vysledek.

google = wsd SoapClient php example

try {
    $opts = array(
        'http' => array(
            'user_agent' => 'PHPSoapClient'
        )
    );
    $context = stream_context_create($opts);

    $wsdlUrl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
    $soapClientOptions = array(
        'stream_context' => $context,
        'cache_wsdl' => WSDL_CACHE_NONE
    );

    $client = new SoapClient($wsdlUrl, $soapClientOptions);

    $checkVatParameters = array(
        'countryCode' => 'DK',
        'vatNumber' => '47458714'
    );

    $result = $client->checkVat($checkVatParameters);
    print_r($result);
}
catch(Exception $e) {
    echo $e->getMessage();
}

// ------- Parameters version (try this first)

$params = array(
    'request' => array(
        'Header' => array(
            'Token' => 'hello'
        ),
        'Parameters' => array(
            'DeviceID' => 12345,
            'SourceScreen' => 12345,
            'Language' => 'E',
            'LocalDateTime' => '2015-05-20T11:59:29.910Z',
            'TicketID' => 12345,
            'PayScreenAttributeID' => 12345,
            'InputValue' => '123456789',
            'PaymentAmount' => 0,
            'POSReceiptCustomer' => '?',
            'POSReceiptMerchant' => '?'
        )
    )
);

$wsdl_path = "http://192.168.1.1/TestSite/TestService.asmx?wsdl";
$soapClient = new SoapClient($wsdl_path, array('trace' => 1));
$response = $soapClient->ProcessTransaction($params);
 
Nahoru Odpovědět
11.11.2021 8:15
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.11.2021 8:26

https://www.php.net/…apclient.php

try {
    $arrContextOptions=array("ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false,'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT));

    $options = array(
            'soap_version'=>SOAP_1_2,
            'exceptions'=>true,
            'trace'=>1,
            'cache_wsdl'=>WSDL_CACHE_NONE,
            'stream_context' => stream_context_create($arrContextOptions)
    );
    $client = new SoapClient('https://url/dir/file.wsdl', $options);

} catch (Exception $e) {
    echo "<h2>Exception Error!</h2>";
    echo $e->getMessage();
}

Ja bych tam asi pro tem prvni pokus hlavicku treba uplne zrusil, nechal tam jen
array('trace' => 1) a pozdeji to doplnis o strem_context a pouzijes na to tu funkci stream_contex­t_create
array('trace' => 1, "stream_context" => $context)

https://www.php.net/…pheaders.php

 
Nahoru Odpovědět
11.11.2021 8:26
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.11.2021 8:33

resp, takhle, zkusil bych nejdriv array('trace' => 1) a pak postupne pridavat dalsi parametry, dokud to chodi. Treba existuje nejaka free verze stranky a verze, kde je nutne mit neco konkretne spravne nastavene v hlavicce, aby to odpovidalo. A kdyz je hlavicka spatne, tak to samozrejme ignoruje, neposle soubor. Prazdny soubor nema zadnou xml znacku, takze neni rozpoznan jako xml.

 
Nahoru Odpovědět
11.11.2021 8:33
Avatar
Pham The Anh
Člen
Avatar
Pham The Anh:28.7.2022 13:31

Musí se na to úplně jinak chlapci, kdyby někdo chtěl pomoc, můžu poslat link, teď jsem to právě úspěšně implementoval.

 
Nahoru Odpovědět
28.7.2022 13:31
Avatar
Odpovídá na Pham The Anh
David Šabacký:29.7.2022 8:34

Ahoj, to by mne hodne zajimalo. Muzes poslat ten link, prosim?

DS

 
Nahoru Odpovědět
29.7.2022 8:34
Avatar
Pham The Anh
Člen
Avatar
Pham The Anh:29.7.2022 16:48

Čau, prvním problémem je, že WSDP 2.9 aktuálně používá SOAP_1_1, ne 1_2

Další problém byl v tom, že oni chtějí request v určitém formátu co odpovídá tomu WSDL souboru, a jaký WSDL soubor záleží na službě kterou poptáváš v tom requestu. V tvém případě chceš aby tvůj request vyhovoval souboru https://wsdptrial.cuzk.cz/…dat_v29.wsdl

Koukal jsem se jak to posílají třeba C# programatoři, ti vytvoří objekt a tomu objektu nastaví sadu properties stejně jak je to specifikované v tom XSD souboru - např. https://katastr.cuzk.cz/…tavy_v29.xsd , pak nakonec tento objekt pošlou v requestu.

Naštěstí v PHP existuje classa SoapVar(), ta dokáže "překonvertovat" XSD string a poslat to v těle SOAP requestu.
Takže normálně otevřeš tu dokumentaci "WSDP popis webovych sluzeb pro uzivatele" a najdeš kapitolu "8.1 Příloha 1: Komunikace klient – server" a najdeš jak má vypadat vzorový request na ten svůj endpoint https://wsdptrial.cuzk.cz/…/2.9/sestavy

Tento vzorový request ve formátu XSD(XML) pak zkopčíš, upravíš parametry a celej string dáš jako první parametr do SoapVar(), ten výsledek se pak dá poslat do SOAP requestu

Stejně se pak musí poslat hlavičky, a tam mají v dokumentaci chybu - místo <wsse:Security soapenv:mustUnderstand="1" ... musí být <wsse:Security SOAP-ENV:mustUnderstand="1" ...

Uploadnul jsem obalující třídu a hlavni skript sem: https://github.com/…nh/cuzk-wsdp

Test page: cuzk-wsdp.phamtheanh.eu

Editováno 29.7.2022 16:50
 
Nahoru Odpovědět
29.7.2022 16:48
Avatar
Pham The Anh
Člen
Avatar
Odpovídá na David Šabacký
Pham The Anh:30.7.2022 12:26

Jsem tě zapomněl tagnout ↑↑

 
Nahoru Odpovědět
30.7.2022 12:26
Avatar
Odpovídá na Pham The Anh
David Šabacký:30.7.2022 19:49

Ahoj, díky ...

 
Nahoru Odpovědět
30.7.2022 19:49
Avatar
Pham The Anh
Člen
Avatar
Odpovídá na David Šabacký
Pham The Anh:1.8.2022 8:53

Pokud bys chtel s neci pomoct, tak napis 🖖 ja informace sddilim, ne jako nekteri ze starsi generace programatorů, kteří rádi informace shromažďují jako trpaslící zlato a pak na nich sedí exůtci

 
Nahoru Odpovědět
1.8.2022 8:53
Avatar
Odpovídá na Pham The Anh
David Šabacký:1.8.2022 21:47

Ahoj,

díky moc za nabídku ... dostanu se k tomu po dovolené.

D

 
Nahoru Odpovědět
1.8.2022 21:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.