Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Granda Urso 08. 06. 2012, 14:44:34
-
Zdravím,
nemohu se připojit pomocí PHP na server. Přitom pomocí prohlížeče GALEON mi to alespoň vrátí XML strukturu, v PHP5 to nahlásí chybu. V prohlížeči nejprve načtu osobní certifikát .p12, zadám heslo ke klíči a pak se zobrazí XML struktura. Ale v PHP5 se mi to nedaří, viz PHP5 kód:
<?php
$protected_url = "https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl";
$client = new SoapClient($protected_url, array('soap_version' =>SOAP_1_2, 'local_cert' =>"certifikat.p12",'passphrase'=>"heslo") );
?>
To nahlásí následující chybu:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl' : failed to load external entity "https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl"
in /home/urso/1/soap_client7.php:11
Stack trace:
#0 /home/urso/1/soap_client7.php(11): SoapClient->SoapClient('https://isbtst....', Array)
#1 {main}
thrown in /home/urso/1/soap_client7.php on line 11
Nevíte někdo, kde nebo v čem je chyba?
-
V dokumentaci k SoapClient je v komentarich napsano reseni.
http://www.php.net/manual/en/soapclient.soapclient.php
When using certificates, in the parameter 'local_cert', use the file contents, not the name of the file.
example:
new soapclient("http://localhost/index.php?wsdl", array('local_cert'=>file_get_contents('./key.pem'),'passphrase'=>'password'));
-
<?php
//
//
//
//$url = "http://soap.amazon.com/schemas3/AmazonWebServices.wsdl";
$protected_url = "https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl";
//
$client = new SoapClient($protected_url, array('local_cert' =>file_get_contents('./certifikat.pem'), 'passphrase' =>'heslo') );
$f = (array) $client->__getFunctions(); // vrat registrované funkce
echo "<p>\n";
echo "Registrované funkce:
\n";
foreach ($f as $funkce => $hodnota) {
echo $funkce." = ".$hodnota."
\n";
}
echo "</p>\n";
?>
Změněno na file_get_contents('./certifikat.pem')
výsledek stále stejný, stejná chybová hláška, nefunguje to. Přitom amazon funguje.
-
Asi ti bohuzel vice nepomuzu, pro me je domena isbtst.pse.cz nedostupna (server nenalezen)...
-
Ještě jsou to zkoušel přes wget. Možná jsem se dostal kousek dál, certifikát je špatný, po zadání parametru pro vypnutí kontroly SSL certifikátu se wget již připojí, vyžádá si heslo a stáhne a uloží WDSL.
wget --no-check-certificate --certificate=certifikát.pem https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl
--2012-06-12 11:41:30-- https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl
Enter PEM pass phrase:
Resolving isbtst.pse.cz... 172.16.10.49
Connecting to isbtst.pse.cz|172.16.10.49|:443... connected.
WARNING: cannot verify isbtst.pse.cz's certificate, issued by `/C=CZ/O=Prague Stock Exchange/OU=Prague Stock Exchange CA':
Self-signed certificate encountered.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/xml]
Saving to: `cdcpPort4?wsdl.4'
[ <=> ] 3,782 --.-K/s in 0s
2012-06-12 11:41:36 (27.9 MB/s) - `cdcpPort4?wsdl.4' saved [3782]
Takže ty problémy s připojením přes PHP5 jsou pravděpodobně způsobeny chybou při ověřování SSL certifikátu. Bohužel parametr na vypnutí této kontroly v PHP5 nemohu najít (pro wget je to --no-check-certificate).