Google play карты лояльности

Приложения-хранилища банковских карт стремительно вошли в нашу жизнь благодаря Apple Wallet и Google Pay. Обе платформы, помимо банковских, позволяют также работать и с другими типами карт — картами лояльности, подарочными картами, билетами на мероприятия, посадочными талонами и т.д.

Работая в компании, которая занимается обслуживанием одной немаленькой ритейловой сети, мне пришлось интегрировать карты лояльности этой сети в Apple Wallet и Google Pay. И если с Apple Wallet пришлось повозиться только потому что интеграционный слой довольно многофункционален, то с Google Pay большая часть усилий и нервных клеток была потрачена на то чтобы разобраться в документации, найти подходящие инструменты и разработать первый proof of concept. Хоть в целом остальная часть работы прошла гораздо быстрее, чем для Apple Wallet, я потратил день на то чтобы разобраться в том как завести сервис, так что был бы не против, если бы кто-то написал подобную статью до меня.

Матчасть

Карты лояльности представлены при помощи двух сущностей — Loyalty Class и Loyalty Object.

  • Loyalty Class — своего рода шаблон для всех карт лояльности. Содержит поля общие для всех карт, такие как цвет шрифта, ссылки на ассеты иконок, бэкграундов, текстовые поля и т.д., полное описание можно найти тут: Loyaltyclass
  • Loyalty Object — экземпляр LoyaltyClass. Он же содержит в себе данные конкретной карты конкретного клиента — номер карты, имя, дополнительные текстовые поля. Описание тут: Loyaltyobject

Для того чтобы получить карту, пользователь должен перейти по ссылке формата
www.android.com/payapp/savetoandroidpay/{JWT}, где JWT — токен, создержащий JSON с данными LoyaltyClass. Но так как длина URL имеет ограничения, рекомендуется предварительно создать Loyalty Class, если его структура содержит много символов.

Если необходимо обновить карту в связи с изменением шаблона, стилей, необходимостью добавления или изменения текстовых полей, сделать это можно при помощи API. Необходимо только выполнить POST-запрос с новой версией карты, сервисы Google сами синхронизируют все приложения пользователей, у которых сохранена эта карта.

Инструменты и документация

Проблемой оказалось то, что все примеры в документации к Google Pay API for Passes были исключительно для Java, PHP и Python, а сама документация настойчиво рекомендовала «использовать клиентские библиотеки для того чтобы упростить процесс» работы с API.

Последовав этому совету я радостно отправился в nuget, но библиотеки для Google Pay там не оказалось. Слава Брину, первая строчка в гугле по запросу «google pay for passes dotnet» выдала страницу Google Pay API for Passes utility libraries, на которой нашлось то, что мне было нужно, правда в формате ZIP-архива, в котором находился .net проект со сгенерированным классом, являющимся враппером к API Google Pay — Google Pay API for Passes Client library.

Судя по наличию в проекте файла Google.Apis.Walletobjects.v1.1.9.2.00.nuspec, деплой nuget-пакета все же входил в планы команды Google. Открыв этот файл в поисках документации, я ничего конкретного не нашел, а некоторые ссылки, которые были в секции description и вовсе отправляли на несуществующие страницы.

Получение access token

Для начала непосредственной работы с Google Pay API for Passes необходимо получить access token, для этого же необходимо:

  1. Иметь Google Merchant Account, получить который можно
  2. Cоздать Service Account, получить для него файл с credentials — json документ с деталями service account, включающий идентификатор, email, private key и т.д. Как рекомендует документация, хранить этот файл нужно в защищенном месте.
  3. Связать Merchant Account и Service Account в Google Merchant Center

