oliaboyko
@oliaboyko
Дизайнер

Как подключить сервис бронирования по SOAP XML API к сайту на wordpress?

Есть сайт на WordPress http://dream.дизайнрекламы.рф
Верстку почти закончила, нужно подключить сервис бронирования по поиску яхт. Есть оплаченный период этого сервиса, есть их документация, но подключиться не удается.
Ранее никогда не сталкивалась с такими задачами, очень нужна помощь.
сервис www.booking-manager.com
документация https://support.booking-manager.com/hc/en-us/artic...
файл xml https://www.booking-manager.com/cbm_web_service2/s...

Если я правильно поняла, то способ подключения на 50 и 51 странице.
Когда я пытаюсь подключиться, в первом случае мне выводится на странице Bad Request
Your browser sent a request that this server could not understand.
Apache/2.4.25 (Debian) Server at www.booking-manager.com Port 443
во втором выдает ошибку на эту строку if (isset($result >out))

Как подключить сервис бронирования по SOAP XML API к сайту на wordpress?
  • Вопрос задан
  • 733 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Hanneman
Здесь проблема в том, что ваше понимание сути того, что необходимо сделать, расходится с реальным положением дел.

Скажем так: вам «подключение сервиса бронирования» кажется задачей на раз-два: есть некий WSDL у них, а у вас WordPress, – так что бы такое в WordPress включить, чтобы вся та информация с того сайта красиво отобразилась бы у вас на странице.

SOAP API – это интерфейс, позволяющий получать данные или их логические порции. Порядком вызова методов SOAP API, обработкой информации, построением логики вызовов и сборкой этих данных должны заниматься вы, а не WordPress – то есть необходимо написать некий серверный сценарий, который будет общаться с SOAP API, вызывая методы в нужном вам, и в какой-то мере определенной логикой сервиса, порядке.

Т.е. SOAP API не дает вам за один присест получить какой-то правильный набор данных вместе с логикой – это интеракция, которая основана на сборе данных их формы, расположенной на вашем сайте, компоновке запроса в формате SOAP, получении данных в ответе, при необходимости, вызове следующего метода (или методов) SOAP API, обработке ответа, и подстановка структурированных данных из ответа в тот же самый HTML вашей страницы.

Допустим, ваш посетитель сайта хочет получить список свободных яхт, удовлетворяющих условиям (указанным им же в форме поиска на сайте) - клиент ищет яхту на Кипре, на 15-е июля, на 4-х человек, цена 500-800$, с рулевым, плюс какие-то дополнительные параметры. После нажатия символической кнопки «Искать» данные из формы передаются в некий серверный скрипт, в котором описана логика взаимодействия с SOAP API.

Далее будет приблизительное и возможное описание логики (за подробной в документацию) – как это может выглядеть.

Скрипт:
  1. Берет параметры из формы
  2. Вызывает, к примеру, метод «getBases», передавая код страны аргументом
  3. Получает список портов
  4. Вызывает, к примеру, метод «getResources», передавая код порта (или коды портов) аргументом
  5. Получает список яхт
  6. Вызывает, к примеру, методы «isResourceAvailable» и «getReservations», передавая желаемые даты
  7. Получает ответы
  8. Отображает на странице
  9. Пользователь нажимает «Подробно» на конкретном варианте
  10. Скрипт вызывает, к примеру, методы «getResourceDetails», «getResourceDiscount» и «getActiveReservation»
  11. Отображает подробное описание яхты с параметрами скидок, графика, цены
  12. Пользователь нажимает «Заказать»
  13. Заполняет форму с данными пасажиров
  14. Скрипт заносит данные, вызывая методы «insertCrewMember» и «confirmReservation»
  15. Пользователь нажимает «Оплатить»
  16. Скрипт заносит данные, вызывая метод «insertPayment» и производит все, связанное с оплатой, вызывает «getInvoices» и отправляет его на почту пользователю.

Все выше – это приблизительный сценарий, само собой. Если вы внимательно посмотрите на доступные методы (они все описаны в документации), то вынесете идею из всего этого – методы представляют собой логически завершенные единицы получения/занесения информации. Это логические блоки, которые вы вызываете в том порядке, который подходит вашей логике – в этом смысл такого рода API: есть страна – смотрим, есть ли такая в базе, если есть страна в списке обслуживаемых – то какие порты, есть порты – то какие яхты есть вообще там, если есть яхты – то смотрим, удовлетворяют ли заданным пользователем характеристикам, отображаем на странице списком, пользователь выбирает детальную информацию – берем детальную, отображаем, пользователь начинает процесс – вызываем методы резервации и оплаты и т.д. Все зависит от вашей бизнес-логики. Да, конечно, могут быть у них и веб-сервисы, которые за раз (за один запрос) могут принимать на вход все параметры, указанные пользователем в форме (зависит от разработчика на стороне того сервиса яхт - но стоит помнить, что в программировании приветствуется принцип "один метод - одна задача") - страна, порт, количество людей, время, ценовой диапазон и пр., но это опять же не меняет суть - поиск осуществляться будет посредством вызова одного метода, резервация - вызовом другого, оплата - вызовом третьего и т.д.

Так что здесь нет какой-то простой интеграции API с WordPress - чтобы «одним нажатием» бизнес-логику наворотить. Это не только вёрстка, а программная логика многошаговой интеракции с пользователем плюс отображение на странице.

Ну а сам XML-SOAP запрос-ответ выглядит так

Запрос:
POST /cbm_web_service2/services/CBM HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""
Content-Length: 352
Host: www.booking-manager.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cbm="http://cbm.mmk.com">
   <soapenv:Header/>
   <soapenv:Body>
      <cbm:getCompanies>
         <cbm:in0>1000</cbm:in0>
         <cbm:in1>username</cbm:in1>
         <cbm:in2>password</cbm:in2>
      </cbm:getCompanies>
   </soapenv:Body>
</soapenv:Envelope>


Ответ (здесь код 500, так как у меня же нет реальных username/password - но это не суть важно)
HTTP/1.1 500 Internal Server Error
Date: Mon, 01 Jul 2019 06:58:23 GMT
Server: Apache/2.4.25 (Debian)
Content-Type: text/xml;charset=UTF-8
Connection: close
Transfer-Encoding: chunked

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Server</faultcode>
            <faultstring>XML disabled for company 1000</faultstring>
            <detail>
                <errorcode>-1</errorcode>
                <errormessage>XML disabled for company 1000</errormessage>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы