Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google Pay

Что собой представляет карта?

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

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

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

Баланс карты проверяется на терминале любой станции метро либо в личном кабинете официального сайта.

Конструктивно карта представлена чипом Mifare Plus, функционирующем в режиме SL 1. На оборотной стороне пластика нанесен номер из десяти цифр, используемый при удаленных пополнениях баланса Им же пользуются в качестве элемента для идентификации в СКУД.

Начало коммуникации — команда 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 // завершающий маркер

Основные задачи системы

  • Избавиться от лишних карт — в качестве идентификатора используется то, что уже есть у пользователя: транспортная карта, телефон или банковская карта. Какой идентификатор использовать — каждый выбирает сам. Система работает со всеми типами идентификаторов одновременно.
  • Избавиться от бюро пропусков и сложных программ управления — нам надоело выдавать и забирать карты у пользователей, держать отдельные компьютеры для управления пропусками, изучать переусложненные программы.
  • Управление через Telegram — заведение и удаления пользователей происходит удаленно и не требует компьютера.

Куда позвонить, чтобы узнать баланс?

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

Бюро пропусков в telegram

Чтобы каждый раз не обучать нового администратора, как пользоваться веб-интерфейсом контроллера, мы решили создать Telegram бота, через которого будет происходить добавление/удаление пропусков. Это возможно благодаря наличию в контроллере БОРЕЙ REST API.

Управление пропусками через Telegram-бота.

Возможности мобильного приложения

Приложение «Мой проездной» дает следующие возможности:

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

Возможности сервиса

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

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

Все о транспортной карте «тройка»

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

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

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

Оплатить проезд на МЦК можно проездными билетами «Единый», «Кошелек». Также можно пользоваться всеми льготами по социальным картам. При пересадке с метро на МЦК и обратно (на станции одного транспортно-пересадочного узла) в течение 90 минут с момента первого прохода дополнительная поездка не списывается.

Для проезда по Московским центральным диаметрам и бесплатной пересадки на метро и МЦК пассажирам необходимо перепрограммировать карту «Тройка», чтобы карта взаимодействовала с тарифным меню МЦД. Сделать это можно в кассах метро, билетных автоматах и желтых информационных терминалах, а также в кассах Центральной пригородной пассажирской компании. Новые карты, которые продают в кассах и билетных автоматах, активированы автоматически. В В границах станций Марк — Сетунь и Волоколамская — Остафьево.

«>«Центральной» зоне действуют все существующие

Билеты на 60 поездок, одни сутки, трое суток, 30 дней, 90 дней и 365 дней.»>абонементы метро

, которые записываются на «Тройку». Совершить поездку в зоне

За пределами станций Марк, Сетунь, Волоколамская, Остафьево и до конечных станций МЦД «Одинцово — Лобня», «Нахабино — Подольск».»>«Пригород»

можно по билету на одни сутки, трое суток, 30 дней, 90 дней и 365 дней, и билету «Кошелек». Эти абонементы необходимо записать на карту «Тройка». При этом для выезда в «Дальнюю» зону, которая находится за пределами станций МЦД, потребуется приобрести существующий пригородный абонемент или абонемент МЦД «Пригород» плюс существующий абонемент от конечной станции МЦД до станции назначения. Их также нужно валидировать на турникетах или валидаторах на вход и выход.

Все скуд неудобные

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

В некоторых случаях сложные СКУД необходимы: в крупных зданиях с множеством зон доступа, турникетами, охраной, временными пропусками.

В случаях, когда контролировать доступ нужно к одной или двум дверям, такие усложнения не оправданы. Даже содержание отдельного компьютера с программой под СКУД — перебор для нас.

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

Инструкция по установке

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

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

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

Стоит отметить, что при обмене СИМ-карты пользователь сохранит не только свой старый мобильный номер, но и средства, которые он раньше внес на баланс своего мобильного телефона.

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

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

Как пополнить счет?

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

Это можно сделать следующими способами:

  • через терминал банка;
  • в кассе метрополитена либо наземного транспорта;
  • через онлайн-банкинг;
  • с электронных кошельков;
  • через мобильное приложение;
  • по СМС.

Как устранять неисправности и сдавать карту тройка?

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

Решив не пользоваться картой Тройка, верните ее в кассу метрополитена. Залоговая стоимость продукта, обеспечивающего оплату за проезд, возвращается вам в полном объеме.

