Как вы думаете, когда и чем впервые оплатил человек?
Вряд ли это была знакомая всем карта с чипом и магнитной полосой во времена до нашей эры…
Конечно, альтернатива наличке появилась еще за пару тысяч лет до этого…

Generated by Kandinsky
Generated by Kandinsky

Началось все со старого доброго бартера, когда люди обменивались не 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. Токенизация

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

В нашем случае TSP — бекенд в контуре Сбера, конечно.
В нашем случае TSP — бекенд в контуре Сбера, конечно.

Как проходит токенизация:

  1. Аттестация устройства. Перед началом токенизации мобильное приложение аттестует устройство. Если проверка на доступность и безопастность успешна, то функциональность становится доступна, в противном случае мы скрываем точки входа. Со стороны Android-приложения работа с токенами, хранение и обновление данных в БД реализовано в SDK, который подключается к проекту.

  2. Регистрация кошелька. Чтобы токенизировать карту, сначала нужно зарегистрировать кошелёк. В мобильном приложении определённым алгоритмом генерируется идентификатор кошелька. После этого инициализируются ключи шифрования и приходит сертификат от SDK. Данные отправляются в бекенд, в SDK для аутентификации кошелька с учётом данных о самом устройстве. И если всё в порядке, то кошелёк активируется с ещё одной итерацией взаимодействия с бекендом. Этот процесс выполняется только один раз. То есть, если кошелёк ранее уже был активирован, то при токенизации карт берутся готовые данные о кошельке.

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

  1. Запрос на токенизацию. Когда пользователь добавляет карту МИР в мобильное приложение, оно отправляет запрос на токенизацию в TSP (Token Service Provider). В запросе указываются данные о карте и мобильном устройстве, после чего идёт запрос в платёжную систему (ПС),

  2. Создание токена. После получения запроса ПС проверяет возможность токенизации этой карты у банка-эмитента: нет ли ограничений, не заблокирована ли карта и т.д. При успешном ответе ПС создаёт уникальный токен и связывает его с соответствующей картой.

Далее ПС создаёт пачку платёжных ключей — обычно десяток (на одну транзакцию каждый раз тратится один ключ) — и отправляет в TSP. А сервис пересылает эти ключи с ID токена на хранение в мобильное приложение.

  1. Хранение токена. Кошелёк и мобильное приложение хранят ID токена в своей защищенной базе данных вместо реальных данных карты с пачкой ключей и данными об устройстве.

Теперь мы знаем что такое такое токен, и как он попадает к нам в телефон. Но как проходит оплата? Погружаемся.

Глава 4. Оплата

При проведении транзакции через мобильное устройство приложение общается с POS-терминалом через SDK и передаёт ID токена вместо реальных данных карты, с одним платежным ключом на терминал. Затем платёж проходит через стандартную цепочку участников: банк-эквайер → платёжная система → банк-эмитент и обратно.

Получив команду APDU (Application Protocol Data Units), ожидаемую для старта оплаты от удалённого устройства (терминала), мы вызываем обработку в SDK. Все APDU определены в спецификации ISO/IEC 7816-4, это пакеты уровня приложения, которыми обмениваются считыватель NFC и сервис HostApduService. Такой протокол является полудуплексным, то есть считыватель NFC отправляет вам команду APDU и ждёт APDU-ответ.

Взаимодействия между терминалом и сервисом NFC в приложении должно быть максимально быстрым. Весь процесс оплаты выглядит так:

  1. Подъём сервиса.

  2. Инициализация SDK.

  3. Обмен APDU-командами.

  4. Обратный вызов от SDK.

  5. Отображение экрана результата.

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

А чтобы все данные, которые лежат в кошельке, в TSP, в Платежной системе были одинаковые, необходимо обеспечить их синхронизацию.

Для обновления данных по токенам и кошельку необходима синхронизация с бекендом. Она выполняется при авторизации пользователя в приложении. В нашем приложении нужна ещё и фоновая синхронизация, для этого мы использовали workManager. Задача на синхронизацию ставилась в том числе и при оплате с соблюдением определённых условий.

Глава 5. Аутентификация CDCVM

Самое важное в процессе оплаты это что? Правильно. Б – безопасность.

А как сделать оплату NFC максимально безопасной, чтобы злоумышленник, приложив POS терминал к вашему карману, где лежит телефон, не смог списать какую-то крупную сумму, пока вы с ним третесь в час пик в метро?

Для этого используется технология CDCVM, которая расшифровывается как Consumer Device CVM. В этом случае пользователь вводит отдельный код доступа к платёжному приложению. Для запуска аутентификации на Android используется BiometricPrompt [2], с помощью которого выполняется системный запрос аутентификации с использованием одной из поддерживаемых биометрических технологий: отпечаток пальца или кодом.

Но и об удобстве не стоит забывать! Дополнительно, мы реализовали возможность оплачивать заблокированным телефоном. При этом можно даже выбрать сумму для оплаты, если вы этого сами хотите, без подтверждения отпечатком пальца или кодом: 100, 250, 500 или 1000 рублей.

Резюме

Мы обсудили базовые понятия бесконтактной оплаты на стороне мобильных приложений. Рассмотрели основные компоненты поддержки бесконтактных платежей в Android-приложении и основные этапы процесса оплаты.

И вот, что у нас получилось:

  1. Оплата одним касанием (в прошлой версии SberPay был заточен под двойное касание). Так удобнее всего для быстрой оплаты: махнул по терминалу, забрал покупки и пошёл по делам дальше.

  2. Индивидуальный и Живой дизайн для Сберкарт. Просто небольшое отличие от всех остальных кошельков, чтобы порадовать глаз. Выбрав любимую картинку для Сберкарты в приложении, мы автоматически поставим ее на экран оплаты в SberPay.

  3. Отображение баланса карт во время оплаты.

  4. Оплата в пределах выбранной суммы без разблокировки телефона.

  5. Подсказки на случай, если не хватит денег для оплаты.

Больше информации про нашу бесконтактную оплату:

Полезные источники:

