2016-06-08 2 views
1

Вот мои детали запросаSoap несоответствие версий в PHP

$output='<xml version="1.0" encoding="utf-16"?> 
<opertaion xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
<foo xmlns="http://www.w3schools.com">12</foo>  
<boo xmlns="http://www.w3schools.com">15</boo> 
<bar xmlns="http://www.w3schools.com">test value</bar> 
</opertaion>'; 


$url='http://www.url.com'; 
    $headers = array(
        "Content-type: text/xml;charset=\"utf-8\"", 
        "Accept: text/xml", 
        "Cache-Control: no-cache", 
        "Pragma: no-cache", 
        "Content-length: ".strlen($output), 
       ); //SOAPAction: your op URL 
     // PHP cURL for https connection with auth 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $output); // the SOAP request 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

     // converting 
     $response = curl_exec($ch); 
     curl_close($ch); 

     echo $response; 

мыло: VersionMismatchSystem.Web.Services.Protocols.SoapException: Возможные SOAP версии несоответствие: Envelope имен было неожиданным. Ожидает http://schemas.xmlsoap.org/soap/envelope/. в Системе.

Какая ошибка я делаю?

+0

Не могли бы вы добавить информацию о вашей ошибки? И я вижу, что ваш выходной XML содержит тег '' вместо' ' – abarisone

ответ

1

Если вы хотите сделать SOAP-вызов с использованием cURL, вам необходимо убедиться, что тело запроса является правильным запросом SOAP.

Ваш XML должен быть обернут SOAP теги, например:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <opertaion xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
     <foo xmlns="http://www.w3schools.com">12</foo>  
     <boo xmlns="http://www.w3schools.com">15</boo> 
     <bar xmlns="http://www.w3schools.com">test value</bar> 
    </opertaion> 
    </soap:Body> 
</soap:Envelope> 

Вы также можете использовать SoapClient: http://php.net/manual/en/soapclient.soapclient.php

+0

нужно ли предоставлять SOAPAction? –

+0

Да, потому что URL-адрес SOAP (URL-адрес, на который вы делаете запрос) является только URL-адресом службы, которая содержит действия. Вы должны указать действие в своем заголовке, проверьте этот ответ: http://stackoverflow.com/a/7157785/4405882 –