Проверочные запросы (Check URL)
Если в свойствах счёта магазина выставить Check URL, то магазину, кроме уведомления о проведённой оплате, будут отсылаться проверочные запросы.
Проверочные запросы служат для того, чтобы:
- Убедиться, что заказ существует, ещё не оплачен и срок действия заказа не истёк.
- Указать сумму заказа, если магазин не передал сумму в HTML-форме.
- Проверить статус заказа, если товар уже оплачен.
Проверочные запросы MONETA.Assistant отсылает на указанную страницу магазина Check URL методом GET или POST. Ответ должен быть в формате XML. Во время оплаты одного заказа MONETA.Assistant может несколько раз отсылать проверочные запросы.
Параметры проверочного запроса
- MNT_COMMAND
- Для проверочных запросов —
CHECK. Параметр отсутствует у уведомлений на Pay URL. - MNT_ID
- Идентификатор магазина в системе MONETA.RU.
- MNT_TRANSACTION_ID
- Внутренний идентификатор заказа в магазине.
- MNT_OPERATION_ID
- Номер операции в системе MONETA.RU. Если операция ещё не создана, поле может отсутствовать.
- MNT_AMOUNT
- Фактическая сумма без учёта комиссии MONETA.RU. Если магазин не передал сумму в HTML-форме, параметра может не быть — тогда магазин обязан вернуть сумму в ответе, иначе MONETA.Assistant завершит обработку с ошибкой.
- MNT_CURRENCY_CODE
- ISO-код валюты оплаты заказа.
- MNT_SUBSCRIBER_ID
- Внутренний идентификатор пользователя в учётной системе магазина.
- MNT_TEST_MODE
1— тестовый режим,0— реальный.- MNT_SIGNATURE
- Подпись запроса (см. ниже).
- MNT_USER
- Номер счёта пользователя при оплате с пользовательского счёта в «MONETA.RU». Может отсутствовать, если способ оплаты ещё не выбран.
- paymentSystem.unitId
- Идентификатор платёжной системы, если выбрана система, отличная от «MONETA.RU». Может отсутствовать.
- MNT_CORRACCOUNT
- Номер счёта плательщика; при оплате с пользовательского счёта совпадает с MNT_USER. Может отсутствовать.
- MNT_CUSTOM1, MNT_CUSTOM2, MNT_CUSTOM3, другие параметры
- Параметры, переданные в запросе на оплату через MONETA.Assistant.
Формирование подписи проверочного запроса
В каждом проверочном запросе передаётся MNT_SIGNATURE. Магазин должен вычислить подпись по тем же правилам и сравнить с полученным значением.
MNT_SIGNATURE = MD5(
MNT_COMMAND + MNT_ID + MNT_TRANSACTION_ID + MNT_OPERATION_ID
+ MNT_AMOUNT + MNT_CURRENCY_CODE + MNT_SUBSCRIBER_ID + MNT_TEST_MODE
+ КОД_ПРОВЕРКИ_ЦЕЛОСТНОСТИ_ДАННЫХ)- Не добавляйте параметры и не меняйте порядок полей в формуле.
MNT_AMOUNT— с двумя десятичными знаками (1.23,123.00).- Если в запросе нет
MNT_OPERATION_ID,MNT_AMOUNT,MNT_SUBSCRIBER_ID, при вычислении подписи эти поля пропускаются (пустая строка, неnull, не0, не пробел). Для уведомления об оплате отсутствуетMNT_COMMAND— его также не подставляют.
Примечание: Пример: нет MNT_OPERATION_ID, MNT_AMOUNT и MNT_SUBSCRIBER_ID:
MNT_SIGNATURE = MD5(
MNT_COMMAND + MNT_ID + MNT_TRANSACTION_ID + MNT_CURRENCY_CODE
+ MNT_TEST_MODE + КОД_ПРОВЕРКИ_ЦЕЛОСТНОСТИ_ДАННЫХ)Ответ на проверочный запрос
Магазин должен вернуть ответ в XML.
При получении ответа в системе MONETA.RU анализируются поля. MONETA.Assistant прекращает обработку оплаты, если:
- Не удалось получить ответ от обработчика.
- Ответ имеет неверный формат.
MNT_IDилиMNT_TRANSACTION_IDне соответствуют запросу.MNT_RESULT_CODEне из допустимого списка.MNT_SIGNATUREне совпадает с подписью, сгенерированной в MONETA.RU.
Формат ответа на проверочный запрос
<?xml version="1.0" encoding="UTF-8"?>
<MNT_RESPONSE>
<MNT_ID></MNT_ID>
<MNT_TRANSACTION_ID></MNT_TRANSACTION_ID>
<MNT_RESULT_CODE></MNT_RESULT_CODE>
<MNT_DESCRIPTION></MNT_DESCRIPTION>
<MNT_AMOUNT></MNT_AMOUNT>
<MNT_SIGNATURE></MNT_SIGNATURE>
<MNT_ATTRIBUTES>
<ATTRIBUTE>
<KEY></KEY>
<VALUE></VALUE>
</ATTRIBUTE>
</MNT_ATTRIBUTES>
</MNT_RESPONSE>Поля ответа:
- MNT_ID, MNT_TRANSACTION_ID
- Идентификаторы магазина и заказа.
- MNT_RESULT_CODE
- Код ответа (см. таблицу ниже).
- MNT_DESCRIPTION
- Описание состояния заказа в произвольной форме.
- MNT_AMOUNT
- Сумма оплаты.
- MNT_SIGNATURE
- Подпись ответа.
- MNT_ATTRIBUTES
- Необязательный блок произвольных параметров, сохраняемых в операции.
- KEY / VALUE
- Имя (до 32 символов) и значение параметра.
Формирование подписи в ответе на проверочный запрос
MNT_SIGNATURE = MD5(
MNT_RESULT_CODE + MNT_ID + MNT_TRANSACTION_ID
+ КОД_ПРОВЕРКИ_ЦЕЛОСТНОСТИ_ДАННЫХ)Примечание: Не меняйте порядок полей. MONETA.Assistant проверяет ответ по той же формуле.
Коды ответа на проверочный запрос
| Код | Описание |
|---|---|
| 100 | В ответе указана сумма заказа для оплаты. Используйте, когда в проверочном запросе не был передан MNT_AMOUNT. |
| 200 | Заказ оплачен. Уведомление об оплате магазину доставлено. |
| 302 | Заказ в обработке; точный статус определить нельзя. |
| 402 | Заказ создан и готов к оплате. Уведомление об оплате ещё не доставлено. |
| 500 | Заказ неактуален (например, отменён). При этом коде MONETA.RU не будет повторять отправку уведомления об оплате, если оно не было доставлено. |
Примечание: Обычно для продолжения оплаты используют коды 402 или 100.
Примеры проверочных запросов
Проверочный запрос для заказа FF790ABCD, счёт 54600817, сумма 120.25, без номера операции:
checkURL?MNT_COMMAND=CHECK&MNT_ID=54600817&MNT_TRANSACTION_ID=FF790ABCD&MNT_AMOUNT=120.25&MNT_CURRENCY_CODE=RUB&MNT_TEST_MODE=0&MNT_SIGNATURE=ea2d49048bdf11857f1b50270aedbc8dСтрока для MD5 (подряд, без разделителей):
CHECK54600817FF790ABCD120.25RUB0QWERTYгде QWERTY — код проверки целостности данных.
Пример ответа магазина:
<?xml version="1.0" encoding="UTF-8"?>
<MNT_RESPONSE>
<MNT_ID>54600817</MNT_ID>
<MNT_TRANSACTION_ID>FF790ABCD</MNT_TRANSACTION_ID>
<MNT_RESULT_CODE>402</MNT_RESULT_CODE>
<MNT_DESCRIPTION>Order created, but not paid</MNT_DESCRIPTION>
<MNT_AMOUNT>120.25</MNT_AMOUNT>
<MNT_SIGNATURE>5ebb58862cf8781b62bcc2cc8d66913e</MNT_SIGNATURE>
<MNT_ATTRIBUTES>
<ATTRIBUTE><KEY>name</KEY><VALUE>John Smith</VALUE></ATTRIBUTE>
<ATTRIBUTE><KEY>email</KEY><VALUE>John.Smith@gmail.com</VALUE></ATTRIBUTE>
</MNT_ATTRIBUTES>
</MNT_RESPONSE>Строка для MD5 ответа (подряд):
40254600817FF790ABCDQWERTYПоля name и email из MNT_ATTRIBUTES сохраняются в операции.