Как вы думаете, когда и чем впервые оплатил человек?
Вряд ли это была знакомая всем карта с чипом и магнитной полосой во времена до нашей эры…
Конечно, альтернатива наличке появилась еще за пару тысяч лет до этого…
Началось все со старого доброго бартера, когда люди обменивались не QRами, чтобы деньги перевести по телефону, а реальными вещами/товарами, равноценными друг другу.
И так продолжалось очень долго, уровень бартера вышел на международный. Все товары для каждого участника торговли были по разному ценны, значит нужна валюта, которая устроит всех!
Первыми на полку пошли слитки из драгоценных металлов со своим весом и формой, но и их спустя много лет заменили на монеты. Попробуй так в магазин со слитком сходить! Неудобно…
Чеканные монеты постепенно вытеснили бартер и сделали торговлю с обменом быстрее и проще.
Но больше всего не везет купцам. Хоть монеты явно удобнее слитков, их же нужно охранять, перевозить, помимо всего товара в повозке.
Так человечество пришло к первым бумажным деньгам. И тут купцы заликовали. Ведь вместо телеги с металлоломом, они ходили уже с добротной «котлетой».
Не много, не мало, а прошла тысяча лет от появления налички до пластиковой карты с магнитной полосой.
Потом карта обзавелась сначала контактным чипом (микросхемой), улучшив свою безопасность в разы, потом дуальным чипом с поддержкой контактного и бесконтактного интерфейса.
Так, эволюционным путем, мы пришли к бесконтактной оплате телефоном, которая на научном языке называется Оплата через NFC. И с 2011 года успешно ей пользовались, вплоть до текущего момента.
Но!! С небольшим перерывом, пока мы в поте лица чуть больше полугода восстанавливали SberPay.
Но, что это такое, из-за чего же все «поломалось», и как все «починилось» ? Как раз об этом я и расскажу вам дальше.
Давайте разберёмся, как устроена бесконтактная оплата телефоном с помощью SberPay и как добавить его поддержку в Android-приложение.
Глава 1. Бесконтактная оплата
Платить телефоном можно при помощи технологии NFC (Near Field Communication). Это такой чип (микросхема), который позволяет двум устройствам передавать/получать данные на небольшом расстоянии в 10 см.
Для оплаты нужно всего-то несколько участников:
Телефон с поддержкой NFC
POS терминал с NFC (сейчас они все снабжены модулем для приема бесконтактных платежей)
Банк эквайер
Платежная система
Банк Эмитент
Чуть ниже процесс отображен на схеме.
Раньше для оплаты было множество сервисов: Apple Pay, Google Pay, Samsung Pay, Mir Pay, SberPay. Но в России из-за санкций международные платёжные системы Visa и Mastercard (далее МПС) ушли, ведь именно платёжные системы создают токены и генерируют ключи, которые так нужны нам для оплаты. А за МПС ушли и привычные для нас сервисы токенизации карт.
Глава 2. Почему не работает оплата на iOS
У Android-приложений есть доступ к модулю NFC, с помощью которого телефон взаимодействует с терминалом и обменивается данными с приложением, а в iPhone такого доступа нет. В iOS за безопасность этих взаимодействий отвечает Secure element — микросхема в совокупности с программным обеспечением. Она сертифицированна по стандарту EMVco, по которому также проходят сертификацию производители микросхем для банковских карт. Через эту микросхему проходят все команды, связанные с платёжной функцией телефона по обмену данными между терминалом и приложением. И, конечно, доступ к нему имеет лишь одно приложение — Apple Pay. А так как Apple Pay ограничен в части использования для NFC-платежей в России, то...
Какие платёжные средства для бесконтактной оплаты сейчас доступны на iOS?
• Платёжные стикеры. Кстати, кто не знает, недавно наши друзья по цеху запустили стикеры с героями Союзмультфильма.
• Оплата по QR.
• Оплата улыбкой. Если увидите терминал с камерой, скажите кассиру, что хотите оплатить по биометрии, и посмотрите в камеру.
А теперь мы с вами подробнее рассмотрим этапы добавления поддержки бесконтактной оплаты в Android-приложение: токенизацию, оплату и синхронизацию данных.
Глава 3. Токенизация
Токенизация карты — это технология преобразования конфиденциальных данных банковской карты в специальный токен, с помощью которого можно оплачивать покупки. Схематично токенизация и оплата выглядят так:
Как проходит токенизация:
Аттестация устройства. Перед началом токенизации мобильное приложение аттестует устройство. Если проверка на доступность и безопастность успешна, то функциональность становится доступна, в противном случае мы скрываем точки входа. Со стороны Android-приложения работа с токенами, хранение и обновление данных в БД реализовано в SDK, который подключается к проекту.
Регистрация кошелька. Чтобы токенизировать карту, сначала нужно зарегистрировать кошелёк. В мобильном приложении определённым алгоритмом генерируется идентификатор кошелька. После этого инициализируются ключи шифрования и приходит сертификат от SDK. Данные отправляются в бекенд, в SDK для аутентификации кошелька с учётом данных о самом устройстве. И если всё в порядке, то кошелёк активируется с ещё одной итерацией взаимодействия с бекендом. Этот процесс выполняется только один раз. То есть, если кошелёк ранее уже был активирован, то при токенизации карт берутся готовые данные о кошельке.
После регистрации кошелька происходит токенизация карты, привязываемой к кошельку.
Запрос на токенизацию. Когда пользователь добавляет карту МИР в мобильное приложение, оно отправляет запрос на токенизацию в TSP (Token Service Provider). В запросе указываются данные о карте и мобильном устройстве, после чего идёт запрос в платёжную систему (ПС),
Создание токена. После получения запроса ПС проверяет возможность токенизации этой карты у банка-эмитента: нет ли ограничений, не заблокирована ли карта и т.д. При успешном ответе ПС создаёт уникальный токен и связывает его с соответствующей картой.
Далее ПС создаёт пачку платёжных ключей — обычно десяток (на одну транзакцию каждый раз тратится один ключ) — и отправляет в TSP. А сервис пересылает эти ключи с ID токена на хранение в мобильное приложение.
Хранение токена. Кошелёк и мобильное приложение хранят ID токена в своей защищенной базе данных вместо реальных данных карты с пачкой ключей и данными об устройстве.
Теперь мы знаем что такое такое токен, и как он попадает к нам в телефон. Но как проходит оплата? Погружаемся.
Глава 4. Оплата
При проведении транзакции через мобильное устройство приложение общается с POS-терминалом через SDK и передаёт ID токена вместо реальных данных карты, с одним платежным ключом на терминал. Затем платёж проходит через стандартную цепочку участников: банк-эквайер → платёжная система → банк-эмитент и обратно.
Получив команду APDU (Application Protocol Data Units), ожидаемую для старта оплаты от удалённого устройства (терминала), мы вызываем обработку в SDK. Все APDU определены в спецификации ISO/IEC 7816-4, это пакеты уровня приложения, которыми обмениваются считыватель NFC и сервис HostApduService. Такой протокол является полудуплексным, то есть считыватель NFC отправляет вам команду APDU и ждёт APDU-ответ.
Взаимодействия между терминалом и сервисом NFC в приложении должно быть максимально быстрым. Весь процесс оплаты выглядит так:
Подъём сервиса.
Инициализация SDK.
Обмен APDU-командами.
Обратный вызов от SDK.
Отображение экрана результата.
Платить можно без интернет-соединения, но до тех пор, пока в запасе есть платёжные ключи. Для их обновления потребуется выйти в интернет.
А чтобы все данные, которые лежат в кошельке, в TSP, в Платежной системе были одинаковые, необходимо обеспечить их синхронизацию.
Для обновления данных по токенам и кошельку необходима синхронизация с бекендом. Она выполняется при авторизации пользователя в приложении. В нашем приложении нужна ещё и фоновая синхронизация, для этого мы использовали workManager. Задача на синхронизацию ставилась в том числе и при оплате с соблюдением определённых условий.
Глава 5. Аутентификация CDCVM
Самое важное в процессе оплаты это что? Правильно. Б – безопасность.
А как сделать оплату NFC максимально безопасной, чтобы злоумышленник, приложив POS терминал к вашему карману, где лежит телефон, не смог списать какую-то крупную сумму, пока вы с ним третесь в час пик в метро?
Для этого используется технология CDCVM, которая расшифровывается как Consumer Device CVM. В этом случае пользователь вводит отдельный код доступа к платёжному приложению. Для запуска аутентификации на Android используется BiometricPrompt [2], с помощью которого выполняется системный запрос аутентификации с использованием одной из поддерживаемых биометрических технологий: отпечаток пальца или кодом.
Но и об удобстве не стоит забывать! Дополнительно, мы реализовали возможность оплачивать заблокированным телефоном. При этом можно даже выбрать сумму для оплаты, если вы этого сами хотите, без подтверждения отпечатком пальца или кодом: 100, 250, 500 или 1000 рублей.
Резюме
Мы обсудили базовые понятия бесконтактной оплаты на стороне мобильных приложений. Рассмотрели основные компоненты поддержки бесконтактных платежей в Android-приложении и основные этапы процесса оплаты.
И вот, что у нас получилось:
Оплата одним касанием (в прошлой версии SberPay был заточен под двойное касание). Так удобнее всего для быстрой оплаты: махнул по терминалу, забрал покупки и пошёл по делам дальше.
Индивидуальный и Живой дизайн для Сберкарт. Просто небольшое отличие от всех остальных кошельков, чтобы порадовать глаз. Выбрав любимую картинку для Сберкарты в приложении, мы автоматически поставим ее на экран оплаты в SberPay.
Отображение баланса карт во время оплаты.
Оплата в пределах выбранной суммы без разблокировки телефона.
Подсказки на случай, если не хватит денег для оплаты.
Больше информации про нашу бесконтактную оплату:
Полезные источники: