Skip to content
This repository was archived by the owner on Nov 18, 2022. It is now read-only.
Eugene Gorbov edited this page Dec 26, 2019 · 18 revisions

Краткий экскурс по подключению к JSON-API.
Рабочий пример представленного кода: http://sample.demo.webservices.travel/ (временно не доступен)

Тестовый Субагентский блок: http://agent.demo.webservices.travel/
Тестовый Travel Office: http://office.demo.webservices.travel/

Тестовые ключи:

  • FF596A1C-6C8F-4FF9-A19F-1EFA70ABEEDC
    (Тип авторизации: Site)
  • 33838ADC-17B9-4A7D-931F-E29E1A395453
    (Тип авторизации: Application, Password: Km7jy4G7cYbf0rAgVVWitpPJk7LdMF)

WS TEST: http://ws.demo.webservices.travel/

PS. На сайте: http://json.parser.online.fr можно раскодировать JSON и посмотреть массив.

Авторизация

{
    // Тип авторизации: Site, Application
    "Type":"Site",
    
    // Принадлежность компании: Agent — Субагент, Corporate — Корпорат
    "System":"Agent",
    
    // Ключ авторизации
    "Key":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    
    // IP-адрес конечного пользователя. Используется для установки лимита кол-ва запросов в День/Час/Минуту/Секунду
    "UserIP":"127.0.0.1",
    
    // Уникальный идентификатор пользователя в системе Субагента. Может быть произвольным значением. Не обязательно к заполнению
    "UserUUID":"",
    
    // UTM-метки для учета в статистике
    "UTM_Source":"",
    "UTM_Medium":"",
    "UTM_Campaign":"",
    "UTM_Term":"",
    "UTM_Content":""
}

Параметры

{
	// Показатель компрессии: «» или «GZip»
	"Compress":"",
	
	// Формат группировки:
	// Combined — комбинированный,
	// FilteredCombined — отфильтрованный (от дубликатов) и скомбинированный,
	// FilteredCombinedByPriority — отфильтрованный (от дубликатов на основе правил приоритетов) и скомбинированный
	"Format":"Combined",
	
	// Сортировка результатов поиска
	// Deposit — по стоимости оплаты с Депозита,
	// CreditCard — по стоимости оплаты Кредитной Картой
	"Sort": "Deposit",
	
	// Флаг запроса из МетаПоиска
	"MetaSearch":"NO",
	
	// Перегруппировка результатов поиска
	// Календарь: Simple — вернет по одной комбинации на каждую дату,
	// Extended — вернет все найденные комбинации на каждую дату
	"ReGroup":"",
	
	// Флаг возврата ответа:
	// First — сразу как получен один из вариантов (не тестировался),
	// ByTimelimit — по окончанию поиска, но не более чем значение Timelimit
	"Return":"ByTimelimit",
	
	// Language (в разработке)
	"Language":"RU",
	
	// Валюта результатов
	"Currency":["RUB"],
	
	// Время ожидания ответа. Рекомендуемое значение — 120
	"Timelimit":120,
	
	// ID тарифного плана
	"Tariff":1001,
	
	// Временно не используется
	"StopIntervalMin":3,
	"StopIntervalMax":3,
	
	// Кол-во возвращаемых рекомендаций при поиске
	"ReturnOffset":0,
	"ReturnLimit":50,
	
	// Скидка не используется т.к. авиакомпании запрещают
	"TariffDiscount":0,
	"TariffDiscountCurrency":"RUB",
	
	// Сервисный сбор
	// Сумма сбор, Валюта сбора (RUB, EUR, USD... PRS—%), Применение сбора (Traveller,TravellerSegment,Total)
	"TariffService":100,
	"TariffServiceCurrency":"RUB",
	"TariffServiceParams":"Traveller",

	// Список запрашиваемых перевозчиков (имеет приоритет перед «ExcludeAirlines»)
	"ValidAirlines":"SU,U6",
	// Доступные значения:
	// Mix — список «ValidAirlines» будет объединен с общими настройками списка перевозчиков
	// Only — только список «ValidAirlines» будет использован
	"ValidAirlinesLogic":"Only",

	// Список перевозчиков, исключенных из выдачи
	"ExcludeAirlines":"SU,U6",
	// Доступные значения:
	// Mix — список «ExcludeAirlines» будет объединен с общими настройками исключения
	// Only — только список «ExcludeAirlines» будет использован
	"ExcludeAirlinesLogic":"Only"
}

Структура запроса:

