Протокол для работы с кредитными картами CyberCash

Обработка недублированных сообщений


Если установлено, что сообщение не является дубликатом ранее полученного, тогда оно обрабатывается. Процедура обработки включает в себя:

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

Этот подход к обработке дублированных входных сообщений означает, что если получены два совершенно идентичных сообщения, будут посланы два идентичнх отклика. Это применимо также к информационным запросам и транзакциям Ping, когда в действительности состояние транзакции или возможность обработки сервером может измениться. Если требуется текущее состояние транзакции или сервера, тогда используется транзакция с новым значением ID-атрибута компонента MsgId.

Процесс обработки входного сообщения должен проверить, свободна ли остальная система. Если сервер слишком занят, он должен выдать компонент Error с атрибутом Severity равным Transient Error и кодом ошибки равным SystemBusy, после чего вернуть отправителю входное сообщение, запрашивая тем самым повторную присылку этого сообщения спустя некоторое время.

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

Проверка того, что транзакция не зафиксировала ошибку и не оказалась аннулированной. Предполагается следующий контроль:

oпредыдущие посланные или полученные сообщения не содержат серьезных (Hard) ошибок;
o

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

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

  • проверку формат XML;
  • проверку того, что все элементы, атрибуты и содержимое блока ссылок транзакции не содержат ошибок и соответствуют спецификации IOTP;
  • проверку цифровой подписи, которая в свою очередь предполагает:
 - проверку того, что корректно вычислена электронная подпись;
 - проверку того, что значение дайджеста вычислено правильно.
Проверка ошибок уровня блоков включает:
опроверку в пределах каждого блока (помимо блока ссылок транзакции) того что:
 - атрибуты, элементы и содержимое элементов корректно;
 - значения атрибутов, элементы и содержимого элементов не противоречат друг другу в пределах блока.
опроверку того, что комбинации блоков корректны
oпроверку того, что значения атрибутов, элементы и содержимое элементов взаимосогласованы на межблочном уровне в пределах входного сообщения с блоками, полученными или отправленными ранее. Это включает проверку уместности данного блока для этого типа транзакции.
Если сообщение содержит какие-то инкапсулированные данные, то, если возможно, они проверяются на наличие ошибок.

Содержание раздела