Автор Тема: Помогите разобраться SOAP WSDL  (Прочитано 636 раз)

13 Февраль 2018, 18:11:42
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Нужно получить данные от поставщика и сохранить в prestashop. У поставщика сервис реализованный через WSDL. Документации нет. Поэтому встал вопрос, как вытащить информацию по работе с этим сервисом?
Такой вариант не проходит
$client = new SoapClient(...);
var_dump($client->__getFunctions());
13 Февраль 2018, 19:39:52
Ответ #1
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
URL сервиса вам дали? Откройте в браузере, часто на первой странице сервиса есть ссылка на документацию.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
13 Февраль 2018, 20:07:15
Ответ #2
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Пример приведите, тогда можно что-то посоветывать.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
18 Февраль 2018, 13:04:44
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Дали только ссылку
https://wsi.mouzenidis.com/xmlgate/xmlgate.svc?singleWsdl
Мне оттуда нужно только отели выбрать, с описанием, фото и полной информацией по датам, ценам.
18 Февраль 2018, 13:26:03
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
<xs:element name="GetHotels">
  <xs:complexType
    <xs:sequence
      <xs:element minOccurs="0" name="CountryKey" type="xs:int"/
      <xs:element minOccurs="0" name="RegionKey" type="xs:int"/
      <xs:element minOccurs="0" name="CityKey" type="xs:int"/
      <xs:element minOccurs="0" name="HotelCategory" type="xs:int"/
    </xs:sequence
  </xs:complexType
</xs:element>
Метод GetHotels со свойствами CountryKey, RegionKey, CityKey, HotelCategory вернет список отелей.
18 Февраль 2018, 15:11:27
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за желение помочь.
Но вопрос не в названиии метода. Я на wsdltophp сгенерировал все классы. Название функций, переменные классов, все это у меня есть.
Вопрос какие значения подствлять? Если ничего не указываю, то ответ пустой или ошибка.
18 Февраль 2018, 17:43:56
Ответ #6
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Пробуйте подбирать значения, раз нет документации.
$CountryKey =  (0 or -1);
$RegionKey = (0 or -1);
$CityKey" type =  (0 or -1);
$HotelCategory = (0 or -1);
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
19 Февраль 2018, 14:05:37
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Пробуйте подбирать значения, раз нет документации.
$CountryKey =  (0 or -1);
$RegionKey = (0 or -1);
$CityKey" type =  (0 or -1);
$HotelCategory = (0 or -1);
Спасибо, то что нужно. "-1" для получения всех данных. "0" - пустой запрос возращает.

Может еще подскажите, как соединить в один запрос список отелей, описание, фото?
Почему-то в ответе нет описания и ссылок на фото. Выдает только назание и адрес.
19 Февраль 2018, 14:53:50
Ответ #8
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Почему-то в ответе нет описания и ссылок на фото. Выдает только назание и адрес.
Отдельно запрашивать надо через HotelDescriptionsRequest
Здесь посмотреть можно: https://www.wsdltophp.com/Wsdls/6d3ac7f8a2f9d7229a88d22d5395d5d8/Musenidis-1-0-1-1-1-1-0-0-0-0
19 Февраль 2018, 15:16:25
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Создайте структуру, например можно файл XML.
$xml = simplexml_load_file("file.xml");Для каждого узла получаете данные и сохраняете.
19 Февраль 2018, 16:07:06
Ответ #10
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Найдите блок с фильтрами
<xs:element name="GetFilter">....С помощью фильтров можно составить запрос по нужным параметрам.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
19 Февраль 2018, 16:17:10
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Всем спасибо, пошел пробывать, еще бы получилось решить.
Описания нет, менеджер посылает на главную страницу сервиса, типо по wsdl можно все понять, дурдом.
19 Февраль 2018, 16:44:55
Ответ #12
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Я на wsdltophp сгенерировал все классы. Название функций, переменные классов, все это у меня есть.
Для одного запроса? Там же классов нагенерило до ...
<?php
// включаем показ ошибок
ini_set('display_errors'1);
error_reporting(E_ALL & ~E_NOTICE);

// отключаем кеширование для тестирования
ini_set('soap.wsdl_cache_enabled''0');

$url        '...';
$login      '...';
$password   '...';
// ....

try {
    
// Создание SOAP-клиента
    
$client = new SoapClient($url);
    
print_r($client -> __getFunctions());
    
// ...
    //$client->Connect(array('Login' => $login,'Password' => $password));
    // ...

}
catch (
SoapFault $exception) {
    
print_r($exception->getMessage());
}