клиент SOAP — SoapClient php connect службы WCF с сертификатом x509

Я использую SoapClient в PHP для подключения WS .NET.
Вот часть wsdl:

<wsa10:EndpointReference>
<wsa10:Address>-------------</wsa10:Address>
<Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>
hfWyLJxqZRtXrHw4slQBxEU8SGgHhQsYsRS...
</X509Certificate>
</X509Data>
</KeyInfo>
</Identity>
</wsa10:EndpointReference>

Вот мой код для подключения:

$client = new SoapClient($wsdl,  array('soap_version' => SOAP_1_2, 'login' => 'login', 'password'=>'password' , 'trace' => 1));
$auth = new stdClass();
$auth->ecodedValue = $hash;
$header = new SoapHeader('http://schemas.xmlsoap.org/ws/2006/02/addressingidentity', 'identity', $auth, false);
$client->__setSoapHeaders($header);

и xml будет сгенерирован так:

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/" xmlns:ns2="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<env:Header>
<ns2:identity>
<encodedValue>MIIEvjC</encodedValue>
</ns2:identity>
</env:Header>
<env:Body>
<ns1:GetBalanceByPhoneNumber>
<ns1:phoneNumber>------------</ns1:phoneNumber>
</ns1:GetBalanceByPhoneNumber>
</env:Body>
</env:Envelope>

Какой формат XML я должен генерировать, чтобы пройти сертификат WS? Я жду вашей помощи :(. Спасибо!

0

Решение

Вы можете предоставить SSL-сертификат вместе с запросом мыла, используя OPTION «local_cert»:

$client = new SoapClient($wsdl,  array(
'local_cert' => '/path/to/your/certificate.pem',
'soap_version' => SOAP_1_2,
'login' => 'login',
'password'=>'password' ,
'trace' => 1,
));

Проверьте параметры для SOAP OPTIONS в http://php.net/manual/en/soapclient.soapclient.php.

Вы также можете отключить проверку SSL, создав потоковый контекст следующим образом:

$context = stream_context_create(array(
"ssl" => array(
"verify_peer" => false,
"allow_self_signed" => true,
),
"https" => array(
"curl_verify_ssl_peer" => false,
"curl_verify_ssl_host" => false,
),
));$options = array(
"stream_context" => $context,
"features" => SOAP_SINGLE_ELEMENT_ARRAYS,
// "cache_wsdl" => WSDL_CACHE_NONE,
// "trace" => true,
// "exceptions" => true,
);

$client = new SoapClient("https://www.myhost.com/service?ws", $options);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]