Как привязать карту Тройка к мобильному телефону: мобильное приложение, терминалы, СМС-сервис, как оплатить проездной и записать на него билет, способ зарегистрировать карточку на свой номер, порядок привязки и пополнения

Nfc «тройка» = «мой проездной»

При решении задач, связанных с разработкой интеграционного слоя между смартфоном и бесконтактной картой, нами использовались стандартные системные библиотеки, лицензированные владельцем технологии – компанией «NXP Semiconductors». Основной проблемой стало собственно определение типа NFC-контроллера.

Изначально предполагалось использовать стандартные функции, позволяющие при старте аппликации определять – поддерживает ли установленный NFC-контроллер взаимодействие с картами стандарта «Mifare Classic» или нет. В итоге пришлось модифицировать уже согласованный дизайн, поскольку выяснилось, что довольно большой процент бюджетных китайских смартфонов, оборудованных NFC-контроллером, всё-таки прекрасно поддерживает взаимодействие с «Тройкой», но при этом системная функция возвращала совершенно иной ответ.

Вообще, читая отзывы на маркете, начинаешь понимать несущественные на первый взгляд упущения. Так, например, многие думают, что бумажные билеты и карта «Тройка» – это одно и то же, и сильно удивляются, почему их карту приложение «Яндекс.Метро» читает, а приложение «Мой проездной» – нет. На самом деле, это совсем не так, «бумажные» билеты реализованы на носителях стандарта «Mifare Ultralight», а карта «Тройка» (на самом деле многоразовый носитель) использует стандарт «Mifare Classic», а это две большие разницы. Мы, кстати, в ближайших релизах поддержим чтение баланса «бумажных» билетов.

В целом поддержка работы с бесконтактными картами посредством мобильного телефона – это отдельная предметная область, поскольку питание бесконтактных карт реализовано на принципах индуктивности (чтобы было понятнее – вспомните обычный трансформатор, в нашем случае карт-ридер – это одна половинка трансформатора, а бесконтактная карта – другая половинка), и во многом это больше инженерные вопросы, чем собственно прикладное программирование.

Например, если чехол вашего смартфона поддерживает бесконтактную зарядку, то вероятность того, что даже при «правильном» NFC-контроллере будут читаться бесконтактные карты, не сильно высока. Дополнительные проблемы – это так называемые дуальные карты (т.е. карты, поддерживающие работу по контакту и бесконтакту), данные карты не только требовательны к питанию, но и зачастую требуют реализации для них отдельных алгоритмов взаимодействия.

Как добавить и подключить «тройку» к смартфону и как ею пользоваться

После приобретения карту придется интегрировать в мобильную технику с помощью специальных сервисов «Мобильный билет», представленных у телекоммуникационных операторов, включенных в «Большую четверку».

Нужные опции представлены у «Билайна», «Мегафона», «МТС» и «Теле2». Арендная плата за услугу равняется 0 рублей. Дополнительная комиссия и ежегодные платежи, не предусмотрены. Единственное с чем придется разобраться – с несложным алгоритмом действий:

  1. Сначала бесплатная замена текущей SIM-карты на новую с поддержкой технологии NFC. Номер телефона останется прежним. Не нужно беспокоиться и о смене тарифного плана и действующих опций: операторы не меняют условий заключенных контрактов.
  2. Далее установка новой SIM-карты и активация сервиса «Мобильный банк». Вариантов два: или через обращение на горячую линию (в службу поддержки), или с помощью фирменного мобильного программного обеспечения выбранного оператора.
  3. Последний шаг – активация модуля NFC на Android или Windows Mobile. Соответствующие опции представлены в «Настройках» в разделе «Сеть». Ползунок модуля бесконтактных платежей придется перевести в активное положение.
  4. Настройка полностью завершена. Для совершения платежей «Тройка» через телефон с NFC предлагает поднести платежное средство к считывающему терминалу и подтвердить процедуру вводом пароля или проверкой биометрических данных.

Важно! На мобильной технике от Apple платежи через «Мобильный билет» не доступны. Не смотря на наличие модуля NFC (в iPhone, iPad и Apple Watch). Для бесконтактной оплаты на транспортных терминалах Москвы нужны определенные протоколы, связанные с чтением и записью информацию на чип. Выставленные ограничения во многом связаны с политикой Apple. И, возможно, ситуация изменится уже в ближайшем будущем – с релизом новой техники.