Комментарии (20)


  1. VVitaly
    11.09.2023 16:10
    +3

    Технология оплаты токенами описана верно и правильно, именно она и обеспечивает безопасность платежей. А вот все остальное (касающееся "банковской" части) описано "с точки зрения" сбера и его технологий... :-)
    Токен - это просто идентификатор в конкретной платежной системе. Он может быть связан как с платежной картой, так и "непосредственно" с конкретным счетом клиента в конкретном банке - участнике платежной системой. Именно платежная система при оплате токеном "преобразует" его в "связанный" с ним идентификатором платежного средства. В НСПК это номер счета, для платежной системы МИР (как и для международных платежных систем VISA/Mastercard) номер карты (такой же идентификатор для платежных систем который в "конечном счете" "ведет" к номеру счета клиента в конкретном банке).


    1. Brendy Автор
      11.09.2023 16:10

      Виталий, спасибо!

      очень хорошее дополнение к статье!)


  1. PavelBelyaev
    11.09.2023 16:10

    Работает ли сберпей оффлайн? Помню эпл пей в глухой деревне работал, где у меня интернет не ловил, Самсунг вроде тоже так умел.


    1. maniak26
      11.09.2023 16:10

      Работает, на борту самолёта телефоном в авиа-режиме случилось проверить


    1. Brendy Автор
      11.09.2023 16:10

      Павел, конечно. В целом, кошельки практически все одинаково работают в оффлайне.


  1. zubrbonasus
    11.09.2023 16:10

    Когда проходит длительное время после оплаты, при следующей оплате нужно долго ждать пока же проснётся СберПэй и пройдёт оплата. Также нет лимита на максимальную покупку без подтверждения пин кодом как у карт. Это на мой взгляд большой минус приложения. В остальном все отлично. Живой дизайн карт - прекрасен ))).

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


    1. Brendy Автор
      11.09.2023 16:10

      привет! сделали лимит, как у карт. только дополнили возможность подтверждения пальцем или кодом на телефоне на определенную сумму свыше 100, 250, 500 и 1000 рублей на выбор.
      особенно удобно в метро и при маленьких покупках, махнуть телефоном без подтверждения на определенную, удобную для себя сумму. настраиваемая тема в разделе.

      по оффтопу - крутая тема! принято)


  1. maniak26
    11.09.2023 16:10

    Поддержку умных часов на Wear OS планируете добавить в светлом будущем?


    1. Brendy Автор
      11.09.2023 16:10

      классная тема. в светлом будущем - возможно. вот насколько оно далекое - пока непонятно)))


  1. lyucean
    11.09.2023 16:10

    Жаль, что работало жутко коряво и через раз. В конце концов, надоела эта чихорда, когда не знаешь, сработает или нет. Проще картку таскать. Pixel 6. В ТП так и не дождался никакой реакции. Если посмотреть рейтинг, там много таких.

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


    1. Brendy Автор
      11.09.2023 16:10

      Сейчас уже много чего успели поправить/улучшить. Большое внимание уделили, конечно, оплате. Разница между "тем" приложением и текущим уже ощутимая.

      Кстати, у меня самого был Pixel 6 на момент запуска. И нам с командой показалось, что это практически самая шустрая трубка (после топовой Самсы).

      Я всегда платил на нем через ярлык с живым дизайном. Никогда не подводил. Попробуй еще раз. если будут проблемы - смело го в лс.


  1. Hivemaster
    11.09.2023 16:10

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


    1. Brendy Автор
      11.09.2023 16:10

      привет! TSP - это по сути и есть наш кошелек (как Google Pay и тд). это сетевой сервис, не на мобиле. он не только проксирует запросы в МПС, а следит за всеми связками клиентов/кошельков/токенов/платежных ключей, а также за их актуализацией и синхроном данных.


  1. pechkinkorp
    11.09.2023 16:10

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

    Просто не видит приложение этих карт

    Телефон поко х3 нфц, последняя прошивка.

    Последняя версия приложения с пустор.

    Бесит просто.


    1. Brendy Автор
      11.09.2023 16:10

      Привет!
      Как раз написал про это "Но в России из-за санкций международные платёжные системы Visa и Mastercard (далее МПС) ушли, ведь именно платёжные системы создают токены и генерируют ключи, которые так нужны нам для оплаты. А за МПС ушли и привычные для нас сервисы токенизации карт." =)

      Пэй отображает и дает токенизировать только карты МИР. в том числе и кредитки (если она МИРовская).

      Кстати, у кредитки живой дизайн мне нравится больше всего)))


  1. xopyc69
    11.09.2023 16:10

    Да не пашет уже SberPay, с четверга не пашет, пришлось переходить на MirPay. Обращение в поддержку ничего не дали, сначала парили что к карте привязано много токенов, сделали типо очистку, посоветовали отвязать карту, перезагрузить смарт, потом опять привязать. И ничего не помогло. Не проходит оплата, пишет ошибка при выборе карты. Перешёл на MirPay и всё стало ровно, оплата проходит мгновенно.


  1. yanpurvenes
    11.09.2023 16:10

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

    А вот с решением от банков не все так гладко, из за попытки сделать это в основном приложении. Не хочет выдавать полный доступ. Часто бывают косяки с навигацией, что часто встречается у одного жёлтого банка и т.д. Главное, что не хочется давать в фоне работать приложению полность.


    1. RomanKu
      11.09.2023 16:10
      +1

      Тоже вернулся обратно на MirPay т.к. за последнее время он стал очень стабильно работать в отличие от конкурентов. Да еще и позволяет хранить в себе карты разных банков.


  1. RomanKu
    11.09.2023 16:10

    Как работает SberPay под капотом

    1. Вода

    2. Мы использовали SDK

    3. Немного базовых вещей про SDK и токенизацию без привязки к SberPay

    4. А еще мы добавили индивидуальный дизайн

    Ну вот реально статью можно было ужать до 2х картинок аля твиттер.

    Что хотелось увидеть в статье

    • Таки что же сломалось и как вы в течение полугода в поте лица восстанавливали SberPay

    • Чем ваша система отличается от конкурентов в лице MirPay?

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

    • Если карты МПС работают в России т.к. у нас заранее поставили сервера их процессинговых центров, то почему сломалась токенизация?

    А еще интересует следующий вопрос: если MirPay работает только с картами МИР, то почему нельзя сделать единое приложение для МПС типа GooglePay и добавить туда карты всех банков? Почему для Visa/MC каждый банк городит свой <BankName>Pay?


  1. vikarti
    11.09.2023 16:10

    А почему Сбер устроил тотальный бардак с рубашками.
    Обычная сберкарта новая дебетовая.
    Пластик только зеленый. Альтернатив тупо нет.
    В приложении — можно выбрать рубашки и даже анимированные.
    В MirPay при этом ничего не меняется и там своя уникальная рубашка для этих сберкарт.


    Почему у Тинькова и ВТБ таких проблем нет и везде отображается одинаковая рубашка(причем у Тинькова можно поменять и она изменится везде) ?


    Почему наконец Сбер не умеет карты в Samsung Pay добавлять через свое приложение? Санкции да — но ВТБ ж умеет, в том числе и в сероимпортные где вообще Samsung Wallet?