Отправка XML с помощью Curl post в веб-сервис

#php #web-services #curl #soap #wsdl

#php #веб-сервисы #curl #soap #wsdl

Вопрос:

Я пытаюсь отправить XML-скрипт на веб-сервер для получения токена аутентификации, мне нужна помощь в этом. На данный момент с моим кодом я думаю, что он подключается, но он возвращает на экран только файл wsdl в текстовом формате.

Я хотел бы получить токен аутентификации.

Мой код:

 <?php

$xml_data = '
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:ns="http://dpd.com/common/service/types/LoginService/2.0">
 <soapenv:Header/>
 <soapenv:Body>
 <ns:getAuth>
 <delisId>id</delisId>
 <password>password</password>
 <messageLanguage>nl_NL</messageLanguage>
 </ns:getAuth>
 </soapenv:Body>
<soapenv:Envelope>
';

$headers = array(
"POST  HTTP/1.1",
"Host: hostname",
"Content-type: application/soap xml; charset="utf-8"",
"SOAPAction: "http://dpd.com/common/service/LoginService/2.0/getAuth"",
"Content-length: ".strlen($xml_data)
);

$url = 'https://public-ws-stage.dpd.com/services/LoginService/V2_0/?wsdl';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml_data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);
$err = curl_error($ch);
print_r($output);
print_r($err);

curl_close($ch);

?>
  

Файл WSDL находится по ссылке ниже:
https://public-ws-stage.dpd.com/services/LoginService/V2_0/?wsdl

Комментарии:

1. Почему бы вам не использовать только класс SoapClient? Или вы хотите, чтобы это было сделано специально cURL по какой-то причине?

2. Да, я хотел, чтобы это было сделано cURL по какой-то причине. Но сейчас он работает thx.

Ответ №1:

Вот так, работает удовольствие:

 $xml_data = '
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:ns="http://dpd.com/common/service/types/LoginService/2.0">
 <soapenv:Header/>
 <soapenv:Body>
 <ns:getAuth>
 <delisId>id</delisId>
 <password>password</password>
 <messageLanguage>nl_NL</messageLanguage>
 </ns:getAuth>
 </soapenv:Body>
<soapenv:Envelope>
';

$headers = array(
"POST  HTTP/1.1",
"Host: hostname",
"Content-type: application/soap xml; charset="utf-8"",
"SOAPAction: "http://dpd.com/common/service/LoginService/2.0/getAuth"",
"Content-length: ".strlen($xml_data)
);

$url = 'https://public-ws-stage.dpd.com/services/LoginService/V2_0/?wsdl';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //Don't verify ssl certificate
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);

$reply = curl_exec($ch); 

// Represents an element in an XML document.
$xmli = new SimpleXMLElement($reply);

// prints the XML response
print_r($reply);
// prints the XML object
print_r($xmli);
  

Я включил SimpleXMLElement класс, если вы хотите получить доступ к данным ответа как к объекту.