Как зарегистрировать карту «тройка» в программе лояльности «город»

Эта система создана в 2021 году и предназначена для накопления скидок и бонусов. Их впоследствии можно потратить на оплату услуг в кафе и ресторанах, магазинах, театрах и даже на стойках велопроката. На данный момент программа «Город» насчитывает более 300 онлайн-партнеров и 5000 магазинов в Москве и МО.

Пройти регистрацию в системе можно через ее официальный портал или приложение, доступное в AppStore и Google Play Market.

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

Технические требования к приложению:

  • Apple – iOS старше 10.0. Возможна установка на iPhone, iPad, iPod Touch.
  • Android – версия системы выше 5.0.

Принцип взаимодействия с приложением «Город»:

  1. После запуска и представления основных возможностей (предъявление в магазинах, соотношение бонусов и рублей) появится кнопка «Регистрация» – нажимайте на нее.
  2. Для проведения процедуры потребуется ввести 10-значный номер «Тройки». Также внизу доступен вариант входа через имеющийся аккаунт.
  3. Для проведения привязки (подтверждения законного использования карты) на следующем шаге появится окно с просьбой указать 2 станции метро, посещенных в последнем месяце. После их введения внизу появится кнопка «Далее».Как привязать карту «Тройка» к телефону
  4. Для привязки карты также потребуется номер телефона – на него придет проверочный код. Сюда же будет приходить пароль во время обмена бонусов на скидку при покупке или оплате услуги.
  5. Дальше заполняются обычные персональные данные: ФИО, дата рождения, пол. Обязательно указывается и актуальная электронная почта. Как привязать карту «Тройка» к телефону
  6. После этого программа предложит создать 4-значный пароль. Он же будет использоваться для входа в личный кабинет на официальном портале «Города».

Как оплатить карту тройка через сбербанк онлайн с телефона?

Перечислить средства за проезд на транспорте, можно одним из следующих методов:

  • В Сбербанк Онлайн;
  • Приложения для iphone или андроид;
  • В банковских терминалах;
  • Используя мобильный банк.

Говоря иными словами, пополнить можно разнообразными способами. С активов иных платежных инструментов. Если это другой банк, потребуется указать реквизиты эмитента. Пополнение выглядит так:

  1. Следует зайти в Личный раздел через пароль.
  2. Здесь нужно найти вкладку с переводом и платежами.
  3. Выбирается Транспорт.
  4. В перечне предоставляемых услуг следует добавить Тройку.
  5. Вносятся сведения карты, откуда будет осуществляться списание.
  6. После нажатия на Продолжить, следует проверить информацию.
  7. Нужно записать требуемую сумму.
  8. Подтверждается платеж через нажатие на соответствующую опцию.
  9. Зачисление осуществляется в ту же минуту.

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

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

Есть еще один вариант внесения денег – использование счета google pay. Сделать это разрешается через терминал. Выполняются такие действия:

  • Запускается приложение из и проводится авторизация через код;
  • Выбирается опция Платежи. Потом Тройка и Транспорт;
  • Вводится номер банковского пластика;
  • Следует выбрать счет, откуда программа спишет деньги;
  • Вносятся деньги для оплаты;
  • Операция подтверждается с помощью кода.

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

Как проверить баланс счета

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

  1. Желтый терминал.

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

  2. Официальные приложения от разработчиков: «Тройка Проверка баланса», «Транспортные карты Москвы», «Мой проездной».

    проверка баланса тройки в приложении
    Все владельцы мобильных гаджетов Android, iOS со встроенной функцией NFC, смогут быстро произвести проверку баланса через установленное приложение. Для этого нужно приложить карту к задней панели смартфона, после чего на экран телефона выводятся все необходимые сведения с карты.

  3. Опция «Мобильный билет».

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

  4. SMS-сообщение. Мобильные операторы МТС, Билайн и Мегафон ввели для своих абонентов специальный короткий номер для проверки баланса и оставшегося количества поездок по действующему абонементу. На номер 3210 посылается СМС со словом – баланс – после чего абонент получает интересующие сведения в ответном SMS-сообщении.

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

Контроллер борей

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

Часто контроллеры СКУД состоят из нескольких блоков управления и компьютера с базой данных. Мы принципиально не хотели держать отдельный компьютер и искали компактное решение в виде одного устройства, которым можно управлять через API для интеграции с Telegram-ботом.

Поиск такого устройства занял больше месяца, пока я не наткнулся на старую статью на хабре «Обзор СКУД с бесплатным программным обеспечением». В комментариях пользователь rgmih упомянул, что их компания производит именно такой контроллер.

Так мы нашли контроллер БОРЕЙ от компании ИТРИУМ.

Плата контроллера БОРЕЙ в настенном корпусе

Устройство работает под управлением Linux на базе ARM-процессора.

Основные достоинства устройства, которые редко можно встретить у других контроллеров:

  • Полностью автономный — все функции выполняет одно устройство. Для управления не нужно дополнительных программ или отдельного компьютера. База данных хранится на SD-карте. При отключении интернета контроллер продолжит работать.
  • Web интерфейс и REST API — возможность управлять контроллером через браузер и интегрировать с Telegram-ботом через API. Позволяет управлять пропусками удаленно.
  • Подключение по Ethernet — устройство подключается в IP-сеть. Имеет встроенный коммутатор на 2 порта.
  • Идентификаторы произвольной длины до 64 бит — возможность интегрировать контроллер с нестандартными идентификаторами разной длины. Позволяет иметь гибридную систему с идентификаторами разной длины.

В момент считывания карты, считыватель передает прочитанный идентификатор карты на контроллер по протоколу Wiegand. Контроллер ищет идентификатор в своей базе данных и решает, можно ли этому идентификатору открывать дверь или нет.

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

Если доступ запрещен, контроллер посылает сигнал индикации на считыватель, и тот горит красным цветом и пищит о том, что доступ не разрешен.

Контроллер подключается в сеть c помощью Ethernet-кабеля. Начальная настройка требует только задать IP-адрес устройства. Никакого программного обеспечения, помимо браузера, не требуется.

Учетные записи заводятся в меню «Бюро пропусков». Чтобы не вводить идентификатор карты вручную, его можно поднести к считывателю в момент создания учетной записи.

Создание нового пропуска в веб-интерфейсе контроллера БОРЕЙ

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

Обработка pdol (processing options data object list)

В ответ на запуск платежного приложения карта может затребовать от считывателя PDOL (Processing Options Data Object List). Это набор параметров POS-терминала — поддерживаемые протоколы и стандарты, валюта, в которой будет производиться расчет, дата, случайное число для криптографии, и так далее.

Список PDOL может различаться у разных карт. Общее число параметров PDOL — несколько десятков. Полный список параметров PDOL можно посмотреть здесь: eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags.Сложность состоит в том, что список PDOL у разных карт, даже выпущенных одним банком в разное время, может существенно различаться. Некоторые карты запрашивают два-три параметра, другие — десяток.

Это очень важный момент, так как некоторые карты могут отказаться работать без корректного ответа PDOL. Поэтому, для получения PAN-номера от всех карт, нам придется прикинуться настоящим POS-терминалом. Напомню, что единственной нашей целью является получения PAN-номера. Поэтому попытаемся сформировать максимально простой, но при этом корректный ответ PDOL.

Ответ карты на старт платежного приложения. Содержит запрос PDOL.

'6F 31 84 07 A0 00 00 00 03 10 10 A5 26 9F 38 18 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 BF 0C 08 9F 5A 05 60 08 40 06 43 90 00'

Пропустим этот ответ через

https://www.youtube.com/watch?v=6a0WrxghwLw

парсер

Видно, что значение PDOL начинается с маркера 9F38 и равно 9F66049F02069F03069F1A0295055F2A029A039C019F3704. Парсер emvlab.org не умеет парсить значения PDOL, поэтому воспользуемся программой для Android-смартфонов Credit Card Reader.

Вот тот же ответ, обработанный более умным парсером. Видно каждый параметр PDOL:

Данный парсер не скрывает байт длины после маркера, как это делает emvlab.org. Поэтому последний байт каждого маркера следует читать как длину.

Разберем запрос PDOL подробнее

9F 38 18 // Маркер начала PDOL. Длина 18 (24 байта) 
 9F 66 (длина 04) // Terminal Transaction Qualifiers (TTQ). Параметры платежного терминала 
  9F 02 (длина 06) // Сумма списания
   9F 03 (длина 06) // вторая сумма
   9F 1A (длина 02) // Код странцы в формате ISO3166-1
   95 (длина 05) // Terminal Verification Results
    5F 2A (длина 02) // Код валюты, в которой работает терминал, в формате ISO4217
     9A (длина 03) // Дата в формате YYMMDD
      9C (длина 01) // Тип транзакции 
       9F 37 (длина 04) // Случайное число для криптографии

