2014-02-18 2 views
0

Я пытаюсь вызвать веб-сервис SOAP с использованием CURL, и он не работает. Это код, который я использовал для вызова веб-сервиса с помощью клиента мыльнуюВызов SOAP WSDL Webservice с использованием CURL

(object)$ProgramClient = new SoapClient('https://mywebserviceurl?wsdl',array(
'login' => "username", 'password' => "password", 
'location' => 'https://someotherurl' 
)); 

(object)$objResult1 = $ProgramClient->GetEvents(array (
'EventsRequest' => array (
'Source' => array (
'SourceId' => 'SOURCEID', 'SystemId' => 'SYTEMID') 
))); 

$event_info = $objResult1->EventsResponse; 

Это работает отлично, и я преобразовал этот вызов с помощью CURL и он перестал работать. Вот мой код, используя CURL

 $credentials = "username:password"; 
     $url = "https://mywebserviceurl?wsdl"; 
     $body = '<?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> 
          <GetEvents xmlns="https://umywebserviceurl?wsdl"> 
          </GetEvents > 
          </soap:Body> 
         </soap:Envelope>'; 
     $headers = array( 
'Content-Type: text/xml; charset="utf-8"', 
'Content-Length: '.strlen($body), 
'Accept: text/xml', 
'Cache-Control: no-cache', 
'Pragma: no-cache', 
'SOAPAction: "GetEvents"' 
); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 

    // Stuff I have added 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $body); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, $credentials); 

    $data = curl_exec($ch); 


    echo '<pre>'; 
    print_r($data); 

Может кто-нибудь сказать мне, что я здесь отсутствует ..

С уважением Jayesh

+0

Не можете найти нам ошибку? – Tommy

+0

Я получаю 0 в curl_errorno(). –

+0

Установите эту опцию «CURLOPT_VERBOSE», чтобы получить дополнительную информацию – Tommy

ответ

1

Ее основной пример того, что вам нужно, и используется для вызова SOAP WebService с помощью CURL Вы также будете использовать дополнительные параметры, которые вы используете в своем веб-сервисе.

$soapDo = curl_init(); 

curl_setopt($soapDo, CURLOPT_URL, "[productionURL]"); // Used "[testingURL]" in testing 

curl_setopt($soapDo, CURLOPT_USERPWD, "[username]:[password]"); 

curl_setopt($soapDo, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

curl_setopt($soapDo, CURLOPT_CONNECTTIMEOUT, 10); 

curl_setopt($soapDo, CURLOPT_TIMEOUT, 10); 

curl_setopt($soapDo, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($soapDo, CURLOPT_FOLLOWLOCATION, true); 

curl_setopt($soapDo, CURLOPT_SSL_VERIFYPEER, false); 

curl_setopt($soapDo, CURLOPT_SSL_VERIFYHOST, false); 

curl_setopt($soapDo, CURLOPT_POST, true); 

curl_setopt($soapDo, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // The system running this script must have TLS v1.2 enabled, otherwise this will fail 

curl_setopt($soapDo, CURLOPT_POSTFIELDS, $xml); // This has to be an XML string matching the Advantex XML requirements from the WSDL. 

curl_setopt($soapDo, CURLOPT_HTTPHEADER, array("Content-Type: text/xml; charset=utf-8", "Content-Length: " . strlen($xml))); 

$result = curl_exec($soapDo); 

$err = curl_error($soapDo); 
Смежные вопросы