Карта «тройка» как идентификатор

Карта «Тройка» — пополняемая карта для оплаты проезда на всех видах общественного транспорта Москвы. Это наиболее выгодный и удобный способ оплаты общественного транспорта и некоторых городских услуг: планетарий, каток, зоопарки, Третьяковская галерея, парковка.

Технически карта выполнена на базе чипа Mifare Plus, работающего в режиме SL1 — режим эмуляции Mifare Classic 1K. На обратной стороне карты находится 10-значный номер, который используется для удаленного пополнения баланса карты. Этот номер удобно использовать в качестве идентификатора в СКУД.

Номер карты «Тройка», записан в памяти карты в 32-м блоке 8-го сектора. Для чтения защищенной области памяти необходим шестибайтный ключ, который давно не является таким уж секретным.

Номер карты «Тройка» (не путать c UID чипа) хранится в защищенной памяти в блоке 32 со второго байта по младшие четыре бита седьмого байта. Для чтения этой области памяти необходим А-ключ от сектора 8. Эти ключи давно не являются секретом и легко находятся в интернете вместе с подробным описанием формата хранения данных.

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

Вопросы безопасности такого подхода рассматриваются в FAQ в конце статьи. Примеры кода для чтения номера карты Тройка с помощью Arduino есть в главе «Первый прототип».

В Санкт-Петербурге существует похожая карта «Подорожник». При необходимости её можно также использовать в качестве идентификатора, одновременно с картой «Тройка».

Читайте ещё про NFC:  G4s nfc

Ключевые особенности считывателя pnr-p03e

  • Программируемый алгоритм чтения карт — возможность загрузки нестандартной прошивки позволяет реализовать любую логику считывания карт, в том числе одновременную поддержку карт EMV, «Тройки» и любых других. Функциональность считывателя может быть расширена обновлением прошивки.
  • Поддержка различных интерфейсов подключения контроллера — считанный идентификатор передается на контроллер по любому из доступных протоколов: Wiegand от 26 до 58 бит, OSDP (RS-485, RS-232), Touch memory (I-Button) и собственный проприетарный протокол Parsec
  • Отделяемый антенный модуль — плата имеет линию перфорации, позволяющую отделить антенну от основного модуля для удобства интеграции в корпус
  • SDK для разработки — библиотеки с примерами кода позволяют интегрировать считыватель в свои проекты

Блок-схема, иллюстрирующая работу считывателя. При успешном считывании идентификатора, он передается на контроллер по протоколу Wiegand.

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

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

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

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

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

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

Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google Pay
Плата контроллера БОРЕЙ в настенном корпусе

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

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

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

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

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

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

Обработка 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'

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

Видно, что значение 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 можно найти в

Карта ожидает ответ на 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-номер, а может и не содержать. (офигеть)

Первый прототип

Было решено использовать в качестве идентификатора пользователя 10-значный номер, который будет формироваться либо из десяти последних цифр PAN-номера платежной карты, либо из номера карты «Тройка». Идентификатор должен передаваться контроллеру, который будет сверять его с хранящимися в базе данных номерами и решать, открывать дверь, или нет.

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

Пожалуйста, не нужно больше карт!

                             — У вас уже есть наша карта?
— Пощадите…

Сейчас каждый хочет всучить вам свою карту: магазины, фитнес-клубы, парковки, бизнес-центры, VIP-скидки-баллы-накопления. Предлагать человеку носить с собой еще одну карту просто унизительно. А учитывая, что карты стандарта EM-Marine (125kHz), которые популярны в системах контроля доступа на территории СНГ, имеют толщину в три раза больше обычных ISO 7810 — это втройне унизительно.Поэтому первое требование к нашей системе — никаких дополнительных карт.

                     Сравнение толщины карт Em-Marine и ISO7810

Помимо физических размеров, карты EM-Marine технологически отсталые. Такую карту можно легко клонировать с расстояния полуметра прямо из кармана прохожего.

Поиск 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-номера можно изобразить в виде блок-схемы

Получится ли добавить «тройку» в wallet или google pay

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

Читайте ещё про NFC:  Как правильно расплачиваться в магазинах с помощью функции Samsung Pay

Пополнение баланса карты через apple pay

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

Есть возможность пополнения счета в онлайн-режиме. При этом телефон должен поддерживать функцию NFC. Зачислив денежные средства, приложите карту к смартфону, и счет пополнится дистанционно, через НФС-чип.

Работает ли «мобильный билет» на iphone

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

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

Важно! Правда, стоит учесть, что на сегодняшний день с помощью Айфонов оплатить проезд через «Мобильный билет» не получится. По этой причине для прохода в метро или оплаты проезда в общественном транспорте пользователи IOS-гаджетов могут пользоваться сервисом Эппл Пэй.

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

Сервис «мобильный билет», или как интегрировать карту «тройка» в смартфон

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

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

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

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

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

Смартфоном с nfc

Фото 7При наличии смартфона, поддерживающего Near Field Communication, можно использовать приложение «Тройка. Проверка баланса».

Достаточно только приложить карту Тройка с NFC и подождать, пока баланс высветится на экране.

Старт платежного приложения — 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

. Тот же ответ карты 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

Считыватель parsec

С самого начала мы не хотели городить кустарные поделки на arduino или raspberry pi, поэтому стали искать решение на базе промышленного оборудования.

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

Требования для установки сервиса

Для получения возможности использования услуги бесконтактной оплаты общественного транспорта нужно иметь современный смартфон (Самсунг, iPhone или смартфон любого другого бренда), который обладает встроенным чипом NFC, а также нужно получить специальную SIM-карточку, оснащенную аналогичным микрочипом.

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

Правда, следует помнить о том, что воспользоваться подобными антеннами могут пользователи только тех смартфонов, конструкция которых позволяет снимать крышку аккумуляторного отсека. Поэтому подключить внешний модуль NFC к современным телефонам от Samsung и Apple вряд ли получиться ввиду их цельной и неразборной конструкции.

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

Тройка и apple pay: можно ли привязать карту «тройка» и пополнить

На сегодняшний день, с помощью Apple Pay можно не только оплачивать покупки без наличии пластика в кармане и совершать денежные переводы через Apple Pay Cash.
Приложение Wallet работает в паре с самим платежным сервисов. Благодаря чему, в Соединенных Штатах и некоторых других странах пользователи могут использовать электронную версию проездных на метро, билетов на мероприятия и т.п.
В России таких возможности на продукции с IOS не было, но и нашу страну ждут изменения.

До конца года заработает цифровая версия транспортной карты «Тройка» в Apple Pay. С помощью нее вы сможете оплачивать проезд на общественном транспорте Москвы и области — достаточно иметь при себе смартфон.

Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google Pay

Чтобы добавить карту «Тройка» в Apple Pay, достаточно внести ее в само приложение для оплаты и подтвердить личность отпечатком пальца/Face ID, приложив телефон к турникету.

«Тройка» на IOS заработает официально до конца 2020 года, там уже и можно будет ответить на вопросы: как именно добавить карту «Тройка» в Apple Pay, как пополнить «Тройку» и когда подобные решения будут приняты не только для столицы.
Разработчики не планируют ограничиваться лишь пользователями Apple. Поддержку электронных транспортных карт получат и Google Pay вместе с Samsung Pay.
Таким образом, можно будет не носить с собой карту, а платить за проезд точно так же, как в магазине.

Возможно, создатели ждут выхода IOS 13, чтобы пользователи Iphone могли сами оцифровывать «Тройку». Известно, что с выходом обновления ОС будет возможность для модуля ближнего поля. С ним просто нужно будет отсканировать транспортную карту с помощью NFS и сохранить в приложении Wallet.

Нововведения сэкономят жителям Москвы их и без того ценное время, особенно, касательно транспорта.
А вам удобнее платить за проезд со смартфона/часов или вы привыкли по старинке?

Управление контроллером

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

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

Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google Pay
Создание нового пропуска в веб-интерфейсе контроллера БОРЕЙ

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

Установка приложения

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

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

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

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

Через интернет

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

Через смс

При отсутствии подключения к интернету проверить баланс можно через СМС. Для этого достаточно отправить сообщение со словом «Баланс» на номер 3210. В ответ придет смс, содержащее необходимую информацию. Учтите, что эта функция доступна только при привязке проездного к телефону.

Читайте ещё про NFC:  FAQ | Карта «Тройка»

Читаем 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, обработанный парсером:

Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google 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'

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

парсер

:

Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google Pay

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

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

Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google 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-номера можно изобразить в виде блок-схемы

Как привязать «Тройку» к телефону: Iphone, Android, в Wallet, Google Pay

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector