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

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


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

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

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

.

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

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

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

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

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

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

Чтобы пользователи могли сохранить в приложении сразу несколько билетов, можно добавить ссылку или кнопку Сохранить в 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"
    ]
  }
}

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

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

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

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

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

Действия с билетами с истекшим сроком действия

На вкладке "Карты" в приложении 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
              }
            }
    }
  }
  …
  …
  …
}