Уведомление о проведенной оплате (Pay URL)
Уведомление об оплате MONETA.Assistant отсылает на указанную страницу магазина «Pay URL» в виде HTTP запроса методом GET или POST.
Статус приёма уведомления должен быть возвращён в виде ответа на HTTP-запрос. Для идентификации отправителя отчёта используется «Код проверки целостности данных», который должен быть известен только системе «МОНЕТА.РУ» и учётной системе магазина. При помощи этого кода и основных параметров уведомления об оплате формируется подпись, которая однозначно идентифицирует отправителя и обеспечивает возможность проверки целостности пересылаемых данных.
В случае, если система «МОНЕТА.РУ» не получает ответ от магазина на отправленный запрос с уведомлением (например, из-за недоступности системы учёта магазина), будут произведены попытки отправить уведомление в автоматическом режиме в течение суток. По истечении периода автоматической отправки уведомлений уполномоченные сотрудники магазина или администраторы системы «МОНЕТА.РУ» могут отправить уведомление в ручном режиме.
Независимо от результата отправки уведомления покупатель сразу после оплаты попадёт на страницу, указанную в параметре MNT_SUCCESS_URL или в настройках счёта магазина. Поэтому магазин должен предусмотреть механизм для скорейшего разрешения подобных ситуаций.
Параметры запроса с уведомлением об оплате
- MNT_ID
- Идентификатор магазина в системе MONETA.RU.
- MNT_TRANSACTION_ID
- Внутренний идентификатор заказа, однозначно определяющий заказ в магазине.
- MNT_OPERATION_ID
- Номер операции в системе MONETA.RU.
- MNT_AMOUNT
- Фактическая сумма, полученная на оплату заказа, без учёта комиссии за услуги системы «MONETA.RU».
- MNT_CURRENCY_CODE
- ISO-код валюты, в которой произведена оплата заказа в магазине.
- MNT_SUBSCRIBER_ID
- Внутренний идентификатор пользователя, однозначно определяющий получателя в учётной системе магазина.
- MNT_TEST_MODE
- Если оплата произведена в тестовом режиме, то параметр содержит
1, если в реальном –0. - MNT_SIGNATURE
- Код для идентификации отправителя и проверки целостности данных.
- MNT_USER
- Номер счёта пользователя, если оплата производилась с пользовательского счёта в системе «MONETA.RU».
- paymentSystem.unitId
- Идентификатор платежной системы, если оплата производилась с платежной системы, отличной от «MONETA.RU».
- MNT_CORRACCOUNT
- Номер счёта плательщика. Если оплата производилась с пользовательского счёта в системе «MONETA.RU», то совпадает с MNT_USER.
- MNT_CUSTOM1, MNT_CUSTOM2, MNT_CUSTOM3, другие параметры
- Параметры, переданные в запросе на оплату через MONETA.Assistant.
Формирование подписи уведомления об оплате
Кодирование ключа производится путём конкатенации в одну строку значений параметров отчёта и кода проверки целостности данных, кодированием по алгоритму Message Digest 5 (MD5, RFC 1321) и представлением массива байт в виде строки шестнадцатеричных чисел:
MNT_SIGNATURE = MD5(
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_SUBSCRIBER_IDотсутствует, то в подписи вместо него используется пустая строка (неnull, не0, не пробел). MNT_TEST_MODE– если оплата в тестовом режиме, то значение должно быть1, иначе0.
Кодирование однонаправленное: магазину для проверки необходимо сформировать строку на основе своих данных и полей отчёта, закодировать её, преобразовать в строку шестнадцатеричных чисел и сравнить полученный код со значением подписи в отчёте.
Ответ на уведомление об оплате
Для того, чтобы сообщить MONETA.Assistant, что магазин получил информацию об оплате, скрипт магазина (Pay URL) должен дать ответ соответствующим образом.
Ответ может быть в одном из форматов:
- Текстовый формат в кодировке UTF-8. Этот ответ не должен содержать HTML-теги.
- Ответ в XML-формате.
Примечание: Ответ об успешном получении уведомления следует возвращать также в том случае, если учётной системой магазина уведомление принято повторно, то есть когда магазин уже отвечал результатом SUCCESS на предшествующие уведомления.
Попытки отправки уведомления будут повторены:
- Если система «MONETA.RU» не смогла получить ответ от обработчика.
- Если сервер магазина был недоступен.
- Если текстовая строка начинается словом
FAIL.
Текстовый формат ответа на уведомление об оплате
Текстовый ответ должен быть в кодировке UTF-8. Возможные значения:
SUCCESS— магазин получил уведомление об оплате. Операция в системе Moneta.Ru переходит в состояние «Выполнено».FAIL— магазин не обработал уведомление об оплате. Операция остаётся в состоянии «Уведомление не отправлено». MONETA.Assistant будет продолжать посылать уведомления об оплате в течение суток.
Ответ на уведомление об оплате в XML-формате
Магазин может ответить на уведомление об оплате в XML-формате.
Формат XML-ответа:
<?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
- Идентификатор магазина в системе MONETA.RU.
- MNT_TRANSACTION_ID
- Внутренний идентификатор заказа.
- MNT_RESULT_CODE
- Код ответа на запрос. Список кодов — в подразделе ниже.
- MNT_DESCRIPTION
- Описание состояния заказа в произвольной форме.
- MNT_AMOUNT
- Сумма оплаты.
- MNT_SIGNATURE
- Код для идентификации отправителя и проверки целостности данных (см. формулу ниже).
- MNT_ATTRIBUTES
- Содержит произвольные параметры, которые будут сохранены в операции. Необязательный элемент.
- ATTRIBUTE
- Один произвольный параметр операции.
- KEY
- Уникальное название параметра операции (не более 32 символов).
- VALUE
- Значение параметра операции.
Формирование подписи в ответе на уведомление об оплате
MNT_SIGNATURE = MD5(
MNT_RESULT_CODE + MNT_ID + MNT_TRANSACTION_ID
+ КОД ПРОВЕРКИ ЦЕЛОСТНОСТИ ДАННЫХ)Примечание: Не добавляйте параметры и не меняйте порядок полей в формуле. MONETA.Assistant формирует свою подпись по той же формуле и сравнивает её с параметром MNT_SIGNATURE в ответе.
Коды ответа на запрос с уведомлением об оплате
| Код ответа | Описание |
|---|---|
| 200 | Заказ оплачен. Уведомление об оплате магазину доставлено. |
| 100, 302, 402 | Отправка уведомления об оплате будет повторена. |
| 500 | Ошибка обработки. Автоматическая отправка уведомлений будет остановлена. Необходимо связаться с группой поддержки MONETA.RU. |
Примечание: В обычных случаях для завершения процесса оплаты следует использовать код ответа 200.
Пример запроса с уведомлением об оплате
Пример запроса на адрес Pay URL с уведомлением об оплате операции 123456 для заказа FF790ABCD в магазине (номер счёта 54600817) на сумму 120.25 рублей:
payURL?MNT_ID=54600817&MNT_TRANSACTION_ID=FF790ABCD&MNT_OPERATION_ID=123456&MNT_AMOUNT=120.25&MNT_CURRENCY_CODE=RUB&MNT_TEST_MODE=0&MNT_SIGNATURE=69bdf9bd91820b8f7b4c4b25d3d22dfaMNT_SIGNATURE уведомления: в MD5 подаётся одна строка — все значения подряд без разделителей, затем код проверки:
54600817FF790ABCD123456120.25RUB0QWERTYгде QWERTY — код проверки целостности данных.
Примеры ответа на успешное проведение оплаты:
Текстовый ответ:
SUCCESSОтвет в XML:
<?xml version="1.0" encoding="UTF-8"?>
<MNT_RESPONSE>
<MNT_ID>54600817</MNT_ID>
<MNT_TRANSACTION_ID>FF790ABCD</MNT_TRANSACTION_ID>
<MNT_RESULT_CODE>200</MNT_RESULT_CODE>
<MNT_SIGNATURE>29807c8e5d82198b5c4360e6ec711cce</MNT_SIGNATURE>
</MNT_RESPONSE>MNT_SIGNATURE ответа — MD5 от строки (подряд, без разделителей):
20054600817FF790ABCDQWERTYгде QWERTY — код проверки целостности данных.