InqRes позволяет владельцу карты получать
Обработка информационных запросов
Пара сообщений InqReq/ InqRes позволяет владельцу карты получать информацию о состоянии транзакции. Информационный запрос может быть послан в любое время после запроса PReq, адресованного продавцу. Запросы InqReq могут посылаться многократно. Отклик InqRes имеет тот же формат, что и PRes. Продавец должен проверять, что сертификат, сопровождающий InqRes, соответствует сертификату, использованному с PRes. Это препятствует запросам одного владельца карты о состоянии транзакций других покупок. Владелец карты без сертификатов не подписывает информационные запросы, что означает возможность нарушения целостности сообщения. Владелец карты формирует запрос InqReq следующим образом.
Шаг |
Действие |
1 |
- Копируется InqReqData из предыдущего запроса
- Формируется новый RRPID
- Генерируется новый Chall-С
- Опционно добавляются любые InqReqExtensions
|
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), проверить, позволяет ли сертификат расчетного центра неподписанные транзакции. Если он этого не допускает, тогда:
- Прислать сообщение InqRes c CompletionCode = signatureRequired.
- Прервать обработку InqReq
В противном случае перейти к пункту 4. |
3 |
Если получен InqReqSigned, проверить подпись. Если проверка подписи не прошла:
- Прислать сообщение Error с ErrorCode = signatureFailure
- Прервать обработку InqReq
|
4 |
Сравнить TransIDs со значениями из цифрового конверта сообщения. Если равенства нет:
Прислать сообщение Error c ErrorCode = wrapperMsgMismatch
Прервать обработку InqReq
|
5 |
Искать транзакцию в базе данных, основанную на TransIDs.XID. Если поиск неудачен:
- Прислать InqRes c CompletionCode = orderNotReceived.
- Прервать обработку InqReq
|
6 |
Если PReq был подписан, проверить, что PReq и InqReq подписаны одним и тем же владельцем карты. Если соответствия нет, то:
- Прислать сообщение Error c ErrorCode = unknownXID.
- Прервать обработку InqReq
|
7 |
Сформировать PResPayloadSeq |
<
Содержание Назад Вперед