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

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


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

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

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

.

Обновление информации в билетах

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

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

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

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

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

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

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

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

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

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

Группировка билетов на мероприятия

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

Условия, при которых объекты EventTicketObject считаются группой, зависят от того, определено ли свойство class.eventID.

Группировка с использованием свойства class.eventId

Свойство class.eventId позволяет группировать билеты независимо от остальных их свойств. Например, два объекта EventTicketObject со свойством class.eventId = "foo" будут входить в одну группу, даже если у них разные значения class.eventName и class.dateTime.start.

Чтобы объекты считались группой, когда используется class.eventID, достаточно, чтобы у них совпадали следующие свойства:

  • Идентификатор Issuer ID (из Google Pay API for Passes Merchant Center)
  • class.eventId

Группировка без использования свойства class.eventId

Если для объектов EventTicketObject не задано свойство class.eventId, они считаются группой, только если у них совпадают все перечисленные ниже свойства.

  • Идентификатор Issuer ID (из Google Pay API for Passes Merchant Center)
  • class.eventName
  • class.dateTime.start

Настройка уведомлений о предстоящих мероприятиях

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

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

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

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

class.eventName
Expand for more options

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

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

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

Связанные предложения

Связанные предложения отображаются при просмотре билета на мероприятие. Таким образом пользователи быстрее находят контент, который может их заинтересовать. В linkedOfferIds для объекта EventTicketObject указывается список идентификаторов специальных предложений, связанных с билетом на мероприятие.

Подготовка специальных предложений

Чтобы добавить связанное предложение, нужно заранее создать классы и объекты, связанные с билетом на мероприятие. Подробная информация о создании специальных предложений доступна в разделе Специальные предложения. Пользователям не нужно явным образом сохранять связанные предложения. Свойство id в объекте OfferObject указывает на объект EventTicketObject.

Существующие специальные предложения можно связать с билетом на мероприятие, используя вызовы REST API: insert, update, patch или modifyLinkedOfferObjects.

Если вы связываете предложения с создаваемым билетом на мероприятие, используя метод insert, или если вы связываете предложения или отменяете их связь с существующим билетом на мероприятие с помощью метода update, для записи данных в linkedOfferIds используйте оставшуюся часть объекта EventTicketObject в следующем формате:

{
  "id": "2945482443380251551.ExampleObject1",
  "classId": "2945482443380251551.ExampleClass1",
  ...
  "linkedOfferIds": [
    "2945482443380251551.OfferObject1",
    "2945482443380251551.OfferObject2"
  ]
}

Если для установки или отмены связи предложений с существующим билетом на мероприятие используется метод patch, запрос должен содержать только linkedOfferIds:

{
  "linkedOfferIds": [
    "2945482443380251551.OfferObject1",
    "2945482443380251551.OfferObject2"
  ]
}

Чтобы избежать ошибок при работе с массивами, мы рекомендуем явно указывать, какие предложения нужно добавить, а какие удалить, с помощью метода modifyLinkedOfferObjects, как показано ниже.

{
  "linkedOfferObjectIds" {
    "addLinkedOfferObjectIds": [
      "2945482443380251551.OfferObject1",
      "2945482443380251551.OfferObject2"
    ],
    "removeLinkedOfferObjectIds": [
      "2945482443380251551.OfferObject3",
      "2945482443380251551.OfferObject4"
    ]
  }
}

Внешний вид билета на мероприятие со связанными предложениями

Связанные предложения отображаются в представлении билета на мероприятие и расположены между разделом с картой и разделом с подробными сведениями, как показано ниже. В карусели можно показывать не более пяти связанных предложений. Если с билетом связано больше предложений, пользователь может просмотреть их, нажав кнопку Ещё в конце карусели.

Связанные предложения

Если нажать на связанное предложение, оно будет показано с использованием упрощенного шаблона.

Внешний вид связанного предложения после нажатия на него

Действия с билетами, у которых истек срок действия

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

  • Прошло более 72 часов со времени, указанного в class.dateTime.end. Если значение class.dateTime.end не задано, используется значение class.dateTime.start. Билет перемещается в раздел "Истек срок действия" в течение 72—96 часов со времени, указанного в class.dateTime.end или class.dateTime.start.
  • Истек срок, указанный в 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
              }
            }
    }
  }
  …
  …
  …
}