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

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


С 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, приведен в Справочном центре. Рекомендуем размещать кнопку Сохранить в 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 для каждого класса и объекта. Посмотреть все классы в аккаунте отдельного продавца можно с помощью метода list для FlightClass. Чтобы посмотреть все объекты определенного класса, вызовите метод list для FlightObject.

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

Если время, заданное значением 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 вы указываете код аэропорта в соответствии с системой ИКАО, а не ИАТА.

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

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

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

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

  FlightClass A (SFO – LAX: авиакомпания, номер рейса, время отправления) FlightClass 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
              }
            }
    }
  }
  …
  …
  …
}