Подробное описание всех возможных параметров PDOL можно найти в

EMV Contactless Specifications Book C-1/2/3 Kernel 1/2/3 Specification.

Карта ожидает ответ на PDOL в том же порядке, в котором следуют запросы, и ровно той длины, которая указана после каждого параметра PDOL. Если сложить длину всех параметров (последний байт каждого параметра), получится 33 байта. Значит карта ожидает от считывателя PDOL длиной в 33 байта.

Так как мы не собираемся списывать с карты деньги, наша задача — сформировать самый простой из возможных ответ PDOL, который удовлетворит карту. Если наш ответ не понравится карте, она ответит кодом 6985 Conditions of use not satisfied.

Экспериментальным путем я выяснил, что почти на все запросы PDOL можно ответить нолями, кроме Terminal Transaction Qualifiers (TTQ). В случае с VISA, нам нужно убедить карту в том, что терминал соответствует спецификации VCPS 2.1.1. Для этого ответ на TTQ должен выглядеть так:

'F0 00 00 00'

Подробнее про формат TTQ

здесь

Карты MasterCard, которые мне довелось испытать, позволяли игнорировать PDOL и отдавали PAN-номер без корректного ответа на PDOL.

Вот как будет выглядеть минимальный рабочий ответ на запрошенный выше PDOL:

'80A80000238321F0000000000000000000000000000000000000000000000000000000000000000000'
 80 A8 00 00 // Команда GET PROCESSING OPTIONS (GPO)
  23 // длина всего запроса (35 байт)
   83 // маркер PDOL-ответ
    21 // длина PDOL-ответа (33 байта)
     F0 00 00 00 // Terminal Transaction Qualifiers (TTQ)
      00 00 00 00 00 00 // Сумма списания
       00 00 00 00 00 00 // Вторая сумма
        00 00 // Код страны считывателя
         00 00 00 00 00 // Terminal Verification Results (TVR)
          00 00 // Валюта
           00 00 00 // дата 
            00 // тип транзакции
             00 00 00 00 // Случайное число 

Если наш ответ удовлетворил карту, мы получим сообщение, начинающееся с маркера

с кодом SW2=9000. Этот ответ может содержать нужный нам PAN-номер, а может и не содержать. (офигеть)

Оплата проезда

Транспортная карта «Тройка» — электронная карта для оплаты проезда на городском транспорте и услуг городских сервисов. Залоговая стоимость «Тройки» — 50 рублей. Залог можно вернуть при возврате карты в кассу.

Также выпущены объединённые транспортные карты «Тройка» с приложением «Стрелка» и транспортные карты «Стрелка» с приложением «Тройка». Используя данные карты, пассажиры могут быстро и без очередей оплачивать проезд в общественном транспорте Москвы и Московской области.

troika.jpg

Карту «Тройка» с транспортным приложением «Стрелка» можно получить в кассах ГУП «Московский метрополитен». Карта «Стрелка» с установленным приложением «Тройка» доступна в кассах ГУП МО «Мострансавто». Карты с объединённым функционалом имеют ту же залоговую стоимость, что и обычные карты.

Пополнить баланс объединённой транспортной карты можно с помощью агентской сети пополнения карты «Тройка» и карты «Стрелка», например, в салонах связи «Связной» и «Евросеть», терминалах «Элекснет», кассах и терминалах ОАО «Центральная ППК» и других. Полный список точек пополнения объединённых транспортных карт опубликован на Едином Транспортном Портале и на Официальном сайте транспортной карты «Стрелка».

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

Карты «Тройка» с транспортным приложением «Стрелка» можно приобрести в кассах метрополитена на станциях: «Юго-западная», «Теплый стан», «Бульвар Дмитрия Донского», «Южная», «Выхино», «Котельники», «Косино», «Новокосино», «Новогиреево», «Партизанская», «Щелковская», «ВДНХ», «Медведково», «Тимирязевская», «Речной вокзал», «Ховрино», «Белорусская» Замоскворецкой линии, «Белорусская» Кольцевой линии, «Планерная», «Сходненская», «Тушинская», «Курская» Арбатско-Покровской линии, «Курская» Кольцевой линии, «Павелецкая» Замоскворецкой линии, «Комсомольская» Сокольнический линии, «Комсомольская» Кольцевой линии «Домодедовская», «Кантемировская», «Киевская» Арбатско-Покровской линии, «Киевская» Кольцевой линии, «Парк Победы» Арбатско-Покровской линии.

Билеты, реализуемые на бумажных носителях, также могут быть записаны на карту «Тройка»!

Тарифы МЦД

Публичная оферта использования карты «Тройка» и карт, содержащих транспортное приложение, владельцем которого является ГУП «Московский метрополитен».

Порядок использования проездных билетов.

Пополнение баланса билета «Кошелёк» карты «Тройка» доступно напрямую из официального мобильного приложения «Метро Москвы»*

* — на мобильных устройствах с поддержкой технологии NFC.

Дает право на совершение поездок в пределах зачисленной суммы по фиксированным тарифам. Карту можно пополнить на сумму до 3 000 руб.

Тариф «90 минут» активируется автоматически при пересадке на другой транспорт. По нему можно совершить одну поездку на метро, монорельсе, МЦК или МЦД и неограниченное количество поездок на наземном транспорте.

Бесплатная пересадка при поездках на МЦД – только на метро, монорельс и МЦК (и обратно). Пересадка на наземный транспорт – платная.

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

Пересесть бесплатно в наземном транспорте можно по карте «Тройка», привязанной к личному кабинету в приложении «Метро Москвы» или на сайте nfcexpert.ru.
Как это сделать?

Одна поездка на метро, монорельсе, МЦК, МЦД зона «Центральная» или неограниченное количество поездок на наземном транспорте в течение 90 минут42
Поездка на метро, монорельсе, МЦК и МЦД зоны «Центральная», «Пригород»50
Поездка на метро, монорельсе, МЦК, МЦД зона «Центральная» неограниченное число пересадок на наземном транспорте в течение 90 минут65

Привязка «тройки» к nfc через приложение «мой проездной»

Электронный сервис платежей под названием «Мобильный билет» был специально создан для обеспечения возможности оплаты проезда в городском транспорте с помощью бесконтактных платежных технологий.

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

Для того чтобы зарегистрироваться и активировать доступ к этому сервису, пользователь должен действовать согласно следующему алгоритму:

  • для начала нужно приобрести СИМ-карту с интегрированным сервисом или обменять свою старую СИМ-карту на новую;
  • на следующем этапе нужно дать согласие на использование этой услуги;
  • при необходимости система будет списывать с баланса мобильного счета денежные средства в качестве оплаты за проезд;
  • за счет использования специальных мобильных программ, которые можно загрузить в Плей маркете или магазине приложений для Айфонов, юзер сможет добавлять новые транспортные карты, выступающие в качестве проездных талонов.

Независимо от оператора мобильной связи, весь процесс настройки и записи «Мобильного билета» на смартфон, работающий под управлением Android или IOS, будет проходить согласно вышеописанной схеме. Посмотреть список смартфонов, поддерживающих возможность записи платежной карты, можно на специальных ресурсах, а также на сайтах производителей мобильных телефонов.

Закачать на мобильное устройство официальное приложение «Мобильный билет» можно через сервисы Гугл, а также через магазин приложений Apple.

Также можно загрузить это приложение на IOS-устройства с официального сайта мобильного сервиса.

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

Для получения возможности полноценного использования универсального электронного проездного «Тройка» нужно разобраться в способах привязки этого платежного инструмента к устройствам, оборудованным чипами NFC.

Подобная операция проводится с помощью приложения «Мой проездной» или же через мобильную программу «Транспортные карты Москвы». Важно учесть, что на возможность привязки карты к смартфону влияет его операционная система, так как IOS не позволяет привязать такую карточку.

Прежде чем перейти к этапу привязки «Тройки» к смартфону с NFC-чипом, рекомендуется проверить версию операционной системы Андроид мобильного устройства. Для получения доступа ко всем функциям платежного инструмента устройство должно работать на Андроиде не ниже четвертой версии.

Чтобы привязать карточку «Тройка» к NFC, нужно открыть приложение «Мой проездной», после чего пройти простую процедуру регистрации. Для этого нужно указать паспортные данные пассажира, номер его мобильного телефона, адрес электронной почты, а также создать пароль от новой учетной записи.

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

Для обеспечения полноценной работы приложения необходимо обеспечить стабильное интернет-подключение.

Процедура привязки «Тройки» к NFC-чипу предполагает работу смартфона на операционной системе Android выше четвертой версии. Также мобильный телефон должен иметь встроенный чип NFC или же внешнюю антенну с подобным датчиком.

Сам процесс установки выглядит следующим образом:

  • сначала нужно зайти в магазин приложений от Гугл;
  • после этого в строке поиска потребуется ввести соответствующий поисковой запрос;
  • далее нужно нажать на кнопку «Установить», после чего начнется процесс загрузки и последующей установки приложения на мобильное устройство.

Для того чтобы пользоваться приложением, а также для обеспечения возможности добавления «Тройки» в Wallet, нужно, чтобы смартфон был подключен к интернету.

Жители столиц, которые часто пользуются общественным транспортом, обычно используют для оплаты проезда карту «Тройка». Это платежное средство давно стало привычным и удобным. Поэтому часто возникает вопрос, как добавить карту «Тройка» в Apple Pay, чтобы продолжать пользоваться ею через смартфон.

Увы, внести транспортную карту в память гаджета возможности нет. Сервис Apple Pay рассчитан на работу исключительно с банковскими картами систем Visa и MasterCard. А Тройка не является банковской картой и, соответственно, не удовлетворяет необходимым условиям привязки к платежному сервису:

  • карта не относится ни к одной платежной системе;
  • номер «Тройки» не совпадает со стандартами нумерации банковских карт (11 символов вместо 12-ти);
  • у «Тройки» нет кода безопасности;
  • карта не имеет фиксированного срока годности (она действует в течение 5 лет после последнего применения).

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

Старт платежного приложения — select aid

В ответ на SELECT PPSE карта должна вернуть FCI (File Control Information) со списком приложений, существующих на карте. Помимо платежных приложений (VISA, MasterCard, AmericanExpress) карта может содержать неплатежные приложения, используемые для других нужд.

Ответ карты VISA на SELECT PPSE

'6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00'

Для удобства проанализируем ответ с помощью онлайн-парсера формата TVL

emvlab.org/tlvutils/

. Тот же ответ карты VISA, обработанный парсером:

Из всего этого нас интересует только идентификатор платежного приложения (AID). В данном случае, это значение A0000000031010, означающее Visa International.

AID помечается маркером 4F. Вторым битом после маркера следует длина данных, в нем содержащихся. Несмотря на то, что длина AID может варьироваться от 5 до 16 байт, в большинстве случаев она равна 7 байтам. Поэтому для простоты поиска AID в ответе, мы будем искать маркер 4F 07 и считать 7 байт после него как AID.

Такой подход очень примитивный и может не работать в случаях, если длина AID будет другой, но для нашей задачи это не важно, так мы скорее всего никогда не столкнемся с картами, отличными от Visa и MasterCard. Поэтому наш самодельный парсер PPSE-ответа можно упростить до такой логики: если ответ начинается с 6F, заканчивается на 90 00 и содержит внутри последовательность 4F 07, ответ считается корректным.

Полный список AID: eftlab.co.uk/knowledge-base/211-emv-aid-rid-pix

Некоторые популярные AID

A0000000031010 Visa International
A0000000032020 Visa International
A0000000041010 Mastercard International
A0000000043060 Mastercard International United States Maestro (Debit)

Получив значение AID, его нужно запустить командой SELECT. В данном случае мы запускаем приложение Visa International, полученное из ответа на PPSE SELECT

APDU-команда SELECT AID

'00 A4 04 00 07 A0 00 00 00 03 10 10'
  00 A4 04 00 // команда select 
   07 // длина command data (7 байт)
    A0 00 00 00 03 10 10 // AID Visa International

Читаем emv-карты на коленке

Читать EMV-карты можно любым NFC-ридером, поддерживающим передачу произвольных APDU-команд. Для этого не требуются промышленные сертифицированные ридеры, подойдет любой модуль для Arduino за $3

Чтобы изготовить прототип считывателя, мне потребовалось бегло изучить протокол EMV. Под спойлером — краткий разбор протокола EMV с примерами чтения на Arduino и компьютере.

Читаем банковские карты на коленке с примерами. (Много текста)

Для чтения EMV карт подойдут такие устройства:

Описанный ниже процесс не является корректной реализацией протокола EMV. Приведенные команды APDU содержат ошибки и нарушают рекомендации EMVco, из-за чего могут не работать с некоторыми картами.

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

Приведенные APDU-команды будут одинаковыми не зависимо от выбранного оборудования. Однако в случае с PC/SC ридером не нужно заботиться о низкоуровневых командах, настраивать модуляцию и т.д.

