Параметры запроса#
Детальное описание всех параметров для запроса /avia/pnr_retrieve.
Обязательные параметры#
| Параметр | Тип | Описание |
|---|---|---|
bookingId | guid | Идентификатор бронирования из /avia/pnr_create (формат UUID) |
Примеры запросов#
Минимальный запрос#
1curl -X POST https://test.travel-api.ru/avia/pnr_retrieve \
2 -H "Authorization: Bearer YOUR_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bookingId": "019a0c82-5d2b-7a5e-84fe-56357a57df66"
6 }' 1var request = new PnrRetrieveRequest
2{
3 BookingId = "019a0c82-5d2b-7a5e-84fe-56357a57df66"
4};
5
6var response = await httpClient.PostAsJsonAsync(
7 "https://test.travel-api.ru/avia/pnr_retrieve",
8 request
9);
10
11var result = await response.Content.ReadFromJsonAsync<PnrRetrieveResponse>();Когда использовать#
После создания бронирования#
Сразу после создания бронирования получите полные детали:
1{
2 "bookingId": "019a0c82-5d2b-7a5e-84fe-56357a57df66"
3}Отображение деталей пользователю#
Когда пользователь запрашивает детали своего бронирования:
1var bookingId = "019a0c82-5d2b-7a5e-84fe-56357a57df66";
2var booking = await RetrieveBooking(bookingId);
3
4DisplayBookingDetails(booking);Проверка статуса#
Периодически проверяйте статус бронирования:
1var booking = await RetrieveBooking(bookingId);
2
3if (booking.Pnr.Cancelled)
4{
5 Console.WriteLine("Бронирование отменено");
6}
7else if (booking.Pnr.Tickets.Any())
8{
9 Console.WriteLine("Билеты выписаны");
10}
11else
12{
13 Console.WriteLine("Ожидает оплаты");
14}Перед модификацией#
Перед любой модификацией бронирования получите актуальные данные:
1// Получаем актуальное состояние
2var booking = await RetrieveBooking(bookingId);
3
4// Проверяем возможность модификации
5if (!booking.Pnr.Cancelled && !booking.Pnr.Tickets.Any())
6{
7 // Можно модифицировать
8}Типичные сценарии#
Сценарий 1: Отображение бронирования#
- Пользователь запрашивает детали бронирования
- Отправляете запрос с
bookingId - Получаете полную информацию
- Отображаете пользователю: маршрут, пассажиры, цену, статус
sequenceDiagram
participant User
participant Client
participant API
participant GDS
User->>Client: Показать детали бронирования
Client->>API: POST /avia/pnr_retrieve<br/>{bookingId}
API->>GDS: Получить PNR
GDS-->>API: PNR данные
API-->>Client: Полная информация
Client->>User: Отобразить:<br/>- PNR локатор<br/>- Маршрут<br/>- Пассажиры<br/>- Цена<br/>- Статус
Сценарий 2: Проверка перед выпиской#
- Пользователь готов оплатить
- Получаете актуальные детали бронирования
- Проверяете, что бронирование не отменено
- Проверяете срок действия (
timeLimit) - Выписываете билет
sequenceDiagram
participant User
participant Client
participant API
participant GDS
User->>Client: Готов оплатить
Client->>API: POST /avia/pnr_retrieve<br/>{bookingId}
API->>GDS: Получить PNR
GDS-->>API: PNR данные
API-->>Client: Детали бронирования
Client->>Client: Проверить статус
alt Бронирование активно
Client->>Client: Проверить timeLimit
alt Срок не истек
Client->>API: POST /avia/ticket_issue<br/>{bookingId, payment}
API->>GDS: Выписать билеты
GDS-->>API: Билеты выписаны
API-->>Client: ticketDocuments[]
Client->>User: Билеты выписаны
else Срок истек
Client->>User: Бронирование истекло,<br/>нужно создать новое
end
else Бронирование отменено
Client->>User: Бронирование отменено
end
Сценарий 3: Мониторинг бронирований#
- Периодически запрашиваете список активных бронирований
- Для каждого получаете актуальный статус
- Обрабатываете истекшие или отмененные
sequenceDiagram
participant Scheduler
participant Client
participant API
participant GDS
participant Database
loop Каждые 30 минут
Scheduler->>Database: Получить активные бронирования
Database-->>Scheduler: bookingIds[]
loop Для каждого bookingId
Scheduler->>API: POST /avia/pnr_retrieve<br/>{bookingId}
API->>GDS: Получить PNR
GDS-->>API: PNR данные
API-->>Scheduler: Статус бронирования
alt Бронирование отменено
Scheduler->>Database: Обновить статус: CANCELLED
Scheduler->>Scheduler: Отправить уведомление
else Срок истек
Scheduler->>API: POST /avia/pnr_cancel<br/>{bookingId}
Scheduler->>Database: Обновить статус: EXPIRED
else Билеты выписаны
Scheduler->>Database: Обновить статус: TICKETED
end
end
end
Рекомендации#
Кеширование#
Не кешируйте результаты надолго — бронирование может измениться:
- Статус может стать
cancelled - Билеты могут быть выписаны
- Срок действия может истечь
Рекомендуемое время кеширования: 1-2 минуты.
Обработка ошибок#
1try
2{
3 var booking = await RetrieveBooking(bookingId);
4
5 if (booking.Pnr.Cancelled)
6 {
7 return ShowError("Бронирование отменено");
8 }
9
10 return ShowBooking(booking);
11}
12catch (ApiException ex) when (ex.Code == "BOOKING_NOT_FOUND")
13{
14 return ShowError("Бронирование не найдено");
15}
16catch (ApiException ex) when (ex.Code == "ACCESS_DENIED")
17{
18 return ShowError("Нет доступа к бронированию");
19}Проверка срока действия#
1var booking = await RetrieveBooking(bookingId);
2var fareInfo = booking.Pnr.FareInfo.Fares[0];
3
4// Проверяем срок оплаты (если есть в данных)
5// Обычно timeLimit находится в данных создания бронирования
6// или определяется правилами авиакомпанииОтображение информации#
Показывайте пользователю ключевую информацию:
- Номер бронирования (PNR locator)
- Маршрут полета
- Данные пассажиров
- Общую стоимость
- Статус (забронировано, выписано, отменено)
- Номера билетов (если выписаны)
1Console.WriteLine($"PNR: {booking.Pnr.PnrLocator}");
2Console.WriteLine($"Статус: {GetBookingStatus(booking)}");
3Console.WriteLine($"Маршрут: {GetItineraryDescription(booking.Pnr.Itinerary)}");
4Console.WriteLine($"Пассажиры: {booking.Pnr.Passengers.Count}");
5Console.WriteLine($"Сумма: {booking.Pnr.FareInfo.Fares[0].Price.Total.Value} {booking.Pnr.FareInfo.Fares[0].Price.Total.CurrencyCode}");
6
7if (booking.Pnr.Tickets.Any())
8{
9 Console.WriteLine("Билеты:");
10 foreach (var ticket in booking.Pnr.Tickets)
11 {
12 Console.WriteLine($" {ticket.Number}");
13 }
14}