Получение данных от поставщика

Для поставщиков, предоставляющих при оплате расширенную информацию в интерактивном режиме, возможна отправка дополнительных проверочных запросов после каждого шага по вводу параметров.

Проверочные запросы служат для того, чтобы:

  1. Получить от поставщика данные, которые зависят от уже введённых данных (например, по лицевому счёту вернуть адрес и показания счётчиков).
  2. Указать сумму заказа, если сумма зависит от введённых параметров.

Основные принципы взаимодействия

Запросы на получение данных MONETA.Assistant отсылает на указанный в настройках «Check URL» адрес методом GET или POST. Ответ должен быть в формате XML. Во время оплаты одного заказа MONETA.Assistant может несколько раз отсылать такие запросы.

Параметры запроса

MNT_COMMAND
Для запросов на получение данных — STEP.
MNT_ID
Идентификатор поставщика в системе MONETA.RU (номер счёта).
MNT_AMOUNT
Фактическая сумма без учёта комиссии MONETA.RU. Если сумма не была передана в HTML-форме, параметра может не быть. Необязательное поле.
MNT_CURRENCY_CODE
ISO-код валюты. Необязательное поле.
MNT_TEST_MODE
1 — тестовый режим, 0 — реальный. Необязательное поле.
MNT_SIGNATURE
Подпись запроса (см. ниже).
STEP
Наименование текущего шага ввода параметров (например, PRE).
Параметры с именами, начинающимися с CUSTOMFIELD:
Данные, переданные в запросе на получение дополнительных данных.

Формирование подписи запроса

MNT_SIGNATURE = MD5(
  MNT_COMMAND + MNT_ID + MNT_AMOUNT + MNT_CURRENCY_CODE + MNT_TEST_MODE
  + КОД_ПРОВЕРКИ_ЦЕЛОСТНОСТИ_ДАННЫХ)
  • MNT_AMOUNT в подписи — с двумя десятичными знаками.
  • Если MNT_AMOUNT в запросе отсутствует, при вычислении подписи это поле пропускается (пустая строка).
  • В тестовом режиме в подписи используется 1, иначе 0.

Примечание: Если суммы нет в запросе:

MNT_SIGNATURE = MD5(
  MNT_COMMAND + MNT_ID + MNT_CURRENCY_CODE + MNT_TEST_MODE
  + КОД_ПРОВЕРКИ_ЦЕЛОСТНОСТИ_ДАННЫХ)

Поставщик должен сформировать строку по своим данным и полям запроса, вычислить MD5 и сравнить с MNT_SIGNATURE в запросе.

Формат ответа на запрос

<?xml version="1.0" encoding="UTF-8"?>
<MNT_RESPONSE>
  <MNT_ID></MNT_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_RESULT_CODE
Код ответа (см. ниже и коды проверочного запроса).
MNT_DESCRIPTION
Описание состояния заказа в произвольной форме.
MNT_AMOUNT
Сумма оплаты.
MNT_SIGNATURE
Подпись ответа.
MNT_ATTRIBUTES
Параметры для использования на следующем шаге ввода.
KEY / VALUE
Имя параметра (до 32 символов) и значение.

При получении ответа в системе MONETA.RU анализируются поля. Запрос считается не отправленным, обработка заказа прерывается, если:

  • Не удалось получить ответ от обработчика.
  • Неверный формат ответа.
  • MNT_ID или MNT_TRANSACTION_ID не соответствуют параметрам запроса.
  • MNT_RESULT_CODE не из допустимого списка.
  • MNT_SIGNATURE не совпадает с подписью MONETA.RU.

Формирование подписи в ответе на запрос

MNT_SIGNATURE = MD5(
  MNT_RESULT_CODE + MNT_ID + КОД_ПРОВЕРКИ_ЦЕЛОСТНОСТИ_ДАННЫХ)

MONETA.Assistant формирует подпись по той же формуле и сравнивает с полем MNT_SIGNATURE в ответе.

Дополнительные коды ответа на проверочный запрос

КодОписание
206Переданные данные успешно обработаны, сформирован ответ.

Другие коды ответа соответствуют кодам обычного проверочного запроса (Check URL): см. раздел Проверочные запросы.

Пример запроса

checkUrl?MNT_COMMAND=STEP&MNT_ID=9003&MNT_AMOUNT=123.45&STEP=PRE&MNT_CURRENCY_CODE=RUB&MNT_TEST_MODE=0&MNT_SIGNATURE=bc2125c3cddfcf7380cc5f0f9c480927&CUSTOMFIELD%3A101=120000

Пример корректного ответа

<?xml version="1.0" encoding="UTF-8"?>
<MNT_RESPONSE>
  <MNT_ID>9003</MNT_ID>
  <MNT_RESULT_CODE>206</MNT_RESULT_CODE>
  <MNT_AMOUNT>123.45</MNT_AMOUNT>
  <MNT_SIGNATURE>bc1f70d760203ff5039896ded453449e</MNT_SIGNATURE>
  <MNT_ATTRIBUTES>
    <ATTRIBUTE><KEY>102</KEY><VALUE>Moscow</VALUE></ATTRIBUTE>
  </MNT_ATTRIBUTES>
</MNT_RESPONSE>