Информация в данной статье расчинана на людей впервые столкнувшихся с WSDL.

Что такое SOAP и WSDL можно почитать здесь и здесь. На практике в России такие сервисы часто встречаются в гос.закупках, различных сервисах сферы ЖКХ, на западе, в принципе где угодно: конвертеры курсов валют, сервисы погоды... их много.
Более подробно Вы можете изучить матчасть в статьях: WSDL Tales From The Trenches, Part 1(перевод ч.1), WSDL Tales From The Trenches, Part 2(перевод ч.2).

Что необходимо для работы?

  1. Для работы с WSDL рекомендую воспользоваться программой SoapUI, она бесплатна и доступна для всех платформ. С помощью её вы сможете изучать структуру сервиса, строить запросы, в общем, Musthave!
  2. На php.net есть подробный мануал по данной тематике PHP: SOAP - Manual, в контексте примера необходимо изучить раздел SoapClient — Класс SoapClient.

Пишем первый клиент

Задача: реализовать сервис получения информации об IP адресе через сторонний WSDL сервис.

Адрес сервиса: http://www.webservicex.net/geoipservice.asmx?WSDL

  1. Получим данные о сервисе через программу SoapUI:
    SoapUI
  2. Воспользуемся методом GetGeoIPContext для получения информации о текущем IP адресе(данный метод не требует никаких входящих параметров и отрабатывает при обращении к нему)
  3. Запрос вернул в GetGeoIPContextResult данные в XML:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
          <GetGeoIPContextResponse xmlns="http://www.webservicex.net/">
             <GetGeoIPContextResult>
                <ReturnCode>1</ReturnCode>
                <IP>95.182.94.79</IP>
                <ReturnCodeDetails>Success</ReturnCodeDetails>
                <CountryName>Czech Republic</CountryName>
                <CountryCode>CZE</CountryCode>
             </GetGeoIPContextResult>
          </GetGeoIPContextResponse>
       </soap:Body>
    </soap:Envelope>
    
  4. Далее создаем файл wsdl.php, со следующим содержимым:
    <?php
    
    // Get IP service
    $client = new SoapClient("http://www.webservicex.net/geoipservice.asmx?WSDL");
    $result = $client->GetGeoIPContext();
    // var_dump($result);
    
    $resultIP = $result->GetGeoIPContextResult; // Geo IP Result
    // var_dump($resultIP);
    
    print '<br />';
    
    // Output keys and values
    foreach($resultIP as $key => $value) {
        print '<strong>' . $key . '</strong>: ' . $value . '<br />';
    }
    
    print '<br />';
    
    // Direct output value by key
    print $resultIP->IP . '<br />';
    print $resultIP->ReturnCode . '<br />';
    print $resultIP->CountryName . '<br />';
    print $result->GetGeoIPContextResult->CountryCode . '<br />';
    
    ?>
    

Готово! Мы написали самый примитивный клиент для веб сервиса. Как видите ничего сложного нет.


Выразить благодарность

Если эта публикация оказалась для Вас полезной и вы хотите выразить свою благодарность, сделайте пожалуйста её репост в социальных сетях или на своём сайте.

Так же, Вы можете перевести любую сумму, которую посчитаете нужной на наш счёт, что сильно мотивирует к написанию новых полезных статей.

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