При помощи этого файла можно авторизоваться, используя библиотеку Google.Apis.Auth.OAuth2:
private await Task<string> GetOAuthToken() { string serviceAccountFile = string.Empty; serviceAccountFile = ConfigurationManager.AppSettings; /* Библиотека авторизации имеет несколько типов Credential, GoogleCredential был выбран потому что его без проблем можно создать из файла с деталями Service Account, используя статический метод, при этом не теряются необходимые scopes API, указанные в этом файле */ var credential = GoogleCredential.FromFile(serviceAccountFile) .CreateScoped(WalletobjectsService.Scope.WalletObjectIssuer); /* Access token имеет срок годности и должен быть обновлен вовремя, но метод GetAccessTokenForRequestAsync берет все действия по управлению валидностью токена на себя, так что об этом можно не волноваться */ var token = async credential.UnderlyingCredential.GetAccessTokenForRequestAsync(); return token; }

Создание карты

Для того чтобы создать карту лояльности, нужно сперва создать Loyalty Class. Loyalty Class можно создать как при помощи API, так и используя веб-интерфейс Google Merchant Center. Внимание стоит уделить названию класса, так как это название должно быть уникальным в инфраструктуре Google Pay.
После создания Loyalty Class, можно создать Loyalty Object. Для этого уже понадобится библиотека, которую мы добавили в проект ранее: создаем объект запроса, указываем OAuth token, передаем созданный объект LoyaltyObject, выполняем запрос:

public GooglePayApiService() { //Идентификатор эмиттера, выданный после создания Merchant Account IssuerId = ConfigurationManager.AppSettings; _wobService = new WalletobjectsService(); } private async Task<LoyaltyObject> ConvertLoyaltyObjectFromTemplate(GooglePayPassTemplate template) { string id = $»{IssuerId}.{template.SerialNumber}»; string loyaltyClassName = ConfigurationManager.AppSettings; var loyaltyClass = await GetLoyaltyClass(loyaltyClassName); var result = new LoyaltyObject { Id = id, AccountName = template.AccountName, Barcode = new Barcode { AlternateText = template.BarcodeText, Value = template.SerialNumber, Type = «pdf417» }, Kind = «walletObject#loyaltyObject», ClassId = loyaltyClass.Id, ClassReference = loyaltyClass, State = «active» }; return result; } private async Task<LoyaltyObject> CreateLoyaltyObject(LoyaltyObject loyaltyObject) { var saveRequest = _wobService.Loyaltyobject.Insert(loyaltyObject); saveRequest.OauthToken = await GetOAuthToken(); var savedObject = await saveRequest.ExecuteAsync(); return savedObject; }
GooglePayPassTemplate в данном примере — это DTO, хранящий в себе шаблон карты для пользователя, который генерируется отдельным разработанным сервисом.

Обновление карты

Здесь принцип тот же, что и при создании: генерируем запрос, передаем обновленный объект LoyaltyObject, выполняем:

private async Task<LoyaltyObject> UpdateLoyaltyObject(LoyaltyObject loyaltyObject) { var updateRequest = _wobService.Loyaltyobject.Update(loyaltyObject, loyaltyObject.Id); updateRequest.OauthToken = await GetOAuthToken(); var savedObject = await updateRequest.ExecuteAsync(); return savedObject; }

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

Генерация JWT

Для установки карты необходимо перенаправить пользователя по ссылке www.android.com/payapp/savetoandroidpay/{JWT}. Описание структуры токена можно найти по .

Токен подписывается RSA-SHA256 подписью, которую можно сгенерировать, используя все тот же файл с Service Account credentials:

public static class JwtHelper { public static string CreateJwtForLoyaltyObject(LoyaltyObject loyaltyObject) { /* В этот раз для работы с credential используем этот класс, потому что у него статический метод создания подписи */ ServiceAccountCredential credential; var now = DateTime.UtcNow; DateTime unixEpoch = new DateTime(1970, 01, 01); // 1970-01-01 00:00:00 UTC var secondsSinceEpoch = (int)Math.Round((now — unixEpoch).TotalSeconds); string serviceAccountFile = serviceAccountFile = ConfigurationManager.AppSettings; using (var fs = new FileStream(serviceAccountFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { credential = ServiceAccountCredential.FromServiceAccountData(fs); } /* Создаем экземпляр класса JwtPayload, был создан для хранения payload-сегментa токена JWT */ var jwtPayload = new JwtPayload { iat = secondsSinceEpoch, iss = credential.Id, payload = new JwtInternalPayload { loyaltyObjects = new { new LoyaltyObjectPayload { id = loyaltyObject.Id } } } }; string header = @»{«»alg»»:»»RS256″»,»»typ»»:»»JWT»»}»; string payload = JsonConverter.SerializeObject(jwtPayload); string base64Header = EscapedBase64(Convert.ToBase64String(Encoding.UTF8.GetBytes(header))); string base64Payload = EscapedBase64(Convert.ToBase64String(Encoding.UTF8.GetBytes(payload))); //считаем саму подпись при помощи статического метода класса Signature string signature = EscapedBase64(credential.CreateSignature( Encoding.UTF8.GetBytes($»{base64Header}.{base64Payload}») )); var token = $»{base64Header}.{base64Payload}.{signature}»; return token; } private static string EscapedBase64(string base64) { return base64.Replace(‘+’, ‘-‘) .Replace(‘/’, ‘_’) .Replace(«=», «»); } }

В этой статье мы поверхностно прошли по основам работы с Google Pay API for Passes: настройке аккаунтов, подключению к API, созданию Loyalty Class и Loyalty Object.
Если НЛО благоволит, расскажу отдельно про то как работать с Apple Wallet (там все сложнее в плане реализации), как подружить Apple Wallet с Google Pay в одном веб-сервисе и не испытывать боли.

Полезные ссылки

  • Регистрация Merchant Account
  • Документация Google Pay API for Passes
  • Клиентские библиотеки для работы с Google Pay API for Passes

Дисконтные карты — прошлый век: теперь скидки хранятся в телефоне. Расскажем о лучших мобильных приложениях для скидочных карт, которые позволят вам экономить, не забивая кошелек пластиком. А вы помогите нам выбрать лучшее — примите участие в нашем опросе в конце статьи!

Виртуальные дисконтные карты: суть

Наверняка, у вас в кошельке или сумке лежит больше одной скидочной карты. Торговые сети выдают пачками их в рамках маркетинговых акций.

Раньше для считывания дисконтных карт на кассе использовались планшетные и лазерные сканеры. Теперь им на смену приходит новое поколение — фотосканеры. С их помощью информацию о скидке можно считать даже с фотографии карты на экране телефона.

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

PINbonus

Простейшее приложение для скидочных карт, работающее на основе готовой базы штрих-кодов разных магазинов. Откройте приложение, выберите из списка нужный вам магазин (доступны 200+ разных, от «Спортмастера» до Дикой Орхидеи) и поднесите к телефону свою карточку этого магазина.

PINbonus считает штрих-код с вашей карты и сохранит его в телефоне в удобочитаемой форме. Теперь на кассе магазина вы можете просто показать штрих-код на экране приложения. Кассир считает его сканером, и вы получите свою скидку.

Stocard

Более продвинутый вариант. Вы можете не только выбрать магазин из списка, но и вручную ввести номер любой скидочной карты. А это значит, вы можете вносить в приложение не только свои карты, но и карты своих друзей и родных.

Кроме того, есть такая интересная вещь, как общедоступные карты. Они выкладываются пользователями интернета в группах совместных покупок — поищите их в социальных сетях. Stocard позволяет добавлять и использовать и такие карточки.

Еще один замечательный бонус: включите в приложении функцию «Помощник». Когда вы подойдете к магазину, приложение Stocard определит ваше местоположение и автоматически «достанет» скидочную карту этого магазина. Просто выньте телефон из кармана и покажите кассиру.

Кошелёк

Еще более функциональное приложение для дисконтных карт, позволяющее фотографировать карты. Благодаря этому в нем можно хранить не только скидочные карты, но купоны, чеки со скидкой, подарочные сертификаты, банковские и транспортные карты, билеты на мероприятия — словом, все, что лежит в вашем кошельке.

Расплачивайтесь из приложения «Кошелёк» в онлайн-магазинах и мобильных приложениях и автоматически получайте скидки по своим картам. Следите за накоплением бонусов на картах. А также регистрируйтесь в программах лояльности магазинов-партнеров и получайте новые скидки.

getCARD

Удивительное приложение виртуальных дисконтных карт, которое позволяет зарабатывать! Внесите в приложение данные любой своей скидочной карты и «сдавайте её в аренду» другим пользователям. За это приложение будет дарить вам кэшбэк в виртуальной валюте — до 15% на любые покупки. Его затем можно перевести в реальные деньги.

Пользуйтесь картами, которые сдаются в аренду другими пользователями, и получайте уникальные скидки, которых нет у вас. Доступны в том числе карты с кэшбэком: к примеру, на AliExpress по чужой карте из приложения getCard можно вернуть себе до 60% от покупки.

Cardved

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

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

Виртуальные дисконтные карты — удобный способ экономить, но работает пока не везде. Поинтересуйтесь, принимает ли ваш любимый магазин или кафе цифровые карты скидок. Если в магазине нет фотосканера, вы можете договориться, чтобы продиктовать номер своей карты кассиру.

В Apple Wallet – миллионы карт и тысячи компаний, а является ли Google Pay его полноценной альтернативой на Android?

Мы часто сталкиваемся с вопросом об особенностях сервиса Google Pay, с точки зрения работы с электронными картами лояльности, и чтобы подробно ответить на него, подготовили для Вас этот материал.

Google Pay – это система электронных платежей, разработанная компанией Google.
Так же как и сервис Apple Wallet Google Pay использует технологию беспроводной передачи данных малого радиуса (NFC) для передачи данных банковской карты продавцу. Так же система позволяет хранить и использовать электронные карты лояльности, купоны, специальные предложения или билеты и посадочные талоны.

Сравнение интерфейса хранения электронных карт лояльности Apple Wallet и Google Pay

С точки зрения удобства пользователей: в интерфейсе Apple Wallet доступна информация о статусе и бонусном счете каждой электронной карты, расположение которых можно менять местами. Стоит отметить удобство отображения большого количество карт на экране смартфона.

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

Apple Wallet: Двусторонняя карта, подробная информация на оборотной стороне карты Google Pay: односторонняя карта, чтобы посмотреть информацию нужно пролистать экран ниже.

С точки зрения управления электронными картами лояльности, Google Pay имеет некоторые отличия, от AppleWallet и других Android-приложений, которые имеют наибольшее число оценок и высокий рейтинг в Google Play (WalletUnion, PassWallet, WalletPasses, Pass2U).

Рассмотрим отличия:

Маркетинговые возможности

Так же как и в Apple Wallet, в реализации Google Pay можно работать с электронными картами лояльности, отправить уведомления или создать привязку его к гео-точке. Отличия заключаются в деталях и кроются в различном подходе двух экосистем к взаимодействию с потребителем.

В таблице представлена информация о возможности отправки PUSH для GooglePay.

В отличии от Apple Wallet и других Аndroid-приложений, у которых информация об уведомлении отображается при закрытом приложении, для того чтобы просмотреть новое уведомление в Google Pay необходимо перейти в само приложение.

С точки зрения бизнеса и удобства пользователей, особенность такой механики может повлиять на эффективность коммуникации, так как есть вероятность того, что адресат не сразу заметит информацию о новом уведомлении и прореагирует на него не так, как ожидает бизнес.

Существует отличия в формировании полей и типа карты:

В Apple Wallet можно добавить или изменить поле электронной карты, в пределах используемого шаблона, и моментально отобразить это изменение в картах клиентов.

В Google Pay все серьезные изменения сначала передаются на сервера Google, где изменения проходят валидацию, и в течение некоторого времени, Google вносит изменения в электронные карты пользователей.

Поля и тип электронной карты заключены в рамки шаблона, который Google валидирует на этапе создания. Например, поле с бонусными баллами будет всегда называться «Баланс” и отображать информацию о накопленных баллах.

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

2. Google точно знает все о ваших картах лояльности, транзакциях и клиентах 😏

Особенность экосистемы Google – все карты создаются, проживают и обновляются на серверах Google. В экосистеме Apple Wallet карты и информация, которую они содержат, «живут” на ваших серверах (или на серверах таких провайдеров как OSMI Cards).

Соответственно, в Apple Wallet, бизнес передает уведомление о новой информации на карте непосредственно на смартфон клиента.

В Google Pay Google всегда будет промежуточным звеном этой цепочки. Такая информация как информация о бонусных баллах клиентов, местах посещения, категориях услуг и интересах, которая ко всему прочему уже четко структурирована в рамках заданного шаблона, будет собирается и хранится Google и может быть использована им для дополнительной рекламной активности в отношении ваших клиентов. Разумеется, что если Вы не возражаете против такого активного сбора информации о ваших клиентах, то и нет повода для беспокойства.

3. Отображение PUSH-сообщения в привязке к гео-точке

Подход Apple Wallet позволяет точечно задать отображение PUSH-сообщения в указанных координатах, отобразив заданное ранее сообщение на закрытом экране смартфона автоматически.

В реализации Google Pay тоже можно привязать PUSH-уведомление к определенным координатам, а отличие заключается в том, как это будет отображено на смартфоне клиента.

Если смартфон пользователя попадает в точку с PUSH, пользователь сначала должен открыть приложение Google Pay, в котором он увидит какие гео-уведомления и от каких электронных карт ему доступны.

4. С точки зрения удобства пользователей, сервис имеет еще одну особенность

При переходе по ссылке на добавление электронной карты, Google Pay обязательно запросит доступ на авторизацию Google-аккаунта на вашем смартфоне.

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

Особенно хочется подчеркнуть одну ключевую особенность процесса добавления карты в GPay:

Если приложение Google Pay (которое не является предустановленным!) не установлено на смартфоне вашего клиента, то пройдя по ссылке на добавление карты, по умолчанию, он просто добавит её в свой аккаунт Google.

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

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

5. Не все пользователи Android используют Google Pay

Доля продаж смартфонов на Российском рынке в 2017 году.

Google Pay не является универсальной платформой и не предустановлена на всех устройствах Android, например:

1) Пользователи смартфонов Samsung используют для оплаты и хранения электронных карт лояльности предустановленное приложение Samsung Wallet.

2) Многие китайские low cost смартфоны не совместимы с Google Pay по причинам низкой производительности и несоответствию стандартам безопасности Google. По различным оценкам, доля китайских смартфонов на Российском рынке составляет порядка 30% устройств и из года в год демонстрирует устойчивую тенденцию к увеличению объемов продаж.

3) С мая 2019 года смартфоны Huawei не могут предустанавливать сервисы Google, например на Huawei Mate 30 Pro уже заблокирована возможность установки приложений из Play Market даже в том случае, если вы скачиваете приложение из интернета.

Четыре крупнейших китайских производителя потребительской электроники — Huawei, Xiaomi, Oppo и Vivo — объединились в Global Developer Service Alliance (GDSA). Основной целью альянса станет создание единой платформы для разработки, публикации и распространения программного обеспечения, музыки и видео. То есть, они собираются создать полный аналог Google Play, и уже в марте 2020 года планируется пилотный запуск в девяти регионах например в Индии, Индонезии и России.

В итоге:

Основные различия между сервисами Apple Wallet и Google Pay заключаются в деталях: Google больше ориентирован на платежи, Apple же уделил больше внимания собственной системе лояльности и эффективности работы с маркетингом.

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

Мы надеемся, что в скором времени Google усовершенствует функционал электронных карт лояльности. Пока этого не произошло, рекомендуем обратить внимание на распространенные и успешно используемые сервисы: Wallet Union, Pass Wallet, Wallet Passes, Pass2U.