Как терминал запрашивает информацию о картах

Терминал продавца может запрашивать информацию об определенной карте несколькими способами.

Взаимодействие терминала и приложения Google Pay

Для терминала определен идентификатор Collector ID, связанный с идентификатором Redemption Issuer ID, который разработчики карт запрашивают на серверах Google с помощью Google Pay API for Passes.

При использовании интеллектуальной бесконтактной технологии терминал передает свой идентификатор Collector ID в Google Pay. Приложение проверяет аккаунты с Redemption Issuer ID и идентификатор Collector ID каждой карты. Если Collector ID соответствует терминалу, Google Pay передает данные карты на терминал.

Подробная информация о настройке находится в разделе Как настроить терминал продавца.

Ниже изображен процесс взаимодействия терминала и приложения.

Вариант 1

Вариант 1. На приведенной схеме Issuer_id: 2018 содержит один класс и один объект. Аккаунт продавца используется разработчиком карты. Класс Class_id: abc содержит объект redemptionIssuers['1990']. Issuer_id: '1990' – это идентификатор Redemption Issuer ID, соответствующий продавцу fooPizza. Терминалу назначен идентификатор Collector ID 12345678. Он соответствует идентификатору Collector ID, который указан для Redemption Issuer ID 1990. Любой объект класса Class_id: abc передается на терминал с идентификатором Collector ID 12345678.

Вариант 1.1

Вариант 1.1. На приведенной выше схеме fooPizza и yumPie могут активировать одну и ту же карту object_id: 123. В классе может быть несколько идентификаторов Redemption Issuer ID. У каждого аккаунта продавца с Redemption Issuer ID есть собственный уникальный идентификатор Collector ID, содержащийся в настройках терминала.

Вариант 2

Вариант 2. На схеме выше показано, как класс использует собственный аккаунт с Issuer ID в качестве Redemption Issuer ID. Issuer_id: 2018 содержит один класс и один объект. Класс Class_id: abc содержит объект Redemption Issuer под названием Issuer_id: 2018. Issuer_id: 2018 – это идентификатор Redemption Issuer ID, соответствующий продавцу fooPizza. Терминалу назначен идентификатор Collector ID 12345678. Он соответствует идентификатору Collector ID, указанному для идентификатора Issuer_id: 2018, который содержит Class_id: abc. Любой объект класса Class_id: abc передается на терминал с идентификатором Collector ID 12345678.

Выбор карт пользователями в приложении Google Pay

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

Если пользователь открывает карту в Google Pay, а затем использует интеллектуальную бесконтактную технологию, то данные карты сразу передаются на терминал с соответствующим Collector ID. При этом не учитываются параметры карты, заданные в свойствах класса или объекта.

Карта не будет отображаться на экране, если пользователь откроет главную вкладку приложения Google Pay или просто разблокирует устройство. Когда на устройстве есть только одна карта с подходящим Collector ID, ее данные будут переданы терминалу, даже если она не отображается в этот момент на экране.

Если у пользователя есть несколько карт с подходящим Collector ID, Google Pay выполняет одно из указанных ниже действий.

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

Параметры, определяющие, действительна ли карта, зависят от ее категории. Проверяйте свойства, обозначающие статус и период использования карты, такие как object.state или object.validTimeInterval.

Пример использования интеллектуальной бесконтактной технологии

Рассмотрим пример настройки для вымышленных продавцов и их карт постоянного клиента.

iLuvCoffeeEat-fooBacon-R-us
Issuer ID123456789
Collector ID1114444444477777777
Класс LoyaltyClassR-базоваяМои наградыНет
Класс LoyaltyClassR-золотаяНетНет

У iLuvCoffee есть два различных класса для создания карт постоянного клиента – R-базовой и R-золотой. У Eat-foo есть одна карта постоянного клиента, которая называется Мои награды, а у Bacon-R-us вообще нет карт.

Предположим, что вы хотите задать такие настройки:

  • R-базовые карты можно активировать в Eat-foo и Bacon-R-us;
  • карту Мои награды можно активировать в Eat-foo;
  • R-золотые карты не поддерживают интеллектуальную бесконтактную технологию.

