Интеграция со сторонними системами АПИ: различия между версиями
(→Фиксация оплаты внешним запросом) |
(→API универсального платежного шлюза) |
||
Строка 695: | Строка 695: | ||
'''Выгрузка заказов''' — это экспорт данных заказа или заказов для различных компонентов системы Nemo. Модуль позволяет внешней системе получать данные по заказам для дальнейшей обработки. | '''Выгрузка заказов''' — это экспорт данных заказа или заказов для различных компонентов системы Nemo. Модуль позволяет внешней системе получать данные по заказам для дальнейшей обработки. | ||
Подробнее о процессе выгрузки, настройках, форматах выгрузки для различных компонент можно прочитать в статье [[Выгрузка]] | Подробнее о процессе выгрузки, настройках, форматах выгрузки для различных компонент можно прочитать в статье [[Выгрузка]] | ||
− | |||
− | |||
− | |||
== API Синхронизации пользователей и субагентов == | == API Синхронизации пользователей и субагентов == |
Версия 18:41, 13 мая 2015
!!!СТАТЬЯ В РАЗРАБОТКЕ!!!
Содержание
- 1 API Авиабилетов
- 2 API Отелей
- 3 Выгрузки статистики продаж через API (Метапоиск)
- 4 Выгрузка информации о заказах
- 5 API Синхронизации пользователей и субагентов
- 6 API Кроссавторизации
- 7 Передача параметров в форму поиска
- 8 Проверка в сторонней системе возможности тикетинга
- 9 Загрузка счетов из сторонней системы
API Авиабилетов
Для авторизации в системе, в запросе необходимо указать APIKey и ClientID. Эти данные можно узнать в разделе Администрирование - Веб-сервис. Авторизация. Там же можно включить/выключить нотификацию для действий сделанных через АПИ.
API Поиска авиабилетов
Это сервис внутри Nemo, который позволяет получить результаты поиска.
Для подключения к веб-службе поиска авиабилетов необходимо открыть доступ нужному пользователю. Это можно сделать в разделе «Администрирование» ⇨ «Веб-служба. Авторизация».
Подробнее можно узнать в специальной статье Веб-служба поиска авиабилетов
API Бронирования авиабилетов
Сервис позволяет забронировать/войдировать авиабилет с использованием API, описание подключения, запроса, ответов находится в этой статье Веб-служба бронирования
API Выписки авиабилетов
Агентский АПИ выписки позволяет определить валидирующего перевозчика и значение комиссии от авиакомпании для брони, а также запустить процедуру выписки билета. Веб-служба выписки
API Оплаты
Сервис внутри Nemo, который предназначен для выполнения различных операций, относящихся к оплате заказов. Агентские АПИ оплаты
API Дополнительных запросов авиабилетов
К дополнительных запросам относятся проверка на доступность, запрос на обновление заказа, чтение тарифных правил. Дополнительные запросы АПИ авиабилетов
Используемые параметры
Параметры, используемые в запросах
Имя элемента | Обязательный | Тип | Описание |
---|---|---|---|
BookFlight | да | сложный | Контейнер для тела запроса бронирования |
FlightId | да | число | Id перелёта для которого будет производится бронирование(поиск тарифных правил, проверка доступности) |
CurrencyCode | нет | строка | Трёх буквенный код валюты (обязателен для комиссии в валюте) |
Agency | да | сложный | Информация об агентстве |
Name | да | строка | Название агентства |
Telephone | нет | сложный | Контактный телефон агентства |
Type | да | строка | Тип номера, возможные значения: M - мобильный, H - домашний, B - рабочий, A - агентство |
PhoneNumber | да | строка | Номер телефона |
CountryAccessCode | нет | строка | Код страны |
AreaCityCode | нет | строка | Код региона/города |
Address | да | сложный | Адрес агентства |
City | да | строка | Город, в котором расположено агентство |
StreetAddress | нет | сложный | Адрес агентства в городе (улица, дом, корпус, офис и т.д.) |
PostalCode | нет | строка | Почтовый код, индекс. |
CountryCode | нет | строка | Код страны (RU, UA, US и т.д.) |
Travellers | да | сложный | Контейнер для информации о пассажирах (для которых будет производится поиск перелёта, бронирование) |
Traveller | да | сложный | Информация о пассажире |
Type | да | строка | Тип пассажира возможные значения: ADT - взрослые, CNN - дети со взрослыми, UNN - дети без сопровождения взрослых, INF - младенцы,INS - младенцы с местом |
IsContact | нет | булевский | Индикатор показывающий является ли данное лицо контактным, возможные значение: true - пассажир является контактным лицом, false - не является. Контактное лицо может быть только одно, если среди пассажиров есть взрослые, то только кто-то из них может быть контактным лицом. Если не указано, то по умолчанию false. |
LinkedTo | нет | целое число | Номер взрослого, к которому привязан младенец/ребёнок |
Num | да | число | Номер пассажира. |
PreferedPlace | нет | сложный | Информация о предпочитаемом месте. Если указаны номер ряда и номер места, то параметры Smoking и Location игнорируются и могут быть не указаны. |
SmokingAllowed | нет | булевский | true - место для курящих, false - место для некурящих. По умолчанию false. |
Location | нет | строка | Расположение места, возможные значения: W - у окна (Window); M - где-то в середине ряда (Middle); NPW - возле прохода (NearPassengerWay); NS - нет предпочтения (NotSpecified). |
RowNumber | нет | строка | Номер ряда |
PlaceNumber | нет | строка | Номер места |
SegNumber | да | строка | Номер сегмента |
DocumentInfo | да | сложный | Паспортные данные |
DocType | да | строка | Тип документа, обязательный. |
DocNum | да | строка | Номер документа |
CountryCode | да | строка | Страна выдачи, двух буквенный код(RU, US и т.д.) |
DocElapsedTime | да | строка | Срок истечения срока действия паспорта в фирмате dd.mm.yyyy (например 31.12.2012) |
VisaInfo | нет | сложный | Информация о визе |
Num | да | строка | Номер визы |
IssueDate | да | строка | Дата выдачи визы в формате dd.mm.yyyy |
IssueCountry | да | строка | Страна выдачи визы |
IssuePlace | да | строка | Место выдачи визы |
BirthCountry | нет | строка | Страна рождения (IATA код страны) |
BirthCity | нет | строка | Город рождения (название) |
ArrAddress | нет | сложный | Адрес прибытия, для въезжающих в США (не граждан США) информация является обязательной. Если она не заполняется при оформлении брони, то её всё равно придётся заполнять при посадке на самолёт. |
CountryCode | да | строка | IATA код страны |
State | да | строка | Штат или область въезда |
PostalCode | да | строка | Почтовый код |
City | да | строка | Город |
StreetAddress | да | строка | Адрес: улица, номер дома, квартиры и тп |
DocStringFormats | нет | сложный | Список форматов строк паспортных данных, которые будут отправлены в дополнение к стандартным. |
DocStringFormat | да | строка | Формат данных, возможные значения: DOCS - строка формата DOCS, FOID - строка формата FOID. Установка данных в формате DOCS как правило необходима для последующей выписки в BSP среде. Установка FOID - всреде ТКП. |
PersonalInfo | да | сложный | Персональные данные пассажира |
DateOfBirth | да | строка | Дата рождения в формате dd.mm.yyyy (например 31.12.2000) |
Nationality | да | строка | Национальность/гражданство, двух буквенный код страны (RU, UA, US и т.д.) |
Gender | да | строка | Пол пассажира, обязательный, возможные значения: M - мужской(Male); F - женский(Female). |
FirstName | да | строка | Имя пассажира |
LastName | да | строка | Фамилия пассажира |
BMiddleName | да | строка | Отчество пассажира |
Meal | нет | строка | Код типа питания, возможные значения: NONE - отсутствует (по умолчанию); AVML - Азиатская вегетарианская кухня; BLML - Блюда щадящей диеты; CHML - Детское питание; CHPC - Детский холодный завтрак; СНСС - Детский горячий завтрак; CHHC - Детский ланч, ветчина и сыр; PBJS - Детский ланч, ореховое масло; CHMC - Детский обед макароны с сыром; DBML - Диабетическое питание; FPML - Фрукты; GFML - Питание без клейковины; HFML - Питание богатое клетчаткой; HNML - Индусская кухня; BBML - Питание для младенцев; KSML - Кошерная кухня; SMKB - Кошерный завтрак; SMKL - Кошерный ланч; SMKD - Кошерный обед; LPML - Малобелковое питание; LCML - Низкокалорийное питание; LFML - Низкохолестериновое питание; PRML - Низкопуриновое питание; LSML - Малосоленое питание; MOML - Мюсли; NLML - Безмолочные продукты; ORML - Восточная кухня; RVML - Сырые овощи; SFML - Морепродукты; SPML - Особое питание; VLML - Вегетарианское, молоко и яйца; VGML - Строго вегетарианское питание; VJML - Джайнизское вегетарианское; VOML - Восточное вегетарианское питание. |
LoyaltyCard | нет | сложный | Карточка часто летающего пассажира |
OpCode | да | строка | IATA код компании авиаперевозчика |
Number | да | строка | Номер карточки |
ContactInfo | нет | сложный | Контактная информация для пассажира |
EmailID | нет | строка | Контактный email |
Telephone | нет | сложный | Контактный телефон пассажира, описание аналогично описанию телефона агентства |
CancelBook | да | сложный | Контейнер для тела запроса отмены брони |
BookID | да | число | Номер брони, которая будет отменяться (для которой будет производится выписка, отмена выписки) |
GetAirRules | да | сложный | Контейнер для тела запроса поиска тарифных правил |
AirAvail | да | сложный | Контейнер для тела запроса проверки доступности перелёта |
Ticketing | да | сложный | Контейнер для тела запроса выписки брони |
ValCompany | нет | строка | Валидирующий перевозчик, на бланке которого выписывается билет |
Comission | нет | сложный | Комиссия |
Amount | нет | число с плавающей точкой | Значение комиссии в валюте, если указано, то комиссия в процентах игнорируется |
Percent | нет | число | Комиссия в процентах |
VoidTicket | да | сложный | Контейнер для тела запроса отмены выписки брони |
Search | да | сложный | Контейнер для тела запроса поиска |
ODPairs | да | сложный | Контейнер для информации о перелёте |
Type | да | строка | Тип перелёта, возможные значения: OW - в одну сторону, RT - туда-обратно, CR - сложный маршрут |
Direct | нет | булевский | Индикатор, указывающий какие перелёты искать, только прямые или с пересадками, возможные значения: false - с пересадками, true - только прямые. Если не указан, значение по умолчанию false. |
AroundDates | нет | число | Включает поиск по окружным датам, количество дней +/- от даты заезда/возвращения. Применим только для типов перелёта в одну сторону(OW) и туда-обратно(RT). Возможные значения: 0, 1, 2, 3 |
ODPair | да | сложный | Контейнер для информации о сегменте перелёта. Может повторяться 1-6 раз. Поиск по расписанию использует только первый сегмент, поиск сложных перелётов и перелётов туда и обратно не поддерживается |
DepDate | да | строка | Дата вылета, Формат ГГГГ-MM-DDTЧЧ:ММ:СС |
DepAirp | да | строка | Трёх буквенный код города отправления или конкретного аэропорта в городе отправления. |
ArrAirp | да | строка | Трёх буквенный код города прибытия или конкретного аэропорта в городе прибытия. |
Count | да | число | Число пассажиров данного типа. Общее количество пассажиров всех типов должно быть не более 9. |
Restrictions | нет | сложный | Контейнер дополнительной информации для поиска. |
ClassPref | нет | строка | Предпочитаемый класс перелёта, возможные значения: All - все, Economy - эконом, Business - бизнес, First - первый. Если не указан, то по умолчанию All. |
OnlyAvail | нет | булевский | Искать только доступные, возможные значения: true - только доступные, false - все. Если не указан, то по умолчанию false. |
AirVPrefs | нет | сложный | Обёртка для списка авиакомпаний, по которым будет или не будет проводиться поиск. |
AirVPref | да | сложный | Информация об авиакомпании. |
Include | нет | булевский | Индикатор, показывающий включить или исключить в результатах поиска перелёты данной авиакомпании: true - включить, false - исключить. Если не указан, то по умолчанию false. |
IncludePrivateFare | нет | булевский | Включать приватные цены в результат или нет, возможные значения: true - включать, false - не включать. Если не указан, то по умолчанию false. |
ServiceTypes | нет | сложный хмл | Контейнер массива используемых веб-сервисов при поиске. |
ServiceType | нет | строка | Тип веб-сервиса(поставщика). При указании нескольких элементов ServiceType поиск будет проведён для каждого сервиса. Возможные значения: Sirena2000 - поиск в Сирене; SirenaSchedule - поиск в Сирене по расписанию; SabreLFS - поиск в Сэйбр LFS; SabreBFM - поиск в Сэйбр BFM; SabreSchedule - поиск Сэйбр по расписанию; Galileo - поиск в Галилео; AmadeusMPTBS - поиск в Амадеус. |
Параметры, используемые в ответах
Имя элемента | Обязательный | Тип | Описание |
---|---|---|---|
BookFlightResult | да | сложный | Контейнер для тела ответа бронирования |
ID | да | число | Номер бронирования в системе Nemo. |
Status | да | строка | Статус брони, возможные значения: booked - забронировано, canceled - бронь отменена, ticket - выписана; UNDEFINED - статус не определён. |
Code | да | строка | Номер бронирования в системе поставщика (в sabre, sirena и т.д.)/код тарифного правила |
QueryPlace | нет | сложный | Очередь, в которую помещено бронирование |
Number | да | число | Номер очереди |
Flight | да | сложный | Перелёт, по которому была сделана бронь (Результаты проверки доступности для перелёта) |
Agency | да | сложный | Информация об агентстве |
ItinReceipts | нет | сложный | Маршрут квитанция. Содержит строку в кодировки Encoding (как правило в base64), представляющую маршрут квитанцию в формате Format. |
Encoding | да | строка | Кодировка |
Format | да | строка | Формат |
Travellers | да | сложный | Контейнер для информации о пассажирах |
Traveller | да | сложный | Информация о пассажире |
Ticket | нет | сложный | Билет пассажира. |
TickectNum | да | строка | Номер билета |
Seats | нет | сложный | Контейнер мест пассажира. |
Seat | да | сложный | Место в самолёте |
Number | да | строка | Номер места(ряд+номер в ряду) |
Characteristic | нет | строка | Характеристика места в соответствии со стандартом EDIFACT. См справочник “Таблица характеристик мест”. |
SmokingPreference | нет | строка | Статус курения на этом месте, если Y - место для курящих, если N - место для некурящих. |
SegmentNumber | да | число | Номер сегмента |
PersonalInfo | да | сложный | Личные данные |
LoyaltyCard | нет | сложный | Карточка часто летающего пассажира |
ContactInfo | нет | сложный | Контактная информация для пассажира |
FareStored | нет | срока: Yes/No | Указывает установлена ли / гарантируется ли цена у поставщика. Если параметр отсутствует в ответе, то по умолчанию значение “Yes”. |
CancelBookResult | да | сложный | Контейнер для тела ответа отмены брони |
BookID | да | число | Номер брони, которая отменялась (Номер выписанной брони, выписка которой отменялась) |
Result | да | сложный | Результат отмены (войдирования) |
Success | да | булевский | Индикатор, показывающий успешно или нет прошла отмена, возможные значения: true - успешно отменена (войдирование); false - не отменена |
GetAirRulesResult | да | сложный | Контейнер для тела ответа поиска тарифных правил |
FlightId | да | число | Номер перелёта, для которого найдены тарифные правила (будет проводилась проверка доступности) |
Rules | да | сложный | Контейнер для правил |
Rule | да | сложный | Правило |
Tarrif | да | строка | Код тарифа, для которого правило применяется |
Name | да | строка | Имя правила |
RuleText | да | строка | Текст правила |
AirAvailResult | да | сложный | Контейнер для тела ответа помещения брони в очередь |
IsAvail | да | булевский | Индикатор, показывающий доступность перелёта, возможные значения: true - доступен; false - недоступен |
VoidTicketResult | да | сложный | Контейнер для тела ответа отмены выписки брони |
SearchResult | нет | сложный | Контейнер тела ответа для результатов поиска. |
Flights | да | сложный | Контейнер для перелётов |
Flight | нет | сложный | Представляет информацию о перелёте. Отсутствует если перелётов не найдено (используется в поисковом ответе) |
WebService | да | строка | Веб-сервис (поставщик) от которого был получен перелёт. |
ValCompany | нет | строка | IATA код авиакомпании. Валидирующий перевозчик, на бланках которого должен выписываться билет. |
Segments | да | сложный | Контейнер для сегментов перелёта |
Segment | да | сложный | Представляет информацию о сегменте |
SegNum | да | число | Номер сегмента в перелёте |
DepAirp | да | строка | IATA код аэропорта отправления |
DepTerminal | нет | строка | Код терминала отправления |
ArrAirp | да | строка | IATA код аэропорта прибытия |
ArrTerminal | нет | строка | Код терминала прибытия |
OpAirline | да | строка | Код авиакомпании, выполняющей рейс |
MarkAirline | да | строка | Код авиакомпании, продающей билет |
FlightNumber | да | число | Номер рейса |
AircraftType | да | строка | Код типа самолёта |
DepDateTime | да | строка | Дата и время отправления, формат ГГГГ-MM-ДДTЧЧ:ММ:СС |
ArrDateTime | да | строка | Дата и время прибытия, формат ГГГГ-MM-ДДTЧЧ:ММ:СС |
StopNum | да | число | Число остановок |
Meal | да | строка | Тип питания, возможные значения: UNDEFINED - неизвестно; N - Нет питания; P - Алкогольные напитки в продаже; B - Завтрак; O - Холодная еда; C - Бесплатные алкогольные напитки; K - Континтальный завтрак; D - Обед; F - Еда в продаже; G - Еда/напитки в продаже; H - Горячая еда; L - Ланч; M - Еда; R - Освежающие еда/напитки бесплатно; V - Освежающие еда/напитки за отдельную плату; S - Закуска |
BookingCodes | да | сложный | Контейнер для классов перелёта |
BookingCode | да | строка | Код класса перелёта. Если производится поиск по расписанию, то может встречаться несколько раз. |
FlightTime | нет | число | Время перелёта в минутах |
TimeZone | нет | сложный | Информация о временных зона прибытия и отправления |
Departure | да | число | Часовой пояс отправления, UTC (смещение относительно Гринвича) |
Arrival | да | число | Часовой пояс прибытия, UTC (смещение относительно Гринвича) |
ETicket | да | булевский | Индикатор электронного билета, возможные значения: true - билет является электронным, false - билет не является электронным. |
Baggage | нет | сложный | Информация о багаже |
Measure | да | строка | Мера веса. K - килограммы, PC - сумки/клади |
Value | да | строка | Количество багажа |
PricingInfo | нет | сложный | Контейнер для информации о ценах. Отсутствует в случае, если производится поиск по расписанию. |
Refundable | да | булевский | Индикатор показывающий является ли билет возвратным или нет, возможные значения: true - возвратный (нет штрафов за возврат), false - невозвратный (могут быть штрафы за возврат) |
PassengerFare | да | сложный | Информация о ценах для конкретного типа пассажиров. |
Quantity | да | число | Число пассажиров данного типа |
BaseFare | да | сложный | Цена в базовой валюте(за одного пассажира) |
EquiveFare | нет | сложный | Цена в эквивалентной валюте(за одного пассажира), при поиске цены не возвращается |
TotalFare | нет | сложный | Полная стоимость для пассажиров данного типа включая таксы (за одного пассажира), при поиске цены не возвращается |
Currency | да | строка | Трёх буквенный код валюты. |
Amount | да | число с плавающей точкой | Значение стоимости. |
Taxes | нет | сложный | Контейнер для такс, при поиске цены не возвращается |
Tax | да | сложный | Одна такса |
CurCode | да | строка | Трёх буквенный код валюты для таксы |
TaxCode | да | строка | Код таксы |
Amount | да | число с плавающей точкой | Значение таксы |
Tariffs | да | сложный | Контейнер для тарифов |
Tariff | да | сложный | Контейнер для одного тарифа |
Code | да | строка | Код тарифа |
SegNum | да | число | Номер сегмента для которого применяется тариф, если тариф применяется для всех сегментов, то возвращается 0. |
FareCalc | нет | строка | Строка расчёта цены |
LastTicketDateTime | да | строка | Дата и время таймлимита по выписке в формате ГГГГ-MM-ДДTЧЧ:ММ:СС. Если бронирование не будет аннулировано или выписано до этого времени, то могут быть применены штрафы. |
API Отелей
Агентский API Отелей - система, которая предоставляет возможность поиска и бронирования отелей а так же получение информации о времени и размерах штрафов, уникальной информации об отеле, получение статической информации.
Подробнее можно узнать в нашей специальной статье Агентский АПИ отелей
Выгрузки статистики продаж через API (Метапоиск)
Метапоисковая система (метапоисковая машина, метапоисковик) — это поисковая система, которая в отличие от классических поисковых машин не имеет собственной базы данных и собственного поискового индекса, а формирует поисковую выдачу за счет смешивания и переранжирования результатов поиска других поисковых систем.
В разделе статистики заказов из метапоисков можно получить данные по статистике метапоиска (по источнику переходов модуля метрики) за определенный период бронирования заказов в виде файла данных в формате XML.
Можно получить список заказов с их статусом (забронирован, выписан, аннулирован), сделанных через метапоисковую систему.
Подробнее можно узнать в статье посвященной взаимодействию с метопоисковиками Взаимодействие с метапоисковиками
Выгрузка информации о заказах
Выгрузка заказов — это экспорт данных заказа или заказов для различных компонентов системы Nemo. Модуль позволяет внешней системе получать данные по заказам для дальнейшей обработки. Подробнее о процессе выгрузки, настройках, форматах выгрузки для различных компонент можно прочитать в статье Выгрузка
API Синхронизации пользователей и субагентов
Назначение данного модуля — обеспечение взаимодействия между сторонней программой (например, системой автоматизации туроператора "САМО-тур") и Nemo в части синхронизации списка B2B-пользователей.
Модуль является компонентом, включаемым и отключаемым из административной части.
Авторизация B2B-пользователей
Все B2B-пользователи, загруженные через модуль взаимодействия со сторонней программой, будут иметь случайным образом сгенерированный криптостойкий пароль. Механизм авторизации работает следующим образом:
1.Система пытается авторизовать пользователя через собственную службу авторизации. 2.В случае неудачи, но присутствия в системе введенного логина, она должна попытаться авторизовать пользователя во внешней службе авторизации («САМО-тур»), при включенном компоненте взаимодействия с «САМО-тур». 3.В случае неудачного опознавания пользователя выводится соответствующее сообщение и процедура может быть повторена путем повторного ввода логина и пароля.
Регистрация неудачных попыток входа производится только в двух случаях:
- Компонент взаимодействия выключен.
- Компонент взаимодействия включен и провалены обе попытки авторизации (внутренней и внешней).
Для сторонней авторизации пользователей в системе Nemo внешняя программа должна иметь веб-службу, основанную на WSDL определенного формата. Ссылка на веб-службу прописывается в настройках системы Nemo на странице конфигурации интеграции с внешней системой.
Для импортированных пользователей в Nemo имеется поле «Идентификатор внешней системы», который отвечает за сопоставление с ID пользователя в сторонней системе. Для менеджеров агентств оно равно номеру партнера (агента) во внешней системе, для пользователей — номеру пользователя в «САМО-туре».
Для пользователей, имеющих какое-либо значение в поле «идентификатор во внешней системе», запрещен функционал смены пароля или его восстановления по электронной почте.
Пример запросов и ответов на авторизацию:
Request
<?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <getAuthorization xmlns="http://tempuri.org/"> <login>string</login> <pass>string</pass> </getAuthorization> </soap12:Body> </soap12:Envelope>
Response
<?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <getAuthorizationResponse xmlns="http://tempuri.org/"> <getAuthorizationResult> <session_id>string</session_id> <user_id>string</user_id> <login>string</login> <status>string</status> </getAuthorizationResult> </getAuthorizationResponse> </soap12:Body> </soap12:Envelope>
Сервис реализует функцию «getAuthorization», на вход которой передается конструкция «getAuthorizationRequest»:
- login (строка) - введенный пользователем логин
- pass (строка) - введенный пользователем пароль
Функция должна отдавать системе конструкцию getAuthorizationResponse:
- session_id (строка) - пустое значение
- user_id (строка) - идентификатор менеджера в системе «САМО-тур»
- login (строка) - логин пользователя (для контроля)
- status (строка) - может иметь значения:
1. adm - администратор 2. mgr - менеджер 3. usr - пользователь (возвращается всегда это значение)
Импорт и синхронизация учетных записей
Со стороны внешней системы должно быть приложение, отправляющее в формате XML данные по учетным записям B2B-клиентов (агентств и пользователей). Со стороны Nemo имеется скрипт, который принимает XML в формате, приведенном в описании документов, передаваемых в Nemo, с ключом авторизации, определенным в Nemo в административной части модуля.
Передаваемые элементы с описанием учетных записей и партнеров имеют аккаунт (Account ID) во внешней системе и атрибут action, который может быть в состоянии update или delete, т.е. обновления/добавления и удаления, соответственно.
В административной части модуля в Nemo задается ключ авторизации для защиты от несанкционированного доступа. Значение не должно быть пустым.
Скрипт получает данные об обновлении и добавлении (проходят как одно и то же действие) или удалении информации по аккаунту. XML-данные могут содержать несколько элементов.
Описание передаваемых в Nemo XML-документов:
<?xml version="1.0" encoding="UTF-8" ?> <changes key="ключ_авторизации"> <accounts> - список изменений по аккаунтам пользователей <item id=3 partnerId=10 action="update" admin="1"> <login>Логин пользователя</login> </item> <item id=6 partnerId=15 action="update"> ... </item> <item id=9 partnerId=30 action="delete" /> </accounts> <partners> - список изменений по партнерам <item id=140 action="update"> <name>Название агентства</name> <ofname>Официальное Название агентства</ofname> <phone>Телефон</phone> <tax>Форма налогообложения</tax> <group>123</group> <code>ABCD</item> </partners></changes></code>
При импорте информации об агентствах будут возвращаться следующие значения:
Поле во внешней системе | Путь к элементу xml | Тип данных | Сопоставляемое поле в Nemo | Примечание |
---|---|---|---|---|
Идентификатор партнера | /changes/partners/item[@id] | Целое число | Идентификатор во внешней системе для менеджера / администратора | |
Название юридического лица | /changes/partners/item/ofname | Строка | Полное официальное название юридического лица | Необходимо для выписки счетов юридическими лицами |
Сокращенное название | /changes/partners/item/name | Строка | Имя агентства | |
Код агентства | /changes/partners/item/code | Строка | Используется при создании логина администратора | |
Номер группы в самотуре | /changes/partners/item/group | Целое число, либо пусто | На основании таблицы сопоставлений (см. ниже) определяется, к какой группе агентство принадлежит в Nemo | |
Форма налогообложения | /changes/partners/item/tax | Целое число, равное идентификатору во внешней системе |
Для каждого возвращенного агентства Nemo проверяет наличие его в своей базе. Если агентство не найдено, то создается новое, для него создается менеджер (админ) с логином ABCD-1234, где ABCD – буквенный идентификатор партнера во внешней системе, 1234 — id партнера во внешней системе. Пароль генерируется случайный и криптостойкий.
Если агентство найдено, то в случае необходимости производится обновление всех полей на основании данных из внешней системы. Если изменился буквенный код агентства, то Nemo переименовывает менеджера в соответствии с новым кодом. При импорте информации о пользователях агентств в Nemo будут посылаться следующие поля:
Поле во внешней системе | Путь к элементу xml | Тип данных | Сопоставляемое поле в Nemo | Примечание |
---|---|---|---|---|
Идентификатор пользователя | /changes/accounts/item[@id] | Целое число | Идентификатор внешней системы | Храним как дополнительное поле |
Идентификатор партнера | /changes/accounts/item[@partnerId] | Целое число | Идентификатор внешней системы менеджера агентства | |
Логин | /changes/accounts/item/login | Строка | Логин пользователя | |
Администратор | /changes/accounts/item[@admin] | 0 - нет, 1 - да | Эксперт по бронированию |
Для каждого возвращенного пользователя Nemo проверяет наличие его в своей базе. Если пользователь не найден, то создается новый. Пароль генерируется случайный и криптостойкий.
Если пользователь найден, то в случае необходимости производится обновление всех полей на основании данных из внешней системы. При запросе на удаление пользователя, в Nemo указанный логин удаляться не будет в целях сохранения целостности старых данных, а просто помечается как удаленный, и логин переименовывается и становится вида [логин_пользователя]_X_[числовой идентификатор_пользователя в Само].
<item id=[идентификатор] action="delete" />
Таблица сопоставлений групп
В административной части Nemo надо создать отдельную страницу, на которой можно сопоставить имеющиеся группы в Nemo номерам групп в САМО-тур (поле group в XML). Выводится список существующих групп для текущего (корневого) агентства.
API Кроссавторизации
Система Nemo позволяет обращаться к ней как базе пользователей для авторизации из других систем (например форума на сайте, собственного ПО компании и т.п)
Для этого нужно подключиться к веб-службе авторизации, WSDL-описание которой располагается по адресу:
http://hostname/authorization_reol.wsdl
Запрос
?xml version ='1.0' encoding ='UTF-8' ?> <definitions name='Authorization' targetNamespace='http://example.org/Authorization' xmlns:tns=' http://example.org/Authorization ' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns='http://schemas.xmlsoap.org/wsdl/'> <message name='getAuthorizationRequest'> <part name='login' type='xsd:string'/> <part name='pass' type='xsd:string'/> </message> <message name='getAuthorizationResponse'> <part name='session_id' type='xsd:string'/> <part name='user_id' type='xsd:string'/> <part name='login' type='xsd:string'/> <part name='status' type='xsd:string'/> </message> <portType name='AuthorizationPortType'> <operation name='getAuthorization'> <input message='tns:getAuthorizationRequest'/> <output message='tns:getAuthorizationResponse'/> </operation> </portType> <binding name='AuthorizationBinding' type='tns:AuthorizationPortType'> <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/> <operation name='getAuthorization'> <soap:operation soapAction='urn:xmethods-delayed-quotes#getAuthorization'/> <input> <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </input> <output> <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </output> </operation> </binding> <service name='AuthorizationService'> <port name='AuthorizationPort' binding='AuthorizationBinding'> <soap:address location='http://nemo.local/controllers/authorization/auth_server.php'/> </port> </service> </definitions>
Передача параметров в форму поиска
Описанная функциональность не входит в стандартную поставку системы.
Для получения возможности использовать ее, пожалуйста, обратитесь в коммерческий отдел.
В системе Nemo имеется возможность перенаправлять пользователей на страницу с уже заполненными параметрами поиска или сразу напрямую на результаты поиска.
Применение
Эта технология может использоватся к примеру для формирования ссылок с баннеров, при клике на которые пользователь попадает на форму, на которой уже могут быть заполнены пункты назначения, даты, количество пассажиров и прочие параметры.
Также, при указании всех необходимых параметров, пользователя можно перебрасывать сразу на процесс поиска авиабилетов с указанными критериями.
Для использования заполнения формы из URL следует включить опцию: Администрирование → Настройки системы → Включить FastSearch (передачу параметров поиска)
После этого можно использовать ссылки на форму поиска вида
http://SITEMANE/?trip_type=OW&out_iata=MOW&in_iata=BER&departure_date=21.10.2009&adults=1&children=0&input_vendors=SU,PS¶m_by_get=on
Переменные FastSearch
Имена полей - такие же как имена инпутов на поисковой форме.
Следите за тем, чтобы значения соответствовали установленным в настройках ограничениям.
Переменные, которые предполагают в качестве значения "true" можно просто не включать в запрос, чтобы их логика не отработала.
Форма поиска
Чтобы перенаправить пользователя на страницу с заполненными параметрами поиска, необходимо указать get-параметр ¶m_by_get=on, иначе сработают стандартные предустановки полей формы поиска.
Процесс поиска
Если вы указываете все необходимые для поиска параметры, то для того чтобы отправить пользователя сразу на результаты поиска, нужно указать get-параметр &fast_search=on.
Маршрут «В одну сторону» и «Туда и обратно»
Элемент | Переменная | Допустимые значения | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Тип маршрута | trip_type |
| ||||||||||
Пункт вылета | out_iata |
| ||||||||||
Пункт прилета | in_iata |
| ||||||||||
Дата вылета | departure_date |
| ||||||||||
Дата обратного вылета | back_departure_date |
| ||||||||||
Время вылета | prefered_departure_type |
| ||||||||||
Время обратного вылета | prefered_back_departure_type |
| ||||||||||
Поиск только среди прямых рейсов ("Без пересадок") | direct | true |
Дополнительные параметры
Элемент | Переменная | Допустимые значения | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Нижнее ограничение по цене по умолчанию | money_from |
| ||||||||
Верхнее ограничение по цене по умолчанию | money_to |
| ||||||||
Поиск в окружных датах | district_date | true | ||||||||
Диапазон соседних дат +(-) [дней] | date_range |
| ||||||||
Поиск по соседним аэропортам | district_airport | true | ||||||||
Класс обслуживания | class |
| ||||||||
Фильтр по авиакомпании | input_vendors |
| ||||||||
Сортировка | sort |
|
Сложный маршрут
! Данные переменные применимы только для сложного маршрута (trip_type=CR).
[X] - номера отдельных перелетов. Нумерация начинается с 0, что означает первый перелет.
Максимальное количество сегментов для сложного маршрута определяется одноименной настройкой в разделе Авиабилеты ⇨ Поиск ⇨ Ограничения поиска.
Элемент | Переменная | Допустимые значения | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Пункты вылета | cr_iata[0] cr_iata[1] |
MOW | Код аэропорта ИАТА | ||||||||||
Пункты прилета | cr_back_iata[0] cr_back_iata[1] |
LED | Код аэропорта ИАТА | ||||||||||
Дата вылета | cr_date[0] cr_date[1] |
25.10.2013 | Дата в формате ДД.ММ.ГГГГ | ||||||||||
Время вылета | cr_pref_departure[0] cr_pref_departure[1] |
| |||||||||||
Класс обслуживания | cr_class[0] cr_class[1] |
| |||||||||||
Окружные аэропорты (±XX км) | cr_district_airport[0] cr_district_airport[1] |
true |
Пассажиры
Элемент | Переменная | Допустимые значения | ||
---|---|---|---|---|
Взрослых от 12 лет | adults |
| ||
Детей от 2 до 12 лет | children |
| ||
Младенцев до 2 лет | infants |
| ||
Младенцев с местом до 2 лет | infants_seat |
| ||
Молодых от 12 до 24 лет |
youths |
| ||
Пожилых от 65 лет | seniors |
|
Примеры FastSearch запросов
В одну сторону (простой)
Рейс в одну сторону из Москвы в Париж, дата вылета: 25.10.2013, без пересадок, 1 взрослый
- форма поиска
http://SITEMANE/?trip_type=OW&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &direct=true&adults=2¶m_by_get=on
- процесс поиска
http://SITEMANE/?trip_type=OW&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &direct=true&adults=2¶m_by_get=on&fast_search=on
В одну сторону (с фильтрами по авиакомпаниям)
Рейс в одну сторону из Москвы в Париж, дата вылета 25.10.2013, Пассажиры: пожилых - 2, Авиакомпании: Аэрофлот - Российские авиалинии, Международные Авиалинии Украины
- форма поиска
http://SITEMANE/?trip_type=OW&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &seniors=2&input_vendors=SU,PS¶m_by_get=on
- процесс поиска
http://SITEMANE/?trip_type=OW&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &seniors=2&input_vendors=SU,PS¶m_by_get=on&fast_search=on
Туда-обратно
Рейсы туда-обратно Москва ↔ Париж, дата вылета: 25.10.2013, обратно: 27.10.2013, класс перелета: Эконом, Пассажиры: взрослых - 2 младенцев - 1
- форма поиска
http://SITEMANE/?trip_type=RT&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &back_departure_date=27.10.2013&class=econom&adults=2&infants=1¶m_by_get=on
- процесс поиска
http://SITEMANE/?trip_type=RT&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &back_departure_date=27.10.2013&class=econom&adults=2&infants=1¶m_by_get=on&fast_search=on
Сложный маршрут
из Москвы в Париж, дата вылета 25.10.2013,
из Парижа в Санкт-Петербург, дата вылета 26.10.2013,
из Санкт-Петербурга в Москву, дата вылета 29.10.2013,
1 взрослый
- форма поиска
http://SITEMANE/?trip_type=CR &cr_iata[0]=MOW&cr_back_iata[0]=PAR&cr_date[0]=25.10.2013 &cr_iata[1]=PAR&cr_back_iata[1]=LED&cr_date[1]=26.10.2013 &cr_iata[2]=LED&cr_back_iata[2]=MOW&cr_date[2]=29.10.2013 &adults=1¶m_by_get=on
- процесс поиска
http://SITEMANE/?trip_type=CR &cr_iata[0]=MOW&cr_back_iata[0]=PAR&cr_date[0]=25.10.2013 &cr_iata[1]=PAR&cr_back_iata[1]=LED&cr_date[1]=26.10.2013 &cr_iata[2]=LED&cr_back_iata[2]=MOW&cr_date[2]=29.10.2013 &adults=1¶m_by_get=on&fast_search=on
Взаимодействие FastSearch и Метрики
Для того, чтобы переход был зарегистрирован системой как переход с определенного источника, необходимо передать в запросе дополнительный параметр utm_source (Metrics Session ID). Например:
http://SITEMANE/?(some_parameters=vals&)utm_source=source_alias
где source_alias - алиас источника переходов. Дополнительная информация по использованию модуля Метрики.
Пример FastSearch запроса с параметром для модуля Метрики
FastSearch (с учетом источника перехода для модуля Метрики)
Рейс в одну сторону из Москвы в Париж, дата вылета: 25.10.2013, без пересадок, 1 взрослый (с учетом источника перехода для модуля Метрики).
- форма поиска
http://SITEMANE/?trip_type=OW&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &direct=true&adults=2¶m_by_get=on&utm_source=source_alias
- процесс поиска
http://SITEMANE/?trip_type=OW&out_iata=MOW&in_iata=PAR&departure_date=25.10.2013 &direct=true&adults=2¶m_by_get=on&fast_search=on&utm_source=source_alias
Проверка в сторонней системе возможности тикетинга
При выписки билета через стороннюю систему 1С, отправляется запрос "GetDebtCounterparty", который спрашивает, можно ли с счета в 1С списать средства для оплаты. В ответе содержится заключение от 1С, в случае если ошибок нет, в ответе будет
<m:Opportunity>Да</m:Opportunity>
Пример запроса "GetDebtCounterparty"
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Body> <ns1:GetDebtCounterparty> <ns1:ExternalUserId>00000001</ns1:ExternalUserId> <ns1:ExternalPaymentId>00000001</ns1:ExternalPaymentId> <ns1:BaseFare>2490</ns1:BaseFare> <ns1:Tax>643</ns1:Tax> <ns1:ValVendorCommission>49.8</ns1:ValVendorCommission> <ns1:Locator>0X97T6</ns1:Locator> <ns1:Discount>0</ns1:Discount> <ns1:Charge>0</ns1:Charge> <ns1:Sum>3133</ns1:Sum> <ns1:TotalPrice>3658.1</ns1:TotalPrice> <ns1:GDSCurrency>RUB</ns1:GDSCurrency> <ns1:OrderCurrency>RUB</ns1:OrderCurrency> <ns1:OrderCurrencyRate>1</ns1:OrderCurrencyRate> <ns1:beginDate>2014-08-30T11:05:00</ns1:beginDate> </ns1:GetDebtCounterparty> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Пример ответа "GetDebtCounterparty"
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <m:GetDebtCounterpartyResponse xmlns:m="http://DOMEN_NAME/avia"> <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="m:AnswerDebt"> <m:Opportunity>Да</m:Opportunity> <m:Message1/> </m:return> </m:GetDebtCounterpartyResponse> </soap:Body> </soap:Envelope>
Загрузка счетов из сторонней системы
При взаимодействии с веб-сервисом 1С, на этапе бронирования отправляется запрос, на создание аккаунта 1С, содержащий в себе данные счета. В системе логирования этот запрос можно найти под именем «[GDS] Запрос "NewAccount"» и ответ «[GDS] Ответ "NewAccount"»
Пример запроса
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://DOMEN_NAME" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns1:NewAccount> <ns1:Input> <ns1:CompanyID>0001</ns1:CompanyID> <ns1:ID>123321</ns1:ID> <ns1:ExternalUserId>00123321</ns1:ExternalUserId> <ns1:Locator>11KW22</ns1:Locator> <ns1:ExternalPaymentId>0</ns1:ExternalPaymentId> <ns1:Tickets> <ns1:IATAValidator>92222616</ns1:IATAValidator> <ns1:ValVendor>UT</ns1:ValVendor> <ns1:GDSCurrency>RUB</ns1:GDSCurrency> <ns1:OrderCurrency>RUB</ns1:OrderCurrency> <ns1:OrderCurrencyRate>1</ns1:OrderCurrencyRate> <ns1:BaseFare>8990</ns1:BaseFare> <ns1:Tax> <ns1:Code>YQ</ns1:Code> <ns1:Amount>975</ns1:Amount> </ns1:Tax> <ns1:Tax> <ns1:Code>YR</ns1:Code> <ns1:Amount>75</ns1:Amount> </ns1:Tax> <ns1:Segment> <ns1:StartDate>2015-02-17T20:20:00</ns1:StartDate> <ns1:StartAirportCode>VKO</ns1:StartAirportCode> <ns1:EndAirportCode>SGC</ns1:EndAirportCode> <ns1:CompanyCode>UT</ns1:CompanyCode> <ns1:Tariffs>OSSOW</ns1:Tariffs> <ns1:FlightNumber>295</ns1:FlightNumber> <ns1:StopOver>O</ns1:StopOver> <ns1:ClassTypeCode>O</ns1:ClassTypeCode> </ns1:Segment> <ns1:FullName>PASSANGER NAME</ns1:FullName> </ns1:Tickets> <ns1:Options> <ns1:Name>Service</ns1:Name> <ns1:StringValue>GALILEO</ns1:StringValue> <ns1:NumericValue xsi:nil="true"/> <ns1:DateValue xsi:nil="true"/> </ns1:Options> <ns1:Options> <ns1:Name>AAA</ns1:Name> <ns1:StringValue>000A</ns1:StringValue> <ns1:NumericValue xsi:nil="true"/> <ns1:DateValue xsi:nil="true"/> </ns1:Options> <ns1:Options> <ns1:Name>Checkbox</ns1:Name> <ns1:StringValue>YES</ns1:StringValue> <ns1:NumericValue xsi:nil="true"/> <ns1:DateValue xsi:nil="true"/> </ns1:Options> </ns1:Input> </ns1:NewAccount> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Пример ответа
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <m:NewAccountResponse xmlns:m="http://DOMEN_NAME"> <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="m:outInvoice"> <m:NoDoc>00015365</m:NoDoc> <m:DateInvoice>2015-02-04T00:00:00</m:DateInvoice> <m:ExternalUserId>00017483</m:ExternalUserId> <m:TicketsSum> <m:Price>10040</m:Price> <m:Discount>0</m:Discount> <m:Charge>0</m:Charge> <m:Sum>10040</m:Sum> </m:TicketsSum> </m:return> </m:NewAccountResponse> </soap:Body> </soap:Envelope>