Примеры использования

Чтобы посмотреть примеры использования, выберите категорию.


С Google Pay API for Passes вы можете использовать посадочные талоны для взаимодействия с пользователями. Из этого руководства вы узнаете, как работают сохраненные посадочные талоны.

Чтобы внедрить возможность добавлять посадочные талоны, используйте метод запроса POST с JWT или "информативные" ссылки JWT. В этих случаях классы и объекты добавляются заранее.

Классы FlightClass и объекты FlightObject

Как и в случае с другими категориями карт в Google Pay API for Passes, информация о посадочных талонах сохраняется в двух структурах данных: FlightObject и FlightClass. В этом руководстве описано, как можно настроить их для посадочных талонов.

FlightClass

FlightClass содержит данные, которыми обладают все пассажиры рейса или их группы в определенный момент времени. Например, к общим данным относится перевозчик, пункты отправления и назначения, номер рейса и время вылета. У всех пассажиров рейса эти данные в посадочном талоне будут совпадать.

FlightClass может также содержать общие данные определенной группы пассажиров одного рейса. Например, можно создать три разных структуры FlightClass для первого класса, бизнес-класса и экономкласса. В результате для каждой группы будут доступны разные поля. При этом три класса все равно будут содержать общую информацию о рейсе, маршруте и дате вылета.

FlightObject

Объект FlightObject содержит информацию об определенном пассажире самолета в конкретный момент времени. Например, в объекте FlightObject указано имя пассажира, номер места и штрихкод для посадки. Эти данные индивидуальны для каждого посадочного талона.

Информация, содержащаяся в FlightObject, сохраняется в приложении Google Pay у пользователя.

Поддерживаемые страны

Список стран, в которых поддерживаются посадочные талоны на авиарейсы, приведен здесь. Рекомендуем размещать кнопку Сохранить в Google Pay только на странице покупки билета.

Примеры использования

В этом разделе описаны примеры использования, применимые только к посадочным талонам на самолет.

.

Обновление информации в посадочных талонах

Иногда информация, указанная в посадочном талоне, может меняться после его сохранения. Обновить эти сведения для пользователей можно с помощью REST API. Если изменения затрагивают только класс талона, можно также использовать Google Pay Merchant Center. Обновление информации в посадочном талоне – один из важных аспектов взаимодействия с клиентом.

Чтобы обновить данные всех посадочных талонов конкретного рейса (например, запланированное время вылета), необходимо только изменить с помощью метода update или patch класс FlightClass или использовать Google Pay Merchant Center. Google перенесет изменения во все объекты FlightObject, связанные с обновленным FlightClass. Это относится ко всем полям, определенным на уровне FlightClass.

Чтобы обновить отдельный посадочный талон (например, указать другой номер места), нужно изменить с помощью метода update или patch только один объект FlightObject. Это относится ко всем полям, определенным на уровне FlightObject.

Кроме того, не всегда получается предугадать, когда произойдут изменения или когда придется отправить запрос update или patch. В этом случае стоит периодически выполнять запросы update или patch для каждого класса и объекта. Просмотреть все классы в аккаунте отдельного продавца можно с помощью метода FlightClass list. Чтобы посмотреть все объекты определенного класса, вызовите метод FlightObject list.

Из каких источников поступают новые данные о рейсе

Если время, заданное значением class.localScheduledDepartureDateTime, приходится на сутки перед исправлением или на двое суток после него, пользователи увидят уведомление о статусе рейса. В этом случае в Google Pay будут показываться сведения, указанные или в сервисе Google Авиабилеты, или на посадочном талоне. Выбор источника зависит от следующих условий:

  • Информация из Google Авиабилетов используется, если не задано значение class.localEstimatedOrActualDepartureDateTime. Значение class.flightStatus при этом не учитывается.

    Например, если рейс задерживается, то на главной странице Google Pay будет отображаться новое время вылета. Ознакомиться с этой информацией также можно на вкладке "Карты".

  • Если вы указали значение class.localEstimatedOrActualDepartureDateTime, но опустили значение class.flightStatus, то информация о задержке рейса будет определена исходя из указанного вами времени. Статус рейса при этом указывается в соответствии со следующими условиями:
    • Если class.localEstimatedOrActualDepartureDateTime позже class.localScheduledDepartureDateTime, пользователи увидят уведомление о задержке рейса.
    • Если class.localEstimatedOrActualDepartureDateTime не позже class.localScheduledDepartureDateTime, уведомление об изменении статуса не появится. Вместо него будет отображаться информация о рейсе.

