ISO 8583 — стандарт ISO, описывающий процесс передачи и формат финансовых сообщений системами, обрабатывающими данные банковских платёжных карт.
Введение Транзакция с использованием платёжных карт (например, для запроса авторизации держателя карты) начинается с устройства, её инициирующего, например c POS-терминала, проходит через ряд систем/сетей и заканчивается на системе, которая выпустила карту (эмитент).
Транзакционные данные включают в себя: информацию о карте (например, номер счета, ) информацию о терминале (например, номер торговца, ) собственно финансовая информация (например, цена, количество) Система, которая выпустила карту, авторизует транзакцию либо отклоняет её и генерирует ответное сообщение, которое возвращается на терминал.
ISO 8583 описывает формат транзакций и механизм их передачи («communication flow») таким образом, чтобы различные системы могли обмениваться этими транзакциями. Большинство транзакций, которые выполняются с банкоматов, используют ISO 8583 в некоторых аспектах коммуникационной цепочки, как то, например, транзакции, выполняющиеся при оплате покупателем товара в магазине. Такие международные платёжные системы как MasterCard и Visa используют стандарт ISO 8583 при авторизационных взаимодействиях.
ISO 8583 описывает транзакции, инициированные держателем карты, такие как покупка, снятие наличных, пополнение счёта, оплату, аннулирование операции, запрос баланса, платежи и переводы со счёта на счёт. ISO 8583 также описывает сообщения между системами для обмена ключами безопасности, согласования итогов и сообщения для других административных целей.
Несмотря на то, что ISO 8583 определяет общий стандарт, как правило, он не используется напрямую в системах или сетях. Вместо этого каждая сеть адаптирует стандарт для собственных нужд, пользуясь отдельными полями и вариантами использования.
Положение полей различается в разных версиях стандарта. К примеру, отдельные элементы, определяющие валюту в версиях 1987 и 1993 более не используются в версии 2003, где валюта является составной частью элемента, определяющего сумму. ISO 8583:2003 нужно время для достижения широкого признания.
Сообщение ISO 8583 состоит из следующих частей:
Message Type Indicator (MTI) — Индикатор типа сообщения; Одна или несколько битовых карт, указывающих, какие элементы данных присутствуют в сообщении; Элементы данных, поля сообщения.
Индикатор типа сообщения
Индикатор типа сообщения () — 4-значное числовое поле, которое определяет высокоуровневую функцию сообщения. Индикатор типа сообщения включает в себя версию стандарта ISO 8583, класс сообщения, функцию сообщения и источник сообщения, описанные ниже.
Пример: 0110 0xxx -> версия стандарта ISO 8583 (версия 1987 года) x1xx -> класс сообщения (сообщение авторизации) xx1x -> функция сообщения (ответ на запрос) xxx0 -> кто начал взаимодействие (эквайер) Версии ISO 8583
Первая позиция MTI определяет версию стандарта ISO 8583, используемую для передачи сообщения.
Позиция Значение 0xxx Версия ISO 8583-1:1987 1xxx Версия ISO 8583-2:1993 2xxx Версия ISO 8583-1:20033xxxЗарезервировано ISO4xxxЗарезервировано ISO5xxxЗарезервировано ISO6xxxЗарезервировано ISO7xxxЗарезервировано ISO8xxxЗарезервировано для национального использования 9xxx Зарезервировано для частного использования
Класс сообщения
Вторая позиция MTI определяет общую цель сообщения.
Позиция Значение Использование x1xx Authorization Message Проверяет доступность средств, получает одобрение, но проведение по счёту не производится. Работает по принципу Dual Message System (DMS), ожидает обмена файлами для проведения по счёту. x2xx Financial Message Проверяет доступность средств, получает одобрение, производится проводка по счёту. Работает по принципу Single Message System (SMS), обмен файлами по данной транзакции не производится. x3xx File Actions Message Используется для обмена списками заблокированных карт и для управления терминалами x4xx Reversal/Chargeback Message Reversal (x4x0 или x4x1): Отменяет действие предыдущей авторизации. Chargeback (x4x2 или x4x3): Отменяет списание по финансовому сообщению. x5xx Reconciliation Message Передаёт информацию о проведении расчёта (например, сообщение о закрытии смены на POS-терминале) x6xx Administrative Message Передает административные сообщения. Часто используется для передачи сообщений об ошибках (например сообщение отклонено) x7xx Fee Collection Message x8xx Network Management Message Используется для обмена ключами безопасности, входа в систему, посылки эхо-тестов и для других функций сети x9xx Зарезервировано ISO
Функция сообщения
Третья позиция Индикатора сообщения (MTI) определяет функцию сообщения и способ его обработки в системе. Запросы (Request) являются сообщениями полного цикла (т.е. от эквайера к эмитенту и обратно включая время ожидания и автоматической переадресации), в то время как авизо (Advice) - прямые сообщения (например, от терминала к эквайеру, от эквайера в сеть, из сети к эмитенту, с гарантированной передачей к следующему звену, но, возможно, с задержкой).
Позиция Значение xx0x Request xx1x Request Response xx2x Advice xx3x Advice Response xx4x Notification xx8x Response acknowledgment xx9x Negative acknowledgment
Источник сообщения
Четвертое значение индикатора сообщения (MTI) определяет его инициатора в платежной системе.
Позиция Значение xxx0 Acquirer xxx1 Acquirer Repeat xxx2 Issuer xxx3 Issuer Repeat xxx4 Other xxx5 Other Repeat
Примеры
С помощью всех вышеуказанных позиций индекса сообщения (MTI), полностью определяется как будет обрабатываться сообщение в сети. К сожалению, не все реализации стандарта ISO 8583 интерпретируют значение индекса (MTI) одинаково, но несмотря на это, некоторые MTI - стандартны:
MTI Значение Применение 0100 Authorization request Авторизационный запрос с POS-терминала 0120 Authorization Advice При падении эмитента (например, по timeout) и необходимости успешного проведения транзакции 0121 Authorisation Advice Repeat При истечении срока ожидания авизо 0200 Acquirer Financial Request Финансовый запрос, часто от банкомата 0220 Acquirer Financial Advice Например, при проверке в отеле 0221 Acquirer Financial Advice repeat При ожидании авизо 0400 Acquirer Reversal Request Отмена авторизации 0420 Acquirer Reversal Advice Advises that a reversal has taken place 0421 Acquirer Reversal Advice Repeat Message if the reversal times out 0800 Network Management Request Echo test, logon, log off etc 0820 Network Management Advice Keychange
Битовые карты
В соответствии с ISO 8583, побитовая карта — это поле или подполе внутри сообщения, показывающие какие элементы данных представлены в другом месте сообщения.
Сообщение содержит как минимум одну битовую карту, которая называется Primary Bitmap (англ. Первичная битовая карта), определяющую, какие из элементов данных с номерами от 1 до 64 присутствуют в сообщении. Как правило, если вторая битовая карта присутствует, то размещается в качестве первого элемента данных и определяет, какие из элементов данных с номерами от 65 до 128 присутствуют в сообщении. Аналогично, третья битовая карта может использоваться для определения наличия или присутствия элементов со 129 до 192, впрочем, они используются редко.
Битовые карты могут быть переданы как 8 байт двоичной информации или как 16 шестнадцатеричных символов (0-9, A-F) из наборов ASCII или EBCDIC.
Поле присутствует, когда соответствующий бит битовой карты имеет значение «истина», например, байт '10000010' означает, что поля 1 и 7 присутствуют в сообщении.
Примеры
Bitmap Определяет наличие... 4210001102C04804 ...полей 2, 7, 12, 28, 32, 39, 41, 42, 50, 53, 62 7234054128C28805 ...полей 2, 1, 4, 7, 11, 12, 14, 22, 24, 26, 32, 35, 37, 41, 42, 47, 49, 53, 62, 64, 100 (требуется второй Bitmap, чтобы показать наличие поля номер 100) 8000000000000001 ...полей 1, 64 0000000000000003(второй Bitmap) Поля 127, 128 Объяснение Bitmap поля 4210001102C04804 01000010 = 42x (нумеруем слева направо, второй и седьмой бит равны 1, что означает присутствие полей 2 и 7) 00010000 = 10x (присутствует поле 12) 00000000 = 00x (никакие поля не присутствуют) 00010001 = 11x (присутствуют поля 28 и 32) 00000010 = 02x (присутствует поле 39) 11000000 = C0x (присутствуют поля 41 и 42) 01001000 = 48x (присутствуют поля 50 и 53) 00000100 = 04x (присутствует поле 62)
Номер бита 0 10 20 30 40 50 60 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234 Bitmap 0100001000 0100000000 0000000100 0100000010 1100000001 0010000000 0100
Поля, присутствующие в сообщении с переменной длиной: 2, 7, 12, 28, 32, 39, 41, 42, 50, 53, 62
Элементы данных
Элементы данных — это отдельные поля, содержащие информацию о транзакции. Исходный стандарт ISO 8583:1987 был рассчитан на возможность включения 128 элементов данных, а в последующих версиях было определено до 192 элементов данных. В ревизии 1993 года были введены новые описания, удалены некоторые старые, при этом формат как таковой не претерпел изменений.
Несмотря на то, что каждый элемент данных имеет описанное значение и формат, стандарт включает некоторые элементы данных для общих целей, а также специфические для системы (или страны) элементы данных, которые могут иметь огромные различия в разных реализациях.
Каждый элемент данных описан в формате стандарта, который указывает разрешенные значения полей (напр. числовое, бинарное итд.) и длину поля (постоянное значение или меняющее), в соответствии с данной таблицей:
Сокращение Значение a (Латинские?) буквы, включая пробелы n Только числовые значения s Только специальные символы an Буквы и цифры as Буквы и специальные символы ns Числа и специальные символы ans Буквы, числа и специальные символы b Двоичные данные z Набор кодов трека 2 и 3, как определено в ISO 4909 и ISO 7813 . или .. или … индикатор переменной длины поля, каждый символ . означает цифру x или xx или xxx поле фиксированной длины или максимальная длина в случае полей переменной длины
Кроме того, каждое поле может быть или фиксированной, или переменной длины. Если поле переменной длины, длина поля предшествуется индикатором длины.
Тип Значение Fixed длина поля не используется LLVAR или (..xx) Где LL < 100, означает две лидирующих цифры LL, определяющие длину поля VAR LLLVAR или (…xxx) Где LLL < 1000, означает три лидирующие цифры LLL, определяющие длину поля VAR LL и LLL - шестнадцатеричные цифры или ASCII-символы. Поле VAR может быть упаковано (compressed) или быть записано в ASCII, в зависимости от типа данных элемента LL может быть длиной 1 или 2 байта. Например, если оно упаковано как один шестнадцатеричный байт, 0x27 означает, что далее следует 27 байт поля VAR. Если формат ASCII, два байта 0x32, 0x37 означают, что далее следует 27 байт (так как 0x32 - это код символа '2' в кодировке ASCII и т.п.). 3-цифирная длина поля LLL использует 2 байта с лидирующим 0 в упакованном режиме, или 3 байта в формате ASCII. Формат элемента данных VAR зависит от типа элемента данных. Если число было упаковано, то 874 будет представлено 2 байтами 0x0874. В формате ASCII будет использоваться один байт для каждой цифры или символа, оно будет выглядеть, как 0x38 ('8'), 0x37 ('7'), 0x34 ('4').