Программирование морских круизов в
restapi Инфофлота
1. Введение:
Морские лайнеры очень большие и имеют огромное количество кают и
требуют другого подхода чем речные круизы. При покупке морских круизов
информация о доступности категорий кают, тарифов и кают запрашивается с
сайта оператора лайнера (оператор это на пример MSC) в режиме реального
времени. Для речных круизов она берётся из нашей БД которая
синхронизируется с операторами каждые несколько часов.
До недавнего времени наш restapi (http://restapi.infoflot.com/)
поддерживал только речные круизы и морские круизы работали в рестапи
только частично.
Цель этого документа, помочь агентам запрограммировать на своих
сайтах морские круизы используя весь функционал морских который есть на
наших главных сайтах:
2. Что не работает когда морские круизы запрограммированы точно так
же как речные:
Нам поступало очень много критики от агентов что рестапи для морских
круизов выдает неправильную информацию. А именно, для морских круизов:
- Метод /cruises/:id/cabins
(урл типа https://demoapi.infoflot.com/cruises/434524/cabins?key=91dd7...
но вставьте в него ваш АПИ ключ key),
возвращает приблизительные цены категорий кают, а status - доступна ли каюта к
продаже - вообще почти всегда неправильный.
- Метод /cruises/:id/cabins/search
(урл типа https://demoapi.infoflot.com/cruises/434524/cabins/search?adult_count=2&key=91dd7...
но вставьте в него ваш АПИ ключ key)
поиск кают доступных к продаже вообще неправильно работает так как status - доступна ли каюта к
продаже - неправильный.
- В самой подаче заявки, POST /requests,
непонятно как передавать информацию специфичную для морских круизов
(например время обеда или каюту фортуну "Гаранти").
3. Как должен работать процесс покупки морского круиза.
Если метод, /cruises/:id
(например https://demoapi.infoflot.com/cruises/434524?key=91dd7...
но вставьте в него ваш АПИ ключ key),
возвращает флаг isSeaFormattedCabins
= true, процесс покупки круиза
должен идти как у морского круиза, через методы рестапи:
Что бы получить интуитивное представление как работает процесс покупки
морского круиза через эти методы которые запрашивают информацию с сайта
оператора в режиме реального времени, зайдите на старом сайте на
страницу морского круиза в броузере Chrome:
Процесс подачи заявки у морских совсем другой чем у речных:

1. В первом шаге, запрашивается максимальный
возраст ребенка
с сайта оператора через наш АПИ. Откройте Chrome debugger (F12),
перезагрузите страницу и в табе дебагера Network дайте поиск на
"getAge":

В рестапи этот метод, getAge,
называется SeaChildMaxAge: /cruises/SeaChildMaxAge/:id.
Вам надо будет его вызывать, по урлу типа https://demoapi.infoflot.com/cruises/SeaChildMaxAge/434524?key=91dd7...
(но замените key на ваш АПИ ключ), и показывать этот максимальный
возраст ребенка на самом первом шаге бронирования.
2. Во втором шаге запрашиваются категории
кают и тарифы кают доступных для покупки. Здесь
выберите количеств взрослых и детей и максимальный возраст ребенка,
щелкните на "Выбрать категорию каюты". И в окне дебагера, дайте поиск
на getPrice. Анализируйте что
посылает и возвращает этот метод для второго шага бронирования.
В рестапи этот метод, getPrice,
называется SeaCategories /cruises/SeaCategories/:id.
Вам надо будет его вызывать, по урлу типа https://demoapi.infoflot.com/cruises/SeaCategories/434524?adults=2&children=1&childrenAge=8&key=91dd7...
(но замените key на ваш АПИ ключ), и показать пользователю выбрать
категории кают и тарифы и дать пользователю выбрать подходящий для него
тариф.
Но лучше вместо SeaCategories
/cruises/SeaCategories/:id
вызывайте более новый /cruises/SeaCategoriesV2/:id
второй версии. По урлу типа
https://demoapi.infoflot.com/cruises/SeaCategoriesV2/434524??adults=2&children=1&childrenAge=8&key=91dd7...
В нём есть:
- Группировка категорий кают по "Сьют", "С балконом", "С
окном", "С иллюминатором", "Внутренняя".
- Минимальная цена для каждой группировки кают и каждой и категории кают
- Услуги в каюте: иконки и описания.
Затем, в этом шаге в броузере выберете категорию кают и тариф, и в
дебагере дайте
поиск на getCabins.
В рестапи этот метод, getCabins,
называется /cruises/SeaCabins/:id.
Вам надо будет его вызывать, по урлу типа https://demoapi.infoflot.com/cruises/SeaCabins/434524?fare_id=EARLY%20BOOKING%20DRINKS&category_id=IR2&adults=2&children=1&childrenAges=8&key=91dd7...
(но замените key на ваш АПИ ключ), и показать пользователю доступные
каюты и дать ему возможность выбрать каюту.
3. В третьем шаге выбирается на фронте желаемое время обеда dinerTime.
(Значения dinerTime описаны в
requests/postSeaRequest.)
4. В четвертом шаге вводятся данные
туристов почти точно так же как для речных круизов в рестапи
(не
как здесь в дебагере, а как описано в requests/postSeaRequest).
5. В пятом шаге подается морская заявка. Вам надо будет подавать заявку
в рестапи методом POST на postSeaRequest,
requests/postSeaRequest,
на https://demoapi.infoflot.com/requests/postSeaRequest
и передавать в него данные собранные в предыдущих 4-ёх шагах.
Каюты фортуна - garantee:
На морских популярна продажа кают "фортуна"
- "гаранти".
Путешественнику на сайте продается каюта гарантированно "классом не
ниже чем". Прийдя на корабль он разузнает какого класса у него каюта и
будет приятно удивлен.
У MSC, номер такой каюты всегда G00000. Их надо показывать пользователю
как обычно, и передать как обычно в поле cabin в requests/postSeaRequest.
Букинг создаст у нас внутренний номер каюты и мы запросим бронь на
такую каюту у MSC.
4. Используйте наш дев:
В процессе разработки, пожалуйста тестируйте ваш код посылая запросы на
devrestapi, https://demoapi.infoflot.com/
что бы не мешать работать боевым сайтам и не захламлять наши в ваши
аккаунты тестовыми заявками. (Как ваш код будет готов, вам https://demoapi.infoflot.com/
надо будет поменять на боевой рестапи https://restapi.infoflot.com/.)
Заявки которые вы пошлете на наш дев (на https://demoapi.infoflot.com/requests/postSeaRequest)
будут видны в вашем аккаунте на нашем дев букинге.
Напишите нам на n.kitsul at flotconsult.ru что бы мы вам дали к
нему доступ, и ответили на возникшие у Вас вопросы.
И сообщите нам пожалуйста если найдете в этой документации ошибки или
неясности.