Если вы не хотите, чтобы сервис "Google Авиабилеты" использовался в качестве источника информации о рейсах, необходимо задать значения flightStatus, localScheduledDepartureDateTime и localEstimatedOrActualDepartureDateTime для FlightClass. Тогда будут отображаться только сведения, указанные вами. Также информация в этом сервисе не учитывается, если для FlightClass вы указываете код аэропорта в соответствии с системой ICAO, а не IATA.

При любых изменениях пользователи получают push-уведомления. Подробнее об этом рассказывается в разделе Уведомления об изменении информации о рейсе.

Сохранение полета с пересадками

Часто авиаперелет состоит из множества пересадок. Для таких перелетов авиакомпании предоставляют несколько посадочных талонов (по одному для каждой пересадки). В инструменте Google Pay API for Passes действует тот же принцип: один FlightObject на каждую пересадку.

Например, для двух пассажиров, летящих из Сан-Франциско в Тайвань с пересадкой в Лос-Анджелесе, нужны две структуры FlightClass и четыре объекта FlightObject.

  FlightClassFlightClass A (SFO – LAX: авиакомпания, номер рейса, время отправления) FlightClassFlightClass B (LAX – TPE: авиакомпания, номер рейса, время отправления)
Пассажир Q FlightObject: id_01 FlightObject: id_02
Пассажир Z FlightObject: id_03 FlightObject: id_04

Эти поля соответствуют физическим посадочным талонам. У пассажиров Q и Z было бы по два бумажных посадочных талона.

Создание кнопки для сохранения нескольких посадочных талонов

Чтобы пользователи могли сохранить в приложении сразу несколько посадочных талонов, можно добавить ссылку или кнопку Сохранить в Google Pay. Это можно сделать с помощью веб-токена JSON (JWT).

Веб-токен JWT должен быть представлен в одном из двух форматов:

  • с использованием заранее добавленных вами классов и объектов;
  • с использованием только ресурсов классов и объектов, которые полностью определены веб-токеном JWT.

Посмотреть, как создать кнопку для сохранения нескольких талонов, можно в этой статье.

Подробнее о работе над элементами интерфейса, связанными с посадочными талонами, написано здесь.

Группировка нескольких посадочных талонов

Некоторые функции работают по-разному в зависимости от того, применяются ли они к группе или к отдельным объектам. Например, дополнительная настройка требуется для уведомлений о статусе и для упорядочивания нескольких сохраненных билетов в пользовательском интерфейсе.

Объекты FlightObject считаются группой, только когда у них совпадают все перечисленные ниже свойства.

  • Идентификатор Issuer ID (из сервиса Google Pay API for Passes Merchant Center)
  • class.flightHeader.carrier.carrierIataCode
  • class.flightHeader.flightNumber
  • class.localScheduledDepartureDateTime
  • object.reservationInfo.confirmationCode

Если два объекта FlightObject отличаются друг от друга по какому-либо из этих свойств, они не считаются группой.

Настройка уведомлений о ближайших рейсах

Google Pay может отправить уведомление пользователю за три часа до перелета. Время перелета определяется значением class.localScheduledDepartureDateTime.

Чтобы получать такие уведомления, пользователю необходимо зайти в раздел Настройки > Уведомления и нажать Включить уведомления о картах и билетах.

Уведомления будут показываться на панели уведомлений и на заблокированном экране (если пользователь разрешил это).

Все уведомления имеют следующий формат, изменить который нельзя:

Boarding pass for your flight to class.destination.airportIataCode
Expand for more options

Если нажать на такое уведомление, устройство будет разблокировано, откроется приложение Google Pay и на экране появится посадочный талон.

Если у пользователя сохранены посадочные талоны на разные рейсы, то откроется талон на ближайший. Если несколько сохраненных талонов объединены в группу, как описано в разделе Группировка нескольких посадочных талонов, то после нажатия на уведомление появится только один из них. Чтобы увидеть другие талоны, нужно провести по экрану влево или вправо.

