2014-09-18 6 views
0

Я использую SoapClient в PHP для подключения WS .NET. Вот часть WSDL:SoapClient php подключает службы WCF с сертификатом x509

<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 вместе с запросом мыла с помощью опции "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

Я нашел решение здесь, но мне кажется, вряд ли это сделать: http://stackoverflow.com/questions/502 1481/как к сообщаться промежуточности PHP-и-ФОС-надежно – Windranger

Смежные вопросы