Уведомление о проведенной оплате (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=69bdf9bd91820b8f7b4c4b25d3d22dfa

MNT_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 — код проверки целостности данных.