Уведомление исчезнет автоматически, но не сразу после открытия, а через 60 минут после времени, указанного в class.localScheduledDepartureDateTime.

Уведомления об изменении информации о рейсе

Если у пользователя сохранен хотя бы один посадочный талон, он может получать push-уведомления об изменении информации о рейсе. Они приходят, если соблюдаются определенные условия.

Терминал и выход на посадку

Если вы измените значение в поле class.origin.terminal или class.origin.gate, то пользователь получит уведомление об этом при соблюдении следующего условия:

  • Осталось меньше трех часов до запланированного времени вылета class.localScheduledDepartureDateTime.

Уведомление будет выглядеть следующим образом: "Выход на посадку на рейс авиакомпании "Sample Airlines" поменялся на A1". Изменить этот формат нельзя.

Время посадки и время вылета

Если вы изменили значение в поле class.localBoardingDateTime или class.localEstimatedOrActualDepartureDateTime, то пользователь получит уведомление об этом при соблюдении следующих условий:

  • Осталось меньше 24 часов до запланированного времени вылета class.localScheduledDepartureDateTime.
  • Время посадки меняется на 10 или более минут.

Уведомление будет выглядеть следующим образом: "Авиакомпания "Sample Airlines" изменила время посадки на ваш рейс. Новое время: 18:00". Изменить этот формат нельзя.

Действия с посадочными талонами с истекшим сроком действия

На вкладке "Карты" в приложении Google Pay есть раздел "Проездные с истекшим сроком действия". В нем собраны билеты и предложения разных типов, которые были помещены в архив или стали неактивны. Посадочные талоны перемещаются в этот раздел, если верно хотя бы одно из следующих условий:

  • Прошло более 24 часов с момента истечения срока, указанного в параметре class.localScheduledDepartureDateTime или class.localEstimatedOrActualDepartureDateTime. Посадочный талон перемещается в раздел "Проездные с истекшим сроком действия" в течение 24—48 часов с момента истечения срока, указанного в class.localScheduledDepartureDateTime или class.localEstimatedOrActualDepartureDateTime.
  • Истек срок, указанный в параметре object.validTimeInterval.end.date. Посадочный талон перемещается в раздел "Проездные с истекшим сроком действия" в течение 24 часов после даты object.validTimeInterval.end.date.
  • В поле object.state указано одно из следующих значений: Expired, Inactive или Completed.

Чтобы создать ссылку на сохраненный посадочный талон, нужно добавить в нее идентификатор objectId.

Используйте следующий шаблон:

https://pay.google.com/gp/v/object/{<issuerId>}.{<ObjectId>}

Талон можно будет открыть в приложении Google Pay и в браузере.

Ссылка на ваш сайт или приложение будет отображаться в Google Pay непосредственно под названием карты, к которой она относится. Эта функция доступна для всех типов карт и билетов Google Pay.

Как запросить доступ

Запросить доступ к функции можно через эту форму. При этом следует помнить следующее:

  • В форме вам нужно указать ваш идентификатор эмитента.
  • В поле Issue type (Тип проблемы) следует выбрать вариант Technical/API Integration (Технические проблемы/Интеграция с API).
  • Далее выберите Link your app or website below the Google Pay pass (Ссылка на сайт или приложение под картой Google Pay).

URI приложения или сайта указывается в поле appLinkData для нужной карты Google Pay. URI можно указывать в любом формате, но мы рекомендуем использовать динамическую ссылку.

Формат и контекст поля appLinkData описывается в следующем примере кода:

{
  "id": string,
  "classId": string,
  …
  …
  …
  "appLinkData": {
    "androidAppLinkInfo": {
      "appLogoImage": {
        "sourceUri": {
          "uri": string
        }
      },
        "title": {
          "defaultValue": {
            "language": string,
              "value": string
          }
        },
          "description": {
            "defaultValue": {
              "language": string,
                "value": string
            }
          },
            "appTarget": {
              "targetUri": {
                "uri": string,
                  "description": string
              }
            }
    }
  }
  …
  …
  …
}