Я как-то писал о том, как программируют банкоматы. Сегодня - сказ о том, какие варианты диалога в этих программах предусмотрены.
После того, как банкомат прочитал карту, обычно сценарий пытается решить, по какой ветке сценария идти дальше. Дело в том, что в сценарии обычно предусмотрено несколько разных веток. По какой из них идти - зависит от конкретной карты. Основных варианта три. Это "свои", "чужие" и "административные" карты. Вообще говоря, для каждого типа (и для своих, и для чужих, и для административных) карт сценарий может дополнительно ветвиться в зависимости от того, какие услуги банк желает предоставить клиенту (или инкассатору, "административные" карты - у них).
Разделение на три главных ветки существует вот почему. Ну, про административные карты понятно, там совсем другие операции. Изменить счетчики купюр, выполнить балансировку банкомата и т.д. Понятно, что обычным посетителям банкомата такой сценарий показывать нельзя ни в коем случае. Поэтому "административная" ветка отдельная. А по поводу двух других веток давайте поговорим чуть-чуть подробнее.
Свои и чужие
Главная причина, по которой приходится делить карты на "свои" и "чужие" вот в чем. Когда приходит наш клиент, у которого счет - в нашем банке, то мы знаем об этом клиенте очень много. Я бы сказал, слишком много (если судить с позиции клиента). А потому мы можем предоставить ему максимальный сервис. Например, у нас может быть какая-то своя программа лояльности (хоть бы и бонусный счет, номинированный в смайликах), о которой знаем только мы и наши клиенты, а остальные банки (и платежные системы) об этом ни сном, ни духом. Или у клиента есть шаболоны платежей, и через банкомат мы предоставляем ему простой и быстрый способ провести платеж по этому шаблону. В общем, немного нафантазировать можно. Много не получится - банковские услуги для клиентов, как ни крути, сводятся к перемещениям денег в пользу физических или юридических лиц, либо к получению финансовой информации из нашей базы или связанных финансово-информационных сервисов (каких-нибудь информационных систем - штрафы там, задолженности по налогам, платежам ЖКХ и т.п.).
Поэтому для нашего клиента мы запускаем ветку сценария для "своих" карт, в которой вся эта внешне ранообразаная функциональность и расположена.
А вот если пришел клиент с картой другого банка - то тут сложнее. Сервисы для него мы можем предоставить только те, которые нам позволяет конкретная международная платежная система (к которой принадлежит эта карта). Я имею в виду, JCB там, AmEx и прочие Визы/Мастеркарды. Потому что запрос данных мы будем вести через платежную систему, ведь в общем случае мы не знаем, что за банк выпустил эту карту, запрашивать будем только посредника - платежную систему. Поэтому - долой изобилие программ лояльности, платежи по персональным шаблонам и прочие способы уменьшить карточный баланс. Только главное, только хардкор! Для этого у нас есть ветка сценария для "чужих" карт.
Помимо этих трех вариантов, мы можем захотеть более гибко управлять возможностями, которые мы щедро раздаем нашим клиентам. Например, клиент пришел с "нашей" картой, но она у него - о Боже! - платиновая! Хочется такого клиента немедленно порадовать более карсивыми экранчиками, более учтивым текстом, а может быть, еще парочкой дополнительных пунктов меню, усиливающих иллюзию величия.
Или вот вам более реалистичный случай. Мы выпускаем карты двух разных платежных систем: МистерХард и Жиза. В принципе, может так получиться, что для одного из брендов мы можем предоставлять какие-то дополнительные сервисы. Да хотя бы с целью стимулировать покупку карт именно этого бренда. В обоих случаях карты "наши", но веточки сценария опять разные.
С инкассаторами можно тоже нафантазировать разные случаи, например, разные карты дают разные полномочия. Но тут я уже сильно фантазирую, не думаю, что есть бизнес-процессы, в которых потребуется два разных инкассатора.
В общем, "ветвить" сценарий иногда действительно необходимо, и минимально в среднем сценарии присутствует не менее двух веток - "свои" и "чужие" карты. Административные ветки есть не везде - потому что в банкоматах есть встроенные инструменты для выполнения инкассации. Если банк небольшой, то этот процесс можно не автоматизировать, да и в таких случаях и вовсе можно без специальной карты обойтись. Все делается через телефонный звонок оператору, который удаленно переводит банкомат в режим супервизора.
Префиксы карт
Ветвление сценария происходит в зависимости от того, с каких цифр начинается PAN (номер) карты. Дело в том, что в мире пластиковых карт используется простой и удобный способ "сортировать" карты. В этом способе используются т.н. префиксы - несколько первых цифр номеров карт. Вообще говоря, когда банк покупает членство в платежной системе, он заодно покупает блок номеров карт, так называемый BIN-диапазон. BIN - Bank Identification Number, платежная система присваивает новому члену диапазон номеров карт, которые банк имеет право присваивать выпускаемым картам. Причем у каждой системы свой собственный диапазон номеров. Есть специальный сайт, где можно посмотреть эту разбивку: https://www.bindb.com/ Т.е., зная только номер карты, можно понять, к какой платежной системе она принадлежит.
В свою очередь, банк может определенным образом разбивать этот блок номеров по своему усмотрению. Например, одна моя карта начинается с 548472 - это MasterCard Platinum. В свою очередь, банк может разбить этот диапазон, например, на 54847200 и 54847222 (выдумал прямо сейчас), и один префикс использовать для одного карточного продукта, а другой - для другого. Оба карточных продукта - это MasterCard Platinum, но, например, у одного из них подключена какая-то специальная программа лояльности. Или, допустим, другой продукт - для пенсионеров, что влечет за собой иные условия обслуживания (чаще всего, просто другие программы лояльности; я ж говорю, что-то новое в банковской сфере придумать крайне трудно).
Так вот, в протоколах банкоматов это штатная операция - анализ префикса введенной карты и выбор соответствующей ветки сценария. Всего, в силу технических ограничений (не более восьми параметров на одно состояние сценария) может быть максимум восемь веток сценария. Кстати, у административных карт префикс такой, что он не соответствует ни одной платежной системе. Например, начинается с восьмерок там, или с девяток, или что-то подобное.
Сценарий при неверном PIN
Во взаимодействии с банкоматом есть один прикольный момент.
Несмотря на то, что банкомат постоянно находится на связи с процессинговым центром (поддерживает сетевое соединение), и при обрыве связи закрывается и перестает работать, на самом деле запрос в процессинг отправляется только на некоторых этапах работы сценария.
Вы пододите к банкомату, вставляете карту. Банкомат ее считывает. Дальше, чаще всего, от вас просят PIN. Потому вы переходите по разным меню, выбираете, что вам нужно и т.д. Всё это время банкомат никаких запросов в процессинг не шлёт! Да-да. Он пока просто набирает от вас необходимую информацию. Заполняет и подготавливает необходимые буферы (хранилища данных). Выбранную операцию, сумму, PIN-блок, дополнительные буферы. И лишь на одном из этапов вся эта собранная информация отправляется в процессинговый центр. Чаще всего - после какого-нибудь меню "подтверите операцию" или "нужен ли вам чек?". И только в этот момент процессинговый центр может проверить ваш PIN. И если вы ошиблись - то только сейчас об этом узнаете. Банкомат перейдет на служебное состояние повторного запроса PIN. А может быть, захватит карту (если превышен лимит ввода неверного PIN). Если карта не захвачена и вы ввели верный PIN - все буферы (вместе с новым значением PIN) будут повторно отправлены в процессинг, и там, если все нормально с остальными значениями, будет обработана транзакция.
С "административной" веткой сценария таких вольностей допускать нельзя. Я имею в виду - нельзя позволить побродить по менюшкам, прежде чем проверить PIN. В административных ветках обычно запрос на проверку PIN происходит сразу после его ввода. И только если PIN подходит - только тогда можно будет менюшки посмотреть.
Да, кстати, по всем канонам безопасности, инкассатор обычно не имеет доступа к содержимому кассет, он просто достает израсходованные опечатанные касеты и вставляет заполненные (и тоже опечатанные). А доступ к сейфовой части банкомата требует знание кода для кодового замка и наличие механического ключа. Я к тому, что обладание административной картой не дает никакой абсолютной власти :)
Подписывайтесь на канал "Технологии Денег" в Яндекс.Дзен и Телеграм! У меня много интересного материала!