
Мы разработали фичу для восточноевропейского банка, благодаря которой клиент может подключить карту к Google Pay прямо в мобильном приложении. В проекте были задействованы пять участников: мы, банк, Google Pay, интегратор и токен сервис-провайдер. У трёх последних в документации были белые пятна, на прояснение которых ушло полтора месяца, хотя разработка с нашей стороны заняла всего две недели.
Я Владислав Кортиков, Android-разработчик в KODE. В статье рассказал, что может ждать вас при добавлении токенизации банковских карт в Google Pay в банковское приложение. Здесь много неочевидных моментов, постигнутых с болью, и возможно однажды эта информация поможет кому-то сэкономить силы и время.
Готовы обсудить проект?
Свяжитесь с нами и мы предложим решение, которое будет работать на ваши бизнес-цели.Оставить заявкуБанк хотел, чтобы клиенты могли добавлять карты в Google Pay прямо из мобильного приложения. Для этого ему нужно было токенизировать карты сначала на стороне сервера, а затем — в приложении.
За год банк перевёл клиентов на карты VISA, а серверный вендор с лицензией от VISA токенизировал их на сервере. Оставалось сделать токенизацию карт в приложении. Летом 2023 года банк передал эту задачу нашей команде, которая имела подобный опыт и работала с сервисами Google.
С помощью фичи по подключению карты к Google Pay банк планировал увеличить мотивацию клиентов установить приложение и DAU — daily active users. Логика была такой:
Чтобы разработать фичу токенизации карт, мне нужно было узнать о специальном API от Google Pay — Push Provisioning API. Информации в открытом доступе о нём не было. Мы связались с Google через менеджера банка и запросили документацию, которую я изучил вместе с аналитиком.
После чтения документации у нас остались три «чёрных ящика»:
В документации Android-разработчика не было точной информации о том, как работает сервер и как он общается с токен сервис-провайдером. Документация описывала, как всё должно быть на клиенте, и давала подсказки для разных случаев. Но она не давала понимания, что сделал интегратор и точно ли он сделал это в соответствии с документацией токен сервис-провайдера.
Поэтому когда возникали проблемы, мне нужно было предполагать, что именно сделал не так интегратор или токен сервис-провайдер. Я заново открывал документацию, искал приписки внизу маленькими буквами и выдвигал гипотезу об изменениях. Если она не срабатывала, проверял следующую гипотезу. А когда упирался в тупик, шёл общаться к Google Pay, интегратору или токен сервис-провайдеру, и коммуникация затягивалась.
Я поделил добавление карты в Google Pay на два этапа: сначала настроил каркас, а потом делал полноценное подключение.
Для взаимодействия с SDK Google Pay нужно было настроить интеграцию с Push Provisioning API. Я не писал логику и не соблюдал внутренние функциональные требования фичи, только следовал требованиям документации к API, чтобы сделать минимальную реализацию для проверки работоспособности. Затем я запросил у Google то, чего не хватило — например, разрешение на тестирование Push Provisioning API для конкретных версий приложения. Для этого нужно было заполнить анкету и описать конфигурацию приложения: передать Android ID и хэш ключа подписи. Этот этап помог сократить ошибки в будущем.
Также я написал надстройку над SDK, чтобы скрыть её внешние зависимости.
После того как я настроил работу интерфейсов, появился каркас для полноценного подключения. Мы собрали бизнес-требования из строгих требований Google к дизайну и требований банка, и приступили к работе.
Запрос Get OPC
У меня есть middleware-сервер — прослойка между сервисами банка и мобильным приложением. Чтобы добавить карту, нужно передать SDK специальный OPC-токен. Приложение не генерирует этот токен, и чтобы его получить, я отправляю на middleware-сервер запрос Get OPC. В запросе передаю серверу три параметра о пользователе:
Сервер обращается к интегратору, тот общается с токен сервис-провайдером и возвращает обратно токен. При этом я не использую первые два идентификатора для сбора информации о пользователе.
Логика добавления карты
Пользователь выбирает карту, которую хочет подключить в Google Pay, и начинает сценарий добавления карты. Я получаю три идентификатора — Stable Hardware ID, идентификатор текущего Wallet и ID карты пользователя, вызываю метод Get OPC и получаю токен. Затем отдаю токен SDK и вызываю в нём метод Push Tokenize.
Далее передаю управление SDK, и он открывает на своей стороне экраны вроде: «Вы хотите добавить карту в Google Pay. Подпишите необходимые соглашения». Пользователь остается внутри банковского приложения и проходит сценарий добавления карты: активирует её, подтверждает согласие на обработку данных. При успешном завершении сценария SDK возвращает результат в приложение, и пользователь видит, что карта добавлена в Google Pay. После этого приложение может предложить ему назначить карту способом оплаты по умолчанию.
Если у пользователя на устройстве не одна активная учетная запись Google, а несколько, для каждой из них нужен свой Wallet ID. В таком случае нужно выбрать текущую активную учетную запись, которую установил пользователь, вызвать запрос Get OPC, отправить три идентификатора и получить токен.
Помимо «чёрных ящиков», на каждом этапе разработки большую роль играл Google.
Затем мы собрали альфа-сборку и передали приложение на проверку в банк. Для этого мы предоставили доступ к тестовым данным, чтобы сотрудники банка прошли конкретные шаги. Фичу релизили c выключенной feature toggle, чтобы она не была видна пользователям, пока банк не прошёл нужные сценарии и мы не исправили обнаруженные проблемы. А потом нужно было ещё раз получить финальный аппрув от Google. Наконец, мы дождались, когда какое-то количество пользователей обновит приложение, и включили фичу.
Для реализации фичи по добавлению банковской карты в Google Pay нужно было выполнить четыре функциональных требования. Мы сделали: 1. Первичную интеграцию с проверкой и получением всех нужных доступов. 2. Полноценную интеграцию фичи с дизайном. 3. Интеграцию с банком, в которой было взаимодействие не только с SDK, но и с интегратором и токен сервис-провайдером. 4. Интеграцию в конкретный флоу, где после заказа карты в банке пользователь видит предложение добавить эту карту в Google Pay через приложение. 5. После реализации фичи токенизации карт мы продолжаем развивать приложение.
Что такое токенизация банковской карты в Google Pay?
Это процесс замены реальных данных карты на уникальный цифровой токен, который используется для оплаты вместо номера карты — это повышает безопасность платежей через мобильное приложение.
Что такое Push Provisioning API?
Это специальный API от Google Pay, который позволяет добавлять банковскую карту в Google Pay прямо из мобильного приложения банка, без ручного ввода данных карты пользователем.
Кто участвует в интеграции карты с Google Pay?
Как минимум пять сторон: банк, разработчик мобильного приложения, Google Pay, интегратор и токен сервис-провайдер — каждый отвечает за свою часть процесса токенизации.
Что такое OPC-токен в Google Pay?
Это токен, который приложение получает через middleware-сервер запросом Get OPC и передаёт в SDK Google Pay для запуска сценария добавления карты методом Push Tokenize.
Сколько времени занимает интеграция Google Pay в банковское приложение?
В описанном кейсе непосредственная разработка заняла около двух недель, но прояснение недостающей документации у смежных участников (интегратора и токен сервис-провайдера) заняло дополнительно полтора месяца.
Нужна ли валидация от Google перед релизом фичи?
Да, Google проводит финальную валидацию приложения и тест-кейсы, и только после одобрения разрешает использовать функцию добавления карты в релизных сборках.
Готовы обсудить проект?
Свяжитесь с нами и мы предложим решение, которое будет работать на ваши бизнес-цели.Оставить заявку