Soap и curl

До какого-то момента я пользовался программой SoapUI, программа интуитивно более-менее понятная, но как-то доказать факт того, что сторонний SOAP-сервер не возвращает данные, не представляется возможным и тут как всегда на помощь приходит Curl.

1. Формируем запрос, тут все почти просто:

curl -u login:password --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction:sky:GetServiceLis" --data @request.txt http://host/erp/ws/skynet

sky это URN (Uniform Resource Name), в простонародью namespace (адресное пространство), оно определяется из полученной схемы. По сути это имя тега, которое будет использоваться в XML-запросе (см. пример ниже).

GetServiceLis - это метод, который будет вызван (один из методов, с которыми можно ознакомиться просто открыв адрес wsdl-ки http://host/erp/ws/skynet.

2. Создаем файл request.txt и помещаем в него xml запроса, который если сами не можете составить, то можно подсмотреть в программе SoapUI или с помощью PHP:

$this->soap = new \SoapClient('http://host/erp/ws/skynet', [
   'login' => 'login',
   'password' => 'password',
   'encoding' => 'UTF-8',
   'trace' => true,// обязательный параметр, без которого не будут работать дебаг-методы:
];

$this->connection->soap->__getLastRequest());
$this->connection->soap->__getLastResponse());

Как Вы уже поняли, эти дебаг-методы возвращают xml в виде строки, которую и нужно поместить в файл request.txt

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sky="mytest-erp/skynet" xmlns:glob="mytest-erp/Global">
   <soap:Header/>
   <soap:Body>
      <sky:GetServiceLis>
         <sky:parameters>
            <glob:OnlyChanged>false</glob:OnlyChanged>
            <!--Optional:-->
            <glob:MaximumObjectsInResult>100</glob:MaximumObjectsInResult>
         </sky:parameters>
      </sky:GetServiceLis>
   </soap:Body>
</soap:Envelope>

Удачки.


12.07.2018 09:19