{
    // Статично
    "jsonrpc":"2.0",
    
    // Любой желаемый цифровой ID запроса вашей системы... мы его не учитываем никаким образом... можно оставить "1"
    "id":1,
    
    // Запрашиваемый метод
    "method":"Ping",
    
    "params":[
        // Авторизационная запись
        {"Type":"Site","System":"Agent","Key":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX","UserIP":"127.0.0.1","UserUUID":""},
        
        // Центральная часть запроса
        {"Test":"OK!"},
        
        // Дополнительные параметры запроса
        {"Compress":"","Format":"Combined","Return":"ByTimelimit","Language":"RU","Currency":["RUB"],"Timelimit":120}
    ]
}

Пример PING-запроса:

POST http://ws.demo.webservices.aero/ HTTP/1.1
Host: ws.demo.webservices.aero
Accept: */*
Connection: Keep-Alive
Content-Length: 291
Content-Type: application/x-www-form-urlencoded

{"jsonrpc":"2.0","id":1,"method":"Ping","params":[{"Type":"Site","System":"Agent","Key":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX","UserIP":"127.0.0.1","UserUUID":""},{"Test":"OK!"},{"Compress":"","Format":"Combined","Return":"ByTimelimit","Language":"RU","Currency":["RUB"],"Timelimit":120}]}

Стандартная последовательность запросов:

1. AviaSearch

Поиск авиабилетов. (Подробнее...)

POST http://ws.demo.webservices.aero/ HTTP/1.1
Host: ws.demo.webservices.aero
Accept: */*
Connection: Keep-Alive
Content-Length: 502
Content-Type: application/x-www-form-urlencoded

{"jsonrpc":"2.0","id":1,"method":"AviaSearch","params":[{"Type":"Site","System":"Agent","Key":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX","UserIP":"127.0.0.1","UserUUID":""},{"Routes":[{"Departure":"MOW","Arrival":"LED","Date":"2013-03-15"},{"Departure":"LED","Arrival":"MOW","Date":"2013-03-20"}],"Logic":"Default","Class":"Econom","Travellers":{"ADT":1,"CHD":0,"INF":0}},{"Compress":"","Format":"Combined","Return":"ByTimelimit","Language":"RU","Currency":["RUB","USD","EUR"],"TimeLimit":120}]}

AviaSearch

2. AviaInformation

Получение BookID бронирования и всей необходимой информации для рендера окна ввода данных на пассажиров.

Центральная часть запроса:

{
	// ID результатов поиска
    "RequestID":"52a5bf68af632ced0d000013",
    
    // ID вариантов перелета
    "Variants":[
        "53549E96-256E-417B-BC3B-EC105FB9E937",
        "876B600E-A2E8-4FD3-A131-44AA27FCE284"
    ]
}

AviaInformation

3. AviaBook

Получение PNR.

Центральная часть запроса:

{
    "BookID":"5292d908af632c632b00000d",
    "Travellers":{
        "ADT":[
            {
                "Sex":"Male",
                "Surname":"IVANOV",
                "Name":"IVAN",
                "Patronymic":"IVANOVICH",
                "Birthday":{
                    "Day":"20",
                    "Month":"6",
                    "Year":"1983"
                },
                "Citizen":"RU",
                "Document":{
                    "Number":"4505917654",
                    "Country" : "RU",
                    "ExpireDate":{
                        "Day":"20",
                        "Month":"6",
                        "Year":"2028"
                    }
                },
                "Bonus":{
                    "Company":"PS",
                    "Number":"123456"
                }
            }
        ]
    },
    "Contacts":{
        "PhoneMobile":"+7 (495) 762-1684",
        "PhoneHome":"84957621684",
        "Email":"eg@edgroup.ru"
    }
}

4. AviaCheck

Проверка статуса PNR.

Центральная часть запроса:

{
    "PNR":"296KKV",
    "Surname":"IVANOV"
}

AviaCheck

5. PaymentAction

Получение URL для переадресации пользователя в плат.шлюз.

Центральная часть запроса:

{
    "ID":"2825-2883",
    "Gate":"CreditCard",
    "ReturnSuccess":"http://testsite.ru/avia/check.html?pnr=296KKV&surname=IVANOV&PayStatus=Success",
    "ReturnFailure":"http://testsite.ru/avia/check.html?pnr=296KKV&surname=IVANOV&PayStatus=Failure",
    "ReturnPending":"http://testsite.ru/avia/check.html?pnr=296KKV&surname=IVANOV&PayStatus=Pending"
}

6. AviaCancel

Отмена бронирования.

Центральная часть запроса:

{
    "PNR":"296KKV",
    "Surname":"IVANOV"
}

Clone this wiki locally