Skip to main content
Полный перечень полей — в глоссарии.

Что делает этот раздел

Сборщик Google Wallet отвечает за одно: превратить бонусную карту клиента или заказ аренды в ссылку сохранения (save-URL), нажав на которую клиент добавляет брендированную карту в приложение Google Кошелёк на Android. В отличие от Apple Wallet, где создаётся файл-пропуск, для Google карта описывается как набор JSON-структур («класс» — общий шаблон, «объект» — конкретный экземпляр карты клиента), которые упаковываются в подписанный токен. Сама карта на серверах Google создаётся в момент, когда клиент открывает save-URL. Есть две публичные точки входа:
«Класс» — это общий шаблон оформления, единый для всех карт одного арендодателя (например, один класс бонусных карт на компанию). «Объект» — это персональная карта конкретного клиента или конкретного заказа. В save-URL всегда кладутся оба: и шаблон, и экземпляр.

Идентификаторы карт

Все карты Google адресуются через идентификатор эмитента (issuer ID), который берётся из настроек Google Wallet. К нему через точку приклеивается идентификатор арендодателя (компании) и назначение карты. Так карты разных компаний и разных заказов не пересекаются, даже когда используется один общий эмитент.
Идентификатор объекта строится по внутреннему номеру записи, а не по «красивому» отображаемому номеру заказа. Это гарантирует уникальность, но означает, что идентификатор карты в Google Кошельке не совпадает с номером заказа, который видит клиент.

Бонусная (карта лояльности)

Класс бонусной карты (шаблон)

Класс собирается один на компанию и описывает общее оформление. Перед сборкой ищется Дизайн карты Google Wallet, привязанный к уровню лояльности этой бонусной карты. Если дизайн найден, из него подставляются оформление и подписи полей; если нет — используются значения по умолчанию.
Логотип программы для карты лояльности Google обязателен. Если ни в дизайне нет своего логотипа, ни у арендодателя не заполнен логотип, сборка класса завершается ошибкой и бонусная карта не выпускается. Это самое частое препятствие при выдаче бонусной карты в Google Wallet.

Объект бонусной карты (карта клиента)

Объект — это персональная карта клиента. Он тоже применяет тот же Дизайн карты Google Wallet и уровень лояльности.
Процент кэшбэка приводится к целому числу — доли процента отбрасываются. Если у бонусной карты нет уровня лояльности, кэшбэк показывается как 0%.

Карта заказа аренды

Класс карты заказа (шаблон)

Класс заказа минималистичный и одинаковый для всех заказов компании: название организации-эмитента из настроек, статус проверки «одобрено» и жёстко заданный тёмный фон (#141828). Дизайн лояльности к картам заказов не применяется.

Объект карты заказа

Объект собирает актуальное состояние заказа в виде текстовых блоков. Отображаемый номер заказа берётся из «плотного» номера, а при его отсутствии — из внутреннего номера. Текстовые блоки карты (в этом порядке): Дополнительно в объект попадают: заголовок с названием организации, подзаголовок «Заказ аренды», заголовок «#номер», логотип арендодателя (если он есть) и QR-код, кодирующий внутренний номер заказа с подписью «#номер».
Точка возврата по умолчанию равна точке выдачи: если в заказе отдельная точка возврата не указана, показывается та же точка, где заказ получали.

Срок действия карты заказа

У карты заказа проставляется дата окончания действия. По умолчанию это ровно год от момента сборки. Но если аренда заканчивается поздно — так, что «дата окончания аренды плюс 30 дней» выходит за пределы этого года, — берётся именно эта, более поздняя дата. То есть карта живёт минимум год, а для долгих аренд — до конца аренды плюс месяц запаса.

Подпись и формирование ссылки

Что подписывается

Из собранных классов и объектов формируется полезная нагрузка токена: отправитель (служебный адрес сервисного аккаунта из настроек), получатель «google», тип «savetowallet», момент выпуска и сам блок с картами (классы/объекты лояльности либо универсальные классы/объекты заказа). Всё это подписывается алгоритмом RS256 сервисным ключом.

Загрузка ключа подписи

Ключ подписи читается из настроек и разбирается достаточно терпимо, чтобы принять несколько форматов хранения:
  1. Если значение оказалось закодированным в base64 — оно сначала декодируется.
  2. Если внутри лежит целиком JSON сервисного аккаунта — из него извлекается поле приватного ключа.
  3. Если приватный ключ содержит экранированные переводы строк (буквальные «\n» вместо настоящих) — они чинятся на реальные переводы строк.
  4. В итоге должен получиться PEM-ключ; если признака PEM в результате нет — выдаётся понятная ошибка о неправильном формате ключа.
Разобранный ключ подписи кэшируется в памяти процесса на всё время его жизни. Если ключ Google Wallet поменяли в настройках, изменение подхватится только после перезапуска приложения.

Итоговая ссылка

Подписанный токен подставляется в шаблон адреса https://pay.google.com/gp/v/save/{токен}. Именно эту ссылку клиент открывает на устройстве, после чего Google создаёт карту у себя и добавляет её в Кошелёк.

Как это используется

Ссылки сохранения вызываются из представлений выдачи карт в Google Wallet — для бонусной карты клиента и для заказа аренды. Каждый вызов заново собирает классы и объекты из текущих данных (актуальные баланс, статус, суммы) и заново подписывает токен, поэтому по свежей ссылке клиент всегда получает актуальное состояние карты.

Связанные страницы

Глоссарий: Google Wallet save-URL

Полный перечень полей классов и объектов карт Google и параметров подписи.

Карты в Apple Wallet и Google Wallet

Обзор раздела: какие бывают карты, как их получает клиент и как они обновляются.

Проблемы и логические ошибки

Сводный список известных проблем и логических ошибок всего модуля кошельков.

Что хранится о карте

Какие сведения система хранит о выпущенной карте и о телефонах, подписанных на обновления.

Выдача карты клиенту

Ссылки, по которым клиент получает карту для Apple Wallet или Google Wallet.

Оформление карты Apple

Что клиент видит на карте: поля, QR-код, фирменные цвета и логотип.

Как телефон получает свежую карту

Что происходит между телефоном клиента и системой, когда карта обновляется.

Уведомления об обновлении карты

Бесшумные уведомления, которые заставляют телефон перекачать карту.

Что запускает обновление

Какие изменения заказа приводят к обновлению карты у клиента.