Я буду использовать программу SmartCard Scripter, в связке с PC/SC-ридером HiD Omnikey. Программа SmartCard Scripter имеет наиболее компактный pascal-подобный синтаксис из всего что я видел. Краткое описание синтаксиса infintuary.org/scs_tut.php

Для того чтобы послать произвольную APDU команду на карту, достаточно такого когда:

// Программа для чтения UID карты
begin
  APDU('FF CA 00 00 00');
end.

Начало коммуникации — команда select (ppse)

Официальное описание: EMV Contactless Specifications — PPSE and Application Management for Secure Element

Начало общения с EMV-картой всегда происходит с чтения файла PPSE (Payment System Environment) командой SELECT.

APDU-команда SELECT PPSE

'00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00'
  00 A4 04 00 // команда select 
   0E // длина command data (14 байт)
    32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 // command data 2PAY.SYS.DDF01
    00 // завершающий маркер

Старт платежного приложения — select aid

В ответ на SELECT PPSE карта должна вернуть FCI (File Control Information) со списком приложений, существующих на карте. Помимо платежных приложений (VISA, MasterCard, AmericanExpress) карта может содержать неплатежные приложения, используемые для других нужд.

Ответ карты VISA на SELECT PPSE

'6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00'

Для удобства проанализируем ответ с помощью онлайн-парсера формата TVL

emvlab.org/tlvutils/

. Тот же ответ карты VISA, обработанный парсером:

Как добавить карту Тройка в Apple Pay. Инструкция.

Из всего этого нас интересует только идентификатор платежного приложения (AID). В данном случае, это значение A0000000031010, означающее Visa International.

AID помечается маркером 4F. Вторым битом после маркера следует длина данных, в нем содержащихся. Несмотря на то, что длина AID может варьироваться от 5 до 16 байт, в большинстве случаев она равна 7 байтам. Поэтому для простоты поиска AID в ответе, мы будем искать маркер 4F 07 и считать 7 байт после него как AID. Такой подход очень примитивный и может не работать в случаях, если длина AID будет другой, но для нашей задачи это не важно, так мы скорее всего никогда не столкнемся с картами, отличными от Visa и MasterCard. Поэтому наш самодельный парсер PPSE-ответа можно упростить до такой логики: если ответ начинается с 6F, заканчивается на 90 00 и содержит внутри последовательность 4F 07, ответ считается корректным.

Полный список AID: eftlab.co.uk/knowledge-base/211-emv-aid-rid-pix

Некоторые популярные AID

A0000000031010 Visa International
A0000000032020 Visa International
A0000000041010 Mastercard International
A0000000043060 Mastercard International United States Maestro (Debit)

Получив значение AID, его нужно запустить командой SELECT. В данном случае мы запускаем приложение Visa International, полученное из ответа на PPSE SELECT

APDU-команда SELECT AID

'00 A4 04 00 07 A0 00 00 00 03 10 10'
  00 A4 04 00 // команда select 
   07 // длина command data (7 байт)
    A0 00 00 00 03 10 10 // AID Visa International

Обработка pdol (processing options data object list)

В ответ на запуск платежного приложения карта может затребовать от считывателя PDOL (Processing Options Data Object List). Это набор параметров POS-терминала — поддерживаемые протоколы и стандарты, валюта, в которой будет производиться расчет, дата, случайное число для криптографии, и так далее.

Список PDOL может различаться у разных карт. Общее число параметров PDOL — несколько десятков. Полный список параметров PDOL можно посмотреть здесь: eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags.
Сложность состоит в том, что список PDOL у разных карт, даже выпущенных одним банком в разное время, может существенно различаться. Некоторые карты запрашивают два-три параметра, другие — десяток.

Это очень важный момент, так как некоторые карты могут отказаться работать без корректного ответа PDOL. Поэтому, для получения PAN-номера от всех карт, нам придется прикинуться настоящим POS-терминалом. Напомню, что единственной нашей целью является получения PAN-номера. Поэтому попытаемся сформировать максимально простой, но при этом корректный ответ PDOL.

Ответ карты на старт платежного приложения. Содержит запрос PDOL.

'6F 31 84 07 A0 00 00 00 03 10 10 A5 26 9F 38 18 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 BF 0C 08 9F 5A 05 60 08 40 06 43 90 00'

Пропустим этот ответ через

парсер

:

Как добавить карту Тройка в Apple Pay. Инструкция.

