SOAP Client po HTTPS z certyfikatami SSL po obu stronach
Muszę opracować klienta SOAP, a dostawca prześle mi te specyfikacje:
Będą transmitowane przy użyciu protokołu HTTPS przez IP i będą pakowane jako dokumenty XML, które dostosowują się do różnych definicji schematu XML.Komunikacja jest synchroniczna, strona trzecia powinna czekać na odpowiedź.Każde żądanie i odpowiedź zostaną podpisane.Używam klasy soapClient z PHP i wszystko działa poprawnie, z wyjątkiem sytuacji, gdy próbuję użyć mojego klucza prywatnego do nawiązania komunikacji z serwerem:
Code: WSDL | Message: SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://remoteserver/CustomerManagementService?wsdl' : failed to load external entity "https://remoteserver/CustomerManagementService?wsdl
Następnie próbowałem utworzyć plik .pem, który zawiera mój klucz prywatny połączony z moim certyfikatem, tak jak przeczytałem w:jak wysłać żądanie SOAP z certyfikatem SSL w PHP?
Ale nadal zwraca błąd:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://remoteserver:80/CustomerManager/proxy/CustomerManagementService?WSDL%2FGWTCommonResources%2Fwsdl%2FGWTCommonMessages' : failed to load external entity "http://remoteserver:80/CustomerManager/proxy/CustomerManagementService?WSDL%2FGWTCommonResources%2Fwsdl%2FGWTCommonMessages
Zastanawiam się, czy jest jakiś sposób, aby uzyskać dokładnie nieprzetworzone dane wysyłane przez klasę soapClient PHP. I gdzie muszę ustawić certyfikat dostawcy.
Próbowałem już z „$ client -> __ getLastRequest ()”, ale otrzymuję NULL. To jest mój kod:
$client = new anotherSoapClient($service, array(
'local_cert' => $pem,
'style' => SOAP_RPC,
'use' => SOAP_ENCODED,
'soap_version' => SOAP_1_2,
'authentication'=> SOAP_AUTHENTICATION_DIGEST,
'ssl' => array(
'ciphers'=> "SHA1",
'verify_peer' => false,
'allow_self_signed' => true
),
'https' => array(
'curl_verify_ssl_peer' => false,
'curl_verify_ssl_host' => false
),
'cache_wsdl' => WSDL_CACHE_NONE,
'cache_ttl' => 86400,
'trace' => true,
'exceptions' => true,
));
// Test connection
echo BR.'Functions: <pre>';var_dump($client->__getFunctions());echo '</pre>';
$XMLrequest = $client->prepareRequest($email);
$response = $client->__anotherRequest('getCustomerInfo', $XMLrequest);
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
Przy okazji, używam PHP 5.4.9 na moim lokalnym komputerze, a serwer ma PHP 5.3.10, a anotherSoapClient to klasa, która rozszerza klasę PHP soapClient:PHP soapClient wysyła niestandardowy XML