Cliente SOAP sobre HTTPS com certificados SSL nos dois lados
Eu tenho que desenvolver um cliente SOAP, e o fornecedor me envia estas especificações:
Serão transmitidos usando HTTPS através de IP, e serão empacotados como documentos XML que se ajustam às diferentes definições do esquema XML.A comunicação é síncrona, o terceiro deve aguardar a resposta.Cada pedido e resposta serão assinados.Estou usando a classe soapClient do PHP e tudo funciona bem, exceto quando tento usar minha chave privada para estabelecer comunicação com o servidor:
Code: WSDL | Message: SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://remoteserver/CustomerManagementService?wsdl' : failed to load external entity "https://remoteserver/CustomerManagementService?wsdl
Então eu tentei criar um arquivo .pem, ele contém minha chave privada concatenada com o meu certificado, como li em:como enviar solicitação SOAP com certificado SSL em PHP?
Mas ainda retorna um erro:
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
Gostaria de saber se existe alguma maneira de obter exatamente os dados brutos que estão sendo enviados pela classe soapClient do PHP. E onde devo definir o certificado do fornecedor.
Eu já tentei com "$ client -> __ getLastRequest ()", mas estou recebendo um NULL. Este é o meu código:
$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";
A propósito, estou usando o PHP 5.4.9 em minha máquina local e o servidor tem o PHP 5.3.10 e o anotherSoapClient é uma classe que estende a classe PHP soapClient:PHP soapClient enviar XML personalizado