Видно, что значение PDOL начинается с маркера 9F38 и равно 9F66049F02069F03069F1A0295055F2A029A039C019F3704. Парсер emvlab.org не умеет парсить значения PDOL, поэтому воспользуемся программой для Android-смартфонов Credit Card Reader.

Вот тот же ответ, обработанный более умным парсером. Видно каждый параметр PDOL:

Как добавить карту Тройка в Apple Pay. Инструкция.

Данный парсер не скрывает байт длины после маркера, как это делает emvlab.org. Поэтому последний байт каждого маркера следует читать как длину.

Разберем запрос PDOL подробнее

9F 38 18 // Маркер начала PDOL. Длина 18 (24 байта) 
 9F 66 (длина 04) // Terminal Transaction Qualifiers (TTQ). Параметры платежного терминала 
  9F 02 (длина 06) // Сумма списания
   9F 03 (длина 06) // вторая сумма
   9F 1A (длина 02) // Код странцы в формате ISO3166-1
   95 (длина 05) // Terminal Verification Results
    5F 2A (длина 02) // Код валюты, в которой работает терминал, в формате ISO4217
     9A (длина 03) // Дата в формате YYMMDD
      9C (длина 01) // Тип транзакции 
       9F 37 (длина 04) // Случайное число для криптографии

Подробное описание всех возможных параметров PDOL можно найти в

EMV Contactless Specifications Book C-1/2/3 Kernel 1/2/3 Specification.

Карта ожидает ответ на PDOL в том же порядке, в котором следуют запросы, и ровно той длины, которая указана после каждого параметра PDOL. Если сложить длину всех параметров (последний байт каждого параметра), получится 33 байта. Значит карта ожидает от считывателя PDOL длиной в 33 байта.

Так как мы не собираемся списывать с карты деньги, наша задача — сформировать самый простой из возможных ответ PDOL, который удовлетворит карту. Если наш ответ не понравится карте, она ответит кодом 6985 Conditions of use not satisfied.

Экспериментальным путем я выяснил, что почти на все запросы PDOL можно ответить нолями, кроме Terminal Transaction Qualifiers (TTQ). В случае с VISA, нам нужно убедить карту в том, что терминал соответствует спецификации VCPS 2.1.1. Для этого ответ на TTQ должен выглядеть так:

'F0 00 00 00'

Подробнее про формат TTQ

здесь

.

Карты MasterCard, которые мне довелось испытать, позволяли игнорировать PDOL и отдавали PAN-номер без корректного ответа на PDOL.

Вот как будет выглядеть минимальный рабочий ответ на запрошенный выше PDOL:

'80A80000238321F0000000000000000000000000000000000000000000000000000000000000000000'
 80 A8 00 00 // Команда GET PROCESSING OPTIONS (GPO)
  23 // длина всего запроса (35 байт)
   83 // маркер PDOL-ответ
    21 // длина PDOL-ответа (33 байта)
     F0 00 00 00 // Terminal Transaction Qualifiers (TTQ)
      00 00 00 00 00 00 // Сумма списания
       00 00 00 00 00 00 // Вторая сумма
        00 00 // Код страны считывателя
         00 00 00 00 00 // Terminal Verification Results (TVR)
          00 00 // Валюта
           00 00 00 // дата 
            00 // тип транзакции
             00 00 00 00 // Случайное число 

Если наш ответ удовлетворил карту, мы получим сообщение, начинающееся с маркера

77

с кодом SW2=9000. Этот ответ может содержать нужный нам PAN-номер, а может и не содержать. (офигеть)

Поиск pan-номера

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

PAN-номер может содержаться в трех местах:

APDU-команды (что они значат вообще? Хз, нужно прочитать)

'00 b2 01 1c 00'
'00 b2 01 0c 00'
'00 b2 02 0c 00'
'00 b2 01 14 00'
'00 b2 02 14 00'
'00 b2 04 14 00'

И парсим все ответы на предмет маркеров

57 13

либо

5A 08

. Найденные 8 байт карты можно дополнительно чекнуть на контрольную сумму с помощью

Алгоритма Луна

.

Если номер валидный, берем его последние десять цифр.

В итоге наш примитивный алгоритм чтения PAN-номера можно изобразить в виде блок-схемы

Как добавить карту Тройка в Apple Pay. Инструкция.

Добавить комментарий

Ваш адрес email не будет опубликован.

Adblock
detector