В этом случае нужно задать следующие идентификаторы Redemption Issuer ID:

  • R-базовые – 456 и 789;
  • Мои награды – 456;
  • R-золотые – без идентификатора.

Объекты этих классов будут иметь следующие идентификаторы Collector ID:

  • R-базовые – 44444444, 77777777;
  • Мои награды – 44444444;
  • R-золотые – без идентификатора.

Аутентификация продавца при использовании интеллектуальной бесконтактной технологии

У каждого аккаунта продавца может быть несколько открытых электронных ключей. Эти ключи синхронизируются и хранятся в приложении Google Pay и активируются, когда пользователь прикладывает устройство с включенным NFC к терминалу с подходящим идентификатором Collector ID.

Допустим, что у пользователей в нашем примере есть следующие электронные ключи:

iLuvCoffeeEat-fooBacon-R-us
Issuer ID123456789
Collector ID111111114444444477777777
Класс LoyaltyClassR-базоваяМои наградыНет
Открытый ключaaabbbНет

У пользователя в аккаунте Google Pay есть R-базовая карта постоянного клиента iLuvCoffee и карта постоянного клиента Eat-foo Мои награды, которыми можно воспользоваться на разных терминалах.

Эти классы относятся к следующим идентификаторам Redemption Issuer ID:

  • R-базовые – 456 и 789;
  • Мои награды – 456.

Ниже представлены три возможных варианта взаимодействия карт и терминалов.

Терминал iLuvCoffee. Приложение Google Pay теоретически может идентифицировать терминал и подтвердить, что он принадлежит iLuvCoffee. Однако для iLuvCoffee не настроена активация карты R-базовая. Поэтому данные не будут переданы на терминал.

Терминал Eat-foo. Приложение Google Pay идентифицирует терминал Eat-foo, который использует открытый ключ "bbb". Предположим, что на экране устройства не отображены подробные сведения о картах R-базовая или Мои награды, потому что открыта главная вкладка Google Pay. В этом случае приложение ищет среди имеющихся карт те, которыми можно воспользоваться в Eat-foo. Google Pay находит карты R-базовая и Мои награды и выводит на экран карусель, чтобы пользователь выбрал, какую из них использовать.

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

Терминал Bacon-R-us. Несмотря на то что у Bacon-R-us можно активировать карты R-базовые, без открытого ключа приложение не сможет идентифицировать терминал и не передаст данные.

Лимиты аутентификации

Когда карта синхронизируется с Google Pay, проверяются все идентификаторы Redemption Issuer ID на серверах Google, а идентификаторы Collector ID с соответствующими ключами сохраняются локально в приложении Google Pay.

Одному идентификатору Collector ID может соответствовать множество открытых ключей и их версий. Одной карте можно назначить несколько идентификаторов Redemption Issuer ID, каждому из которых будет соответствовать один идентификатор Collector ID.

Если в Google Pay нет карт с подходящим Collector ID для конкретного терминала и нужной версии ключа, то приложение не сможет передать ему данные. Для обновления и загрузки открытых ключей карты с серверов Google на устройстве должен быть подключен доступ к Интернету.

Для карты может быть назначено несколько открытых ключей. Подробная информация о добавлении открытых ключей приведена здесь.

Передача значений карты

У каждого объекта категории должна быть строка свойств object.smartTapRedemptionValue.

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

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

  1. Обновите баланс или статус пользователя в точке продажи.
  2. Обновите данные на своем сервере, учитывая информацию о транзакции в точке продажи.
  3. Обновите объект, чтобы изменения карты отразились в приложении Google Pay.

Терминал и приложение Google Pay зашифровывают все данные, передаваемые по NFC. Терминал расшифровывает их после использования интеллектуальной бесконтактной технологии. В данных содержатся записи служебных объектов NDEF, которые обозначают каждую переданную карту. Полезная нагрузка Service number NDEF Record служебного объекта содержит значение, заданное в object.smartTapRedemptionValue карты. Разработчику карты не нужно ничего шифровать. Если разработчик хочет внедрить дополнительное шифрование для улучшения защиты, нужно задать значение так, чтобы только система точки продажи могла выполнить расшифровку. В таком случае шифрование настраивают разработчик карты и контактное лицо точки продажи.