Обработка информационных запросов
Пара сообщений InqReq/InqRes позволяет владельцу карты получать информацию о состоянии транзакции. Информационный запрос может быть послан в любое время после запроса PReq, адресованного продавцу. Запросы InqReq могут посылаться многократно. Отклик InqRes имеет тот же формат, что и PRes. Продавец должен проверять, что сертификат, сопровождающий InqRes, соответствует сертификату, использованному с PRes. Это препятствует запросам одного владельца карты о состоянии транзакций других покупок. Владелец карты без сертификатов не подписывает информационные запросы, что означает возможность нарушения целостности сообщения. Владелец карты формирует запрос InqReq следующим образом.
Шаг | Действие |
1 |
|
2 | Если владелец карты послал подписанный PReq, вставить Compose SignedData c InqReqData |
3 | Вставить сообщение в цифровой конверт и послать продавцу |
Структура данных запроса InqReq представлена в таблице 4.6.2.63.
Таблица 4.6.2.63. Структура InqReq
InqReq | <InqReqSigned, InqReqData> |
InqReqSigned | S(C, InqReqData) |
InqReqData | {TransIDs, RRPID, Chall-C2, [InqRqExtensions]} |
TransIDs | Копируется из самого последнего: PReq, PRes, InqReq |
RRPID | Идентификатор пары запрос/отклик |
Chall-C2 | Новый вызов владельца карты по поводу подписи продавца. |
InqRqExtensions | Информационный запрос не шифруется, по этой причине расширения не должны содержать конфиденциальной информации. |
Когда продавец получает InqReq, он обрабатывает это сообщение следующим образом:
Шаг | Действие |
1 | Извлекается запрос из входного сообщения |
2 | Если получены данные InqReqData (в противоположность InqReqSigned), проверить, позволяет ли сертификат расчетного центра неподписанные транзакции. Если он этого не допускает, тогда:
В противном случае перейти к пункту 4. |
3 | Если получен InqReqSigned, проверить подпись. Если проверка подписи не прошла:
|
4 | Сравнить TransIDs со значениями из цифрового конверта сообщения. Если равенства нет:
|
5 | Искать транзакцию в базе данных, основанную на TransIDs.XID. Если поиск неудачен:
|
6 | Если PReq был подписан, проверить, что PReq и InqReq подписаны одним и тем же владельцем карты. Если соответствия нет, то:
|
7 | Сформировать PResPayloadSeq |