Загрузка данных


Описание MONETA.Assistant
                                                                                                                                                             | Содержание | 2




Содержание
  Введение..................................................................................................................................... 4


  Глава 1. Общее описание................................................................................. 5
           Описание процесса оплаты......................................................................................................................... 5


  Глава 2. С чего начать..................................................................................... 7
           Demo площадка............................................................................................................................................ 7
           Регистрация на demo площадке................................................................................................................. 7
           Настройки счета магазина...........................................................................................................................7


  Глава 3. Запрос на оплату через MONETA.Assistant................................ 10
           Параметры запроса на оплату.................................................................................................................. 10
           Формирование подписи в запросе на оплату......................................................................................... 12
           Примеры запросов на оплату................................................................................................................... 13


  Глава 4. Уведомление о проведенной оплате (Pay URL)......................... 15
           Параметры запроса с уведомлением об оплате...................................................................................... 15
           Формирование подписи уведомления об оплате....................................................................................16
           Ответ на уведомление об оплате............................................................................................................. 16
                 Текстовый формат ответа на уведомление об оплате................................................................17
                 Ответ на уведомление об оплате в XML формате..................................................................... 17
           Пример запроса с уведомлением об оплате............................................................................................18


  Глава 5. Проверочные запросы (Check URL)............................................ 20
           Параметры проверочного запроса............................................................................................................20
           Формирование подписи проверочного запроса...................................................................................... 21
           Ответ на проверочный запрос.................................................................................................................. 21
           Формирование подписи в ответе на проверочный запрос.................................................................... 23
           Коды ответа на проверочный запрос.......................................................................................................23
           Примеры проверочных запросов..............................................................................................................23


  Глава 6. Автоматическое прохождение MONETA.Assistant....................25
           Дополнительные параметры запроса на оплату..................................................................................... 25
           Примеры запросов на оплату................................................................................................................... 26


  Глава 7. Получение данных от поставщика...............................................27
           Основные принципы взаимодействия......................................................................................................27
           Параметры запроса.....................................................................................................................................27
           Формирование подписи запроса...............................................................................................................28
           Формат ответа на запрос...........................................................................................................................28
           Формирование подписи в ответе на запрос............................................................................................ 29
           Дополнительные коды ответа на проверочный запрос..........................................................................29
           Пример запроса.......................................................................................................................................... 29
           Пример корректного ответа...................................................................................................................... 30
                                                                                                          | Содержание | 3




Приложение A. Дополнительные коды ошибок, отображаемые
 пользователю.................................................................................................31

Приложение B. Использование виджета для отображения
 MONETA.Assistant........................................................................................32
                                                                                          | Введение |   4




Введение
  Документ описывает прикладной программный интерфейс MONETA.Assistant для приема оплаты товаров
  и услуг.
  Документ адресован разработчикам, имеющим базовые знания языка HTML и принципов
  функционирования протокола HTTP, подключающим оплату через систему «MONETA.RU».
Глава

1
Общее описание
                                       Интерфейс MONETA.Assistant предоставляет прикладной
•   Описание процесса оплаты           программный интерфейс для оплаты товаров и услуг при помощи
                                       различных платежных систем. Таким образом, online-магазин
                                       реализует поддержку только интерфейса MONETA.Assistant, в то
                                       время как покупатели могут производить оплату с любой электронной
                                       платежной системы, которую поддерживает «MONETA.RU».
                                       При помощи интерфейса MONETA.Assistant можно связать свою
                                       внутреннюю систему приема, хранения и обработки заказов с
                                       системой «MONETA.RU». На основании сформированного заказа,
                                       магазин будет создавать запрос на оплату к системе «MONETA.RU»
                                       и принимать отчет о проведенной оплате с сохранением своих
                                       внутренних параметров (например, номер заказа в системе или
                                       дополнительные информационные поля).
                                       Для подключения интерфейса на сайте необходимо создать форму
                                       специального вида с реквизитами оплаты, а также создать обработчик,
                                       который будет принимать уведомления с отчетом о проведенной
                                       операции.


Описание процесса оплаты
     Оплата без открытия счета в «MONETA.RU»:
     1.   Пользователь выбирает товар.
     2.   Магазин формирует заказ, при необходимости регистрирует в своей системе реквизиты заказа.
     3.   На странице интерфейса MONETA.Assistant Пользователь выбирает способ оплаты.
     4.   Система «MONETA.RU» подготавливает форму оплаты.
     5.   Пользователь подтверждает оплату выбранным способом.
     6.   Внешняя платежная система уведомляет систему «MONETA.RU» об оплате.
     7.   Система «MONETA.RU» отправляет магазину отчет о проведенной операции.
     8.   Система «MONETA.RU» сообщает о результате оплаты и предлагает Пользователю вернуться на сайт
          магазина.
     Диаграмма процедуры оплаты товара без открытия Пользователем счета в системе «MONETA.RU» с
     использованием интерфейса MONETA.Assistant:
| Общее описание |   6
Глава

2
С чего начать

•   Demo площадка
•   Регистрация на demo
    площадке
•   Настройки счета магазина


Demo площадка
     Для того, чтобы попробовать, как работает MONETA.Assistant, можно создать личный кабинет на demo
     площадке.
     Вы можете использовать demo площадку Moneta.Ru https://demo.moneta.ru, чтобы протестировать работу
     MONETA.Assistant.
      Важно: Номера счетов (MNT_ID) на demo площадке и рабочей платформе будут различаться!


Регистрация на demo площадке
     Для того, чтобы начать работу на demo площадке Вам следует создать два личных кабинета: личный
     кабинет магазина, который может принимать платежи и личный кабинет пользователя, который может
     платить в магазин. Для каждого личного кабинета используйте разные e-mail адреса.

     1. Создайте личный кабинет магазина на demo площадке. Для этого перейдите по ссылке:
        https://demo.moneta.ru/backoffice/auth/register
     2. Создайте личный кабинет пользователя на demo площадке. Для этого перейдите по ссылке:
        https://demo.moneta.ru/locale.htm?moneta.locale=ru&redirect=/register.htm
     3. Свяжитесь со службой поддержки PayAnyWay (business@support.payanyway.ru), чтобы завершить
        регистрацию личного кабинета магазина, а также получить виртуальные деньги в личном кабинете
        пользователя.
         Примечание: При обращении в службу поддержки укажите e-mail или телефон, которые Вы
         использовали при регистрации.
     4. После того как служба поддержки подтвердит регистрацию, создайте "расширенный" счет в личном
        кабинете магазина. Для этого выполните следующие шаги:
        a) Откройте https://demo.moneta.ru и зайдите в личный кабинет магазина.
        b) Перейдите Мой счет >Управление счетами.
        c) В разделе Расширенные счета, нажмите Добавить счет.
        d) Заполните форму и нажмите Сохранить.


Настройки счета магазина
     В разделе управления счетами (блок «Счета» в левой части обзорной страницы, ссылка «Мой счет»
     > «Управление счетами») уполномоченные представители магазина могут настроить параметры
     взаимодействия учетной системы магазина и системы «МОНЕТА.РУ».
                                                                                           | С чего начать |   8



Название            Описание
Тестовый режим      Признак тестового режима, в котором движения средств по операции не
                    происходит, но обеспечивается информационный обмен.
Список платежных Список (разделенный запятыми) идентификаторов платежных систем, которые
систем           необходимо показывать пользователю в MONETA.Assistant. Например, 1015,1017
                 - пользователю в MONETA.Assistant будут показаны только платежные системы
                 МОНЕТА.РУ и WebMoney. Если список пустой, то будут показаны все доступные
                 системы. Также это значение можно передать в запросе с помощью параметра
                 paymentSystem.limitIds.
Платежная система Указывается идентификатор платежной системы по умолчанию. Например, 1015 –
по умолчанию      МОНЕТА.РУ, 1020 – Яндекс.Деньги, 1017 – WebMoney и т.д. Список доступных
                  способов оплаты для заданного счета можно посмотреть на странице "Рабочий
                  кабинет / Способы оплаты". Также это значение можно передать в запросе с
                  помощью параметра paymentSystem.unitId.
Check URL           Адрес обработчика в системе учета магазина для проверочных запросов. Если
                    в свойствах счета указан Check URL, то магазин будет получать проверочные
                    запросы. Дополнительная информация: Проверочные запросы (Check URL).
Pay URL             Адрес обработчика в системе учета магазина для уведомлений о проведенном
                    платеже. Дополнительная информация: Уведомление о проведенной оплате (Pay
                    URL).
HTTP Method         GET или POST метод отправки параметров для Check URL и Pay URL запросов.
Код проверки        Код, обеспечивающий идентификацию отправителя и возможность проверки
целостности         целостности данных, известный только системе «МОНЕТА.РУ» и учетной системе
данных              магазина. Устанавливается магазином при настройке счёта.
Подпись формы      Признак, который обязывает передавать параметр MNT_SIGNATURE в
оплаты обязательна запросе на оплату. Если в настройках счета выставлен этот флаг, но параметр
                   MNT_SIGNATURE в запросе на оплату не указан, то MONETA.Assistant
                   завершится с ошибкой.
                     Важно: Если в параметрах на оплату не указывается параметр
                     MNT_TRANSACTION_ID, то этот флаг выставлять не следует.
                     Запросы с параметром MNT_SIGNATURE при отсутствии параметра
                     MNT_TRANSACTION_ID будут неверны.

Можно               Признак возможности задавать в параметрах запроса на оплату адреса страниц для
переопределять      возврата пользователя на сайт магазина.
настройки в URL
Success URL         URL страницы магазина, куда должен попасть покупатель после благополучно
                    проведенной оплаты или незавершенной оплаты, если не задан InProgress URL.
                    Переход пользователя произойдет независимо от получения магазином отчета о
                    проведенной оплате.
                     Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID
                     в указанную ссылку, чтобы магазин смог определить внутренний идентификатор
                     заказа.

Fail URL            URL страницы магазина, куда должен попасть покупатель после отмененной
                    оплаты. Отчет об оплате в этом случае магазину не отсылается.
                     Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID
                     в указанную ссылку, чтобы магазин смог определить внутренний идентификатор
                     заказа.
                                                                                       | С чего начать |   9



Название         Описание
InProgress URL   URL страницы магазина, куда должен попасть покупатель после успешного
                 запроса на авторизацию средств, до подтверждения списания и зачисления
                 средств. Поддерживается ограниченным количеством методов оплаты. Переход
                 пользователя произойдет независимо от получения магазином средств и отчета о
                 проведенной оплате.
                  Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID
                  в указанную ссылку, чтобы магазин смог определить внутренний идентификатор
                  заказа.

Return URL       URL страницы магазина, куда должен вернуться покупатель при добровольном
                 отказе от оплаты. Отчет об оплате в этом случае магазину не отсылается.
                  Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID
                  в указанную ссылку, чтобы магазин смог определить внутренний идентификатор
                  заказа.
                                                                   | Запрос на оплату через MONETA.Assistant |   10




Глава

3
Запрос на оплату через MONETA.Assistant
                                      Запрос на оплату через интерфейс MONETA.Assistant представляет
•   Параметры запроса на              собой HTML-форму. Форма должна быть подготовлена магазином,
    оплату                            передана Пользователю, подтверждена Пользователем и отправлена
•   Формирование подписи в            на адрес https://www.payanyway.ru/assistant.htm для обработки
    запросе на оплату                 системой «MONETA.RU». Для тестирования работы системы можно
•   Примеры запросов на               использовать demo площадку: https://demo.moneta.ru/assistant.htm.
    оплату                            Если Вы планируете работать с MONETA.Assistant через iframe, то
                                      ссылка должна быть: https://www.payanyway.ru/assistant.widget (для
                                      тестирования https://demo.moneta.ru/assistant.widget).


Параметры запроса на оплату

     Обязательные параметры
     MNT_ID
             Идентификатор магазина в системе MONETA.RU. Соответствует номеру расширенного
             счета магазина.
                 Важно: Номера счетов на demo площадке и рабочей платформе будут различаться!
     MNT_AMOUNT
             Сумма оплаты. Десятичные символы отделяются точкой. Количество знаков после
             запятой - максимум два символа. Значение суммы носит рекомендательный характер и
             технически может быть изменено пользователем. Необязательный параметр, если указан
             Check URL в настройках счета. Если параметр не задан, то сумма будет запрошена в
             учетной системе магазина соответствующим проверочным запросом.

     Необязательные параметры
     MNT_TRANSACTION_ID
             Внутренний идентификатор заказа, однозначно определяющий заказ в магазине.
             Ограничение на размер – 255 символов.
                 Внимание: Если магазин не укажет этот параметр в запросе, то MONETA.Assistant
                 сам сгенерирует 20-ти значный идентификатор заказа, например:
                 MNT_TRANSACTION_ID=52972360059455248073.
                 Подсказка: В личном кабинете Moneta.Ru этот параметр также может называться
                 CTID или Внешний ID или Внешний идентификатор.
     MNT_CURRENCY_CODE
             ISO код валюты, в которой производится оплата заказа в магазине. Значение должно
             соответствовать коду валюты счета получателя (MNT_ID). Возможные значения:
             •    RUB
             •    USD
             •    EUR
     MNT_TEST_MODE
             Указание, что запрос происходит в тестовом режиме. Возможные значения:
                                                             | Запрос на оплату через MONETA.Assistant |   11



       •    0. MONETA.Assistant обрабатывает запросы в рабочем режиме.
       •    1. MONETA.Assistant обрабатывает запросы в тестовом режиме. Реального списания и
            зачисления средств не произойдет.
       Значение по умолчанию: 0
           Примечание: Запросы также будут происходить в тестовом режиме, если выставить
           флаг Тестовый режим в настройках счета.
MNT_DESCRIPTION
       Описание оплаты. Максимальная длина 500 символов.
MNT_SUBSCRIBER_ID
       Внутренний идентификатор пользователя, однозначно определяющий получателя в
       учетной системе магазина.
MNT_SIGNATURE
       Код для идентификации отправителя и проверки целостности данных. Если в
       запросе есть данный параметр, то MONETA.RU сгенерирует собственный код на
       основе параметров запроса и сравнит его с данным параметром. Если параметр
       «MNT_SIGNATURE» и код сгенерированный MONETA.RU не совпадут, то
       MONETA.Assistant завершится с ошибкой. Является обязательным, если в настройках
       счета выставлен флаг Подпись формы оплаты обязательна. Дополнительная
       информация: Формирование подписи в запросе на оплату
           Важно: Если в параметрах на оплату не указывается параметр
           MNT_TRANSACTION_ID, то параметр MNT_SIGNATURE передавать не
           следует. Запросы с параметром MNT_SIGNATURE при отсутствии параметра
           MNT_TRANSACTION_ID будут неверны.
MNT_CUSTOM1, MNT_CUSTOM2, MNT_CUSTOM3
       Поля произвольных параметров. Будут возращены магазину в параметрах отчета о
       проведенной оплате.
MNT_SUCCESS_URL
       URL страницы магазина, куда должен попасть покупатель после успешно выполненных
       действий. Переход пользователя произойдет независимо от получения магазином
       средств и отчета о проведенной оплате. Этот параметр используется только тогда,
       когда в настройках счета выставлен флаг: Можно переопределять настройки в URL.
       Если данный флаг не выставлен или параметр «MNT_SUCCESS_URL» не задан, то
       используются данные из Success URL в настройках счета. Если не передать параметр
       «MNT_SUCCESS_URL» и не выставить поле Success URL, но указать флаг Можно
       переопределять настройки в URL, то по умолчанию в качестве Success URL будет
       использоваться ссылка: https://www.moneta.ru/paymentSuccess.htm.
           Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID в
           указанную ссылку, чтобы магазин смог определить внутренний идентификатор заказа.
MNT_INPROGRESS_URL
       URL страницы магазина, куда должен попасть покупатель после успешного запроса на
       авторизацию средств, до подтверждения списания и зачисления средств. Поддерживается
       ограниченным количеством методов оплаты. Переход пользователя произойдет
       независимо от получения магазином средств и отчета о проведенной оплате. Этот
       параметр используется только тогда, когда в настройках счета выставлен флаг: Можно
       переопределять настройки в URL. Если данный флаг не выставлен или параметр
       «MNT_INPROGRESS_URL» не задан, то используются данные из InProgress URL в
       настройках счета.
           Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID в
           указанную ссылку, чтобы магазин смог определить внутренний идентификатор заказа.
MNT_FAIL_URL
       URL страницы магазина, куда должен попасть покупатель после отмененной или
       неуспешной оплаты. Отчет об оплате в этом случае магазину не отсылается. Этот
       параметр используется только тогда, когда в настройках счета выставлен флаг: Можно
                                                                   | Запрос на оплату через MONETA.Assistant |   12



             переопределять настройки в URL. Если данный флаг не выставлен или параметр
             «MNT_FAIL_URL» не задан, то используются данные из Fail URL в настройках счета.
             Если не передать параметр «MNT_FAIL_URL» и не выставить поле Fail URL, но указать
             флаг Можно переопределять настройки в URL, то по умолчанию в качестве Fail URL
             будет использоваться ссылка: https://www.moneta.ru/paymentFail.htm.
                 Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID в
                 указанную ссылку, чтобы магазин смог определить внутренний идентификатор заказа.
   MNT_RETURN_URL
             URL страницы магазина, куда должен вернуться покупатель при добровольном
             отказе от оплаты. Отчет об оплате в этом случае магазину не отсылается. Этот
             параметр используется только тогда, когда в настройках счета выставлен флаг: Можно
             переопределять настройки в URL. Если данный флаг не выставлен или параметр
             «MNT_RETURN_URL» не задан, то используются данные из Return URL в настройках
             счета.
                 Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID в
                 указанную ссылку, чтобы магазин смог определить внутренний идентификатор заказа.
   moneta.locale
             Язык пользовательского интерфейса. Возможные варианты:
             •     ru. Русский язык.
             •     en. Английский язык.
   paymentSystem.unitId
             (1015 – МОНЕТА.РУ, 1020 – Яндекс.Деньги, 1017 – WebMoney и т.п.) Предварительный
             выбор платежной системы. Список доступных способов оплаты для заданного
             счета можно посмотреть на странице Рабочий кабинет / Способы оплаты (https://
             www.moneta.ru/viewPaymentMethods.htm)
   paymentSystem.limitIds
             Список (разделенный запятыми) идентификаторов платежных систем, которые
             необходимо показывать пользователю в MONETA.Assistant. Например, «1015,1017»
             - пользователю в MONETA.Assistant будут показаны только платежные системы
             МОНЕТА.РУ и WebMoney.


Формирование подписи в запросе на оплату
   Кодирование ключа производится путем конкатенации в одну строку значений параметров запроса и
   кода проверки целостности данных, кодированием по алгоритму Message Digest 5 (MD5) - RFC 1321 и
   представлением массива байт в виде строки шестнадцатеричных чисел:

    MNT_SIGNATURE = MD5(MNT_ID + MNT_TRANSACTION_ID + MNT_AMOUNT + MNT_CURRENCY_CODE +
     MNT_SUBSCRIBER_ID + ТЕСТОВЫЙ РЕЖИМ + КОД ПРОВЕРКИ ЦЕЛОСТНОСТИ ДАННЫХ)

    Важно:
    •   Значение параметра MNT_AMOUNT должно быть с двумя десятичными знаками, отделенными
        точкой, например, «1.23» или «123.00».
    •   Если MNT_SUBSCRIBER_ID отсутствует, то в подписи вместо него используется пустая строка (не
        «null», не «0», не пробел).
    •   ТЕСТОВЫЙ РЕЖИМ – если запрос на оплату происходит в тестовом режиме, то это значение
        должно быть равно «1», иначе «0».
                                                                | Запрос на оплату через MONETA.Assistant |   13




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

   Пример 1
   Пример минимальной формы (если выставлены все необходимые настройки в свойствах счета) для
   оплаты заказа «FF790ABCD» в магазине «MAGAZIN.RU» (номер счета 00000001) на сумму 120.25
   рублей:

    <form method="post" action="https://www.payanyway.ru/assistant.htm">
      <input type="hidden" name="MNT_ID" value="00000001">
      <input type="hidden" name="MNT_TRANSACTION_ID" value="FF790ABCD">
      <input type="hidden" name="MNT_CURRENCY_CODE" value="RUB">
      <input type="hidden" name="MNT_AMOUNT" value="120.25">
      <input type="submit" value="Pay order">
    </form>


   Пример 2
   Пример формы для оплаты заказа «FF790ABCD» в магазине «MAGAZIN.RU» (номер счета 00000001) на
   сумму 120.25 рублей с указанием дополнительных параметров:

    <form method="post" action="https://www.payanyway.ru/assistant.htm">
      <input type="hidden" name="MNT_ID" value="00000001">
      <input type="hidden" name="MNT_TRANSACTION_ID" value="FF790ABCD">
      <input type="hidden" name="MNT_CURRENCY_CODE" value="RUB">
      <input type="hidden" name="MNT_AMOUNT" value="120.25">
      <input type="hidden" name="MNT_TEST_MODE" value="1">
      <input type="hidden" name="MNT_SUCCESS_URL"
      value="https://www.magazin.ru/success.htm">
      <input type="hidden" name="MNT_FAIL_URL"
      value="https://www.magazin.ru/failure.htm">
      <input type="hidden" name="MNT_RETURN_URL"
      value="https://www.magazin.ru/payment.htm">
      <input type="hidden" name="MNT_INPROGRESS_URL"
      value="https://www.magazin.ru/processing.htm">
      <input type="hidden" name="MNT_CUSTOM1" value="1234567890">
      <input type="hidden" name="MNT_CUSTOM2" value="abcdefghij">
      <input type="hidden" name="MNT_CUSTOM3" value="somebody@somewhere.com">
      <input type="submit" value="Pay order">
    </form>


   Пример 3
   Пример формы для оплаты заказа «FF790ABCD» в магазине «MAGAZIN.RU» (номер счета 00000001) на
   сумму 120.25 рублей. MONETA.Assistant будет показан пользователю на английском языке, и платежной
   системой по умолчанию будет выбран WebMoney:

    <form method="post" action="https://www.payanyway.ru/assistant.htm">
      <input type="hidden" name="MNT_ID" value="00000001">
      <input type="hidden" name="MNT_TRANSACTION_ID" value="FF790ABCD">
      <input type="hidden" name="MNT_CURRENCY_CODE" value="RUB">
      <input type="hidden" name="MNT_AMOUNT" value="120.25">
      <input type="hidden" name="moneta.locale" value="en">
      <input type="hidden" name="paymentSystem.unitId" value="1017">
      <input type="submit" value="Pay order">
    </form>
                                                          | Запрос на оплату через MONETA.Assistant |   14



Пример 4
Пример формы для оплаты заказа «FF790ABCD» в магазине «MAGAZIN.RU» (номер счета 54600817)
на сумму 120.25 рублей с указанием подписи MNT_SIGNATURE. Оплата происходит в обычном (не
тестовом) режиме:

 <form method="post" action="https://www.payanyway.ru/assistant.htm">
   <input type="hidden" name="MNT_ID" value="54600817">
   <input type="hidden" name="MNT_TRANSACTION_ID" value="FF790ABCD">
   <input type="hidden" name="MNT_CURRENCY_CODE" value="RUB">
   <input type="hidden" name="MNT_AMOUNT" value="120.25">
   <input type="hidden" name="MNT_SIGNATURE" value="c8222aef6362c7f1239ccdc729d1a200">
   <input type="submit" value="Pay order">
 </form>

MNT_SIGNATURE в запросе на оплату вычисляется следующим образом:

 MNT_SIGNATURE = md5(54600817FF790ABCD120.25RUB0QWERTY)

где QWERTY – код проверки целостности данных.
Глава

4
Уведомление о проведенной оплате (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
                                                                  | Уведомление о проведенной оплате (Pay URL) |   16



                 Если оплата произведена в тестовом режиме, то параметр содержит «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, что магазин получил информацию об оплате, скрипт
   магазина (PayURL) должен дать ответ соответсвующим образом.
   Ответ может быть в одном из форматов:
   •       Текстовый формат в кодировке UTF-8. Этот ответ не должен содержать HTML тэги.
   •       Ответ в XML формате.
       Примечание: Ответ об успешном получении уведомления следует возвращать также в том случае, если
       учетной системой магазина уведомление принято повторно, то есть, в том случае, когда магазин уже
       отвечал результатом «SUCCESS» на предшествующие уведомления.
   Попытки отправки уведомления будут повторены:
   •       Если система «MONETA.RU» не смогла получить ответ от обработчика.
   •       Если сервер магазина был недоступен.
   •       Если текстовая строка начинается словом FAIL
                                                               | Уведомление о проведенной оплате (Pay URL) |   17



Текстовый формат ответа на уведомление об оплате
   Текстовый формат ответа на уведомление об оплате должен быть в кодировке UTF-8.
   Возможные значения:
   •    SUCCESS. Магазин получил уведомление об оплате. Операция в системе Moneta.Ru переходит в
        состояние "Выполнено".
   •    FAIL. Магазин не обработал уведомление об оплате. Операция в системе Moneta.Ru остается в
        состоянии "Уведомление не отправлено". 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 символа.
                                                               | Уведомление о проведенной оплате (Pay URL) |   18



   VALUE
               Значение параметра операции.

   Формирование подписи в ответе на уведомление об оплате
   Кодирование ключа производится путем конкатенации в одну строку значений в ответе на запрос и
   кода проверки целостности данных, кодированием по алгоритму Message Digest 5 (MD5) - RFC 1321 и
   представлением массива байт в виде строки шестнадцатеричных чисел:

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

       Внимание: Не добавляйте параметры и не меняйте порядок параметров в указанной выше формуле.
   MONETA.Assistant использует эту подпись, чтобы проверить ответ магазина. MONETA.Assistant
   создает свою подпись, используя эту же формулу и сравнивает полученный ответ с параметром
   MNT_SIGNATURE в ответе на уведомление об оплате.

   Коды ответа на запрос с уведомлением об оплате
   Следующая таблица описывает коды ответа, которые можно использовать в ответе на запрос с
   уведомлением об оплате:

   Код ответа         Описание
   200                Заказ оплачен. Уведомление об оплате магазину доставлено.
   100, 302, 402      Отправка уведомления об оплате будет повторена.
   500                Ошибка обработки. Автоматическая отправка уведомлений будет остановлена.
                      Необходимо связаться с группой поддержки MONETA.RU.

       Примечание: В обычных случаях для завершения процесса оплаты следует использовать код ответа
       200.


Пример запроса с уведомлением об оплате
   Пример запроса на адрес «Pay URL» с уведомлением об оплате операции «123456» для заказа
   «FF790ABCD» в магазине «MAGAZIN.RU» (номер счета 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 уведомления об оплате вычисляется следующим образом:

       MNT_SIGNATURE = md5(54600817FF790ABCD123456120.25RUB0QWERTY)

   где QWERTY – код проверки целостности данных.

   Ответ на уведомление об оплате
   Магазин может ответить одним из следующих ответов на успешное проведение оплаты:
   •    Текстовый ответ:

         SUCCESS

   •    Ответ в XML формате:

         <?xml version="1.0" encoding="UTF-8"?>
         <MNT_RESPONSE>
           <MNT_ID>54600817</MNT_ID>
                                                   | Уведомление о проведенной оплате (Pay URL) |   19



   <MNT_TRANSACTION_ID>FF790ABCD</MNT_TRANSACTION_ID>
   <MNT_RESULT_CODE>200</MNT_RESULT_CODE>
   <MNT_SIGNATURE>29807c8e5d82198b5c4360e6ec711cce</MNT_SIGNATURE>
 </MNT_RESPONSE>

MNT_SIGNATURE ответа на уведомление об оплате вычисляется следующим образом:

 MNT_SIGNATURE = md5(20054600817FF790ABCDQWERTY)

где QWERTY – код проверки целостности данных.
                                                                           | Проверочные запросы (Check URL) |   20




Глава

5
Проверочные запросы (Check URL)
                                     Если в свойствах счета магазина выставитьCheck URL, то магазину,
•   Параметры проверочного           кроме уведомления о проведенной оплате, будут отсылаться
    запроса                          проверочные запросы.
•   Формирование подписи
                                     Проверочные запросы служат для того, чтобы:
    проверочного запроса
•   Ответ на проверочный             •   Убедиться, что заказ существует, что заказ еще не оплачен, что
    запрос                               срок действия заказа не истек.
•   Формирование подписи в           •   Указать сумму заказа, если магазин не передал сумму заказа в
    ответе на проверочный                HTML-форме.
    запрос                           •   Проверить статус заказа, если товар уже оплачен.
•   Коды ответа на                   Проверочные запросы MONETA.Assistant отсылает на указанную
    проверочный запрос               страницу магазина Check URL в виде HTTP запроса методом GET
•   Примеры проверочных              или POST. Ответ на HTTP запрос должен быть в формате XML. Во
    запросов                         время оплаты одного заказа MONETA.Assistant может несколько раз
                                     отсылать проверочные запросы.


Параметры проверочного запроса
     MNT_COMMAND
              CHECK для проверочных запросов. Параметр отсутствует для запросов с уведомлением
              об оплате на адрес, указанный в «Pay URL».
              Возможные значения: CHECK.
     MNT_ID
              Идентификатор магазина в системе MONETA.RU.
     MNT_TRANSACTION_ID
              Внутренний идентификатор заказа, однозначно определяющий заказ в магазине.
     MNT_OPERATION_ID
              Номер операции в системе MONETA.RU. Если операция еще не создана в системе
              MONETA.RU, то это поле не будет отправлено.
               Примечание: Необязательное поле.
     MNT_AMOUNT
              Фактическая сумма, полученная на оплату заказа, без учета комиссии за услуги системы
              MONETA.RU. Если магазин не передал сумму заказа в HTML форме, то данного
              параметра может не быть. Если в запросе нет данного параметра, то магазин обязан
              вернуть сумму заказа в ответе на данный запрос, иначе MONETA.Assistant завершит
              обработку с ошибкой.
               Примечание: Необязательное поле.
     MNT_CURRENCY_CODE
              ISO код валюты, в которой произведена оплата заказа в магазине.
     MNT_SUBSCRIBER_ID
                                                                        | Проверочные запросы (Check URL) |   21



             Внутренний идентификатор пользователя, однозначно определяющий получателя в
             учетной системе магазина.
   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.


Формирование подписи проверочного запроса
   В каждом проверочном запросе, отправленном на Check URL, передается параметр MNT_SIGNATURE.
   Чтобы проверить подпись запроса, магазину следует создать свою подпись, используя параметры запроса
   и сравнить полученное значение с параметром MNT_SIGNATURE, который пришел в проверочном
   запросе.
   Кодирование ключа производится путем конкатенации в одну строку значений параметров запроса и
   кода проверки целостности данных, кодированием по алгоритму Message Digest 5 (MD5) - RFC 1321 и
   представлением массива байт в виде строки шестнадцатеричных чисел:

    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 или в случае уведомления об оплате отсутствует MNT_COMMAND, то при
        кодировании ключа эти поля следует пропустить (не «null», не «0», не пробел, а пустая строка).
   Например, если в проверочном запросе нет параметров MNT_OPERATION_ID, MNT_AMOUNT и
   MNT_SUBSCRIBER_ID, то MNT_SIGNATURE следует расчитывать по формуле:

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




Ответ на проверочный запрос
   При вызове проверочного запроса (Check URL) магазину следует послать ответ в XML формате.
                                                                        | Проверочные запросы (Check URL) |   22



При получении ответа на проверочный запрос в системе MONETA.RU анализируются поля ответа.
MONETA.Assistant прекращает обработку оплаты:
•    Если система MONETA.RU не смогла получить ответ от обработчика.
•    Если ответ содержит неверный формат.
•    Если 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
            Идентификатор магазина в системе MONETA.RU.
MNT_TRANSACTION_ID
            Внутренний идентификатор заказа, однозначно определяющий заказ в магазине.
MNT_RESULT_CODE
            Код ответа на запрос. Список кодов смотрите в соответствующем разделе: Коды ответа
            на проверочный запрос.
MNT_DESCRIPTION
            Описание состояния заказа. Задается в произвольной форме.
MNT_AMOUNT
            Сумма оплаты.
MNT_SIGNATURE
            Код для идентификации отправителя и проверки целостности данных. Дополнительная
            информация: Формирование подписи в ответе на проверочный запрос
MNT_ATTRIBUTES
            Содержит произвольные параметры, которые будут сохранены в операции.
             Примечание: Необязательный элемент.
ATTRIBUTE
            Элемент представляет один произвольный параметр операции.
KEY
            Уникальное название параметра операции. Может быть произвольным и не должно
            превышать 32 символа.
VALUE
            Значение параметра операции.
                                                                           | Проверочные запросы (Check URL) |   23




Формирование подписи в ответе на проверочный запрос
   Кодирование ключа производится путем конкатенации в одну строку значений в ответе на запрос и
   кода проверки целостности данных, кодированием по алгоритму Message Digest 5 (MD5) - RFC 1321 и
   представлением массива байт в виде строки шестнадцатеричных чисел:

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

    Внимание: Не добавляйте параметры и не меняйте порядок параметров в указанной выше формуле.
   MONETA.Assistant использует эту подпись, чтобы проверить ответ магазина. MONETA.Assistant
   создает свою подпись, используя эту же формулу и сравнивает полученный ответ с параметром
   MNT_SIGNATURE в ответе на проверочный запрос.


Коды ответа на проверочный запрос
   Следующая таблица описывает коды ответа, которые можно использовать в ответе на проверочный
   запрос:

   Код         Описание
   ответа
   100         Ответ содержит сумму заказа для оплаты. Данным кодом следует отвечать, когда в
               параметрах проверочного запроса не был указан параметр MNT_AMOUNT.
   200         Заказ оплачен. Уведомление об оплате магазину доставлено.
   302         Заказ находится в обработке. Точный статус оплаты заказа определить невозможно.
   402         Заказ создан и готов к оплате. Уведомление об оплате магазину не доставлено.
   500         Заказ не является актуальным в магазине (например, заказ отменен). При получении
               данного кода MONETA.Assistant не будет больше пытаться отсылать уведомление об
               оплате, если оно не было доставлено.

    Примечание: В обычных случаях для продолжения процесса оплаты следует использовать код ответа
    402 или 100.


Примеры проверочных запросов
   Пример проверочного запроса на адрес Check URL для заказа «FF790ABCD» в магазине
   «MAGAZIN.RU» (номер счета 54600817) на сумму 120.25 без указания номера операции в системе
   MONETA.RU.
   Проверочный запрос в магазин:

    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

   MNT_SIGNATURE проверочного запроса вычисляется следующим образом:

    MNT_SIGNATURE = md5(CHECK54600817FF790ABCD120.25RUB0QWERTY)

   где QWERTY – код проверки целостности данных.
   Ответ магазина:

    <?xml version="1.0" encoding="UTF-8"?>
    <MNT_RESPONSE>
      <MNT_ID>54600817</MNT_ID>
                                                                 | Проверочные запросы (Check URL) |   24




   <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>

MNT_SIGNATURE ответа на проверочный запрос вычисляется следующим образом:

 MNT_SIGNATURE = md5(40254600817FF790ABCDQWERTY)

где QWERTY – код проверки целостности данных.
Поля name и email, пришедшие в элементе MNT_ATTRIBUTES, будут сохранены в операции.
Глава

6
Автоматическое прохождение MONETA.Assistant
                                    В обычном режиме работы MONETA.Assistant пользователь может:
•   Дополнительные
    параметры запроса на            1.   Выбрать платежную систему для оплаты заказа.
    оплату                          2.   Указать необходимые параметры этой платежной системы.
•   Примеры запросов на             3.   Увидеть страницу с деталями операции.
    оплату                          4.   После этого он попадает непосредственно на страницу выбранной
                                         платежной системы.
                                    Например, пользователь выбирает платежную систему WebMoney,
                                    затем выбирает в качестве источника оплаты WebMoney WMR,
                                    затем видит детали операции, и только после этого попадает на сайт
                                    «WebMoney».
                                    MONETA.Assistant позволяет в автоматическом режиме выбрать
                                    необходимую платежную систему, заполнить параметры этой
                                    платежной системы и перейти на сайт выбранной платежной системы.
                                    Для этого необходимо заполнить дополнительные параметры запроса
                                    на оплату заказа.


Дополнительные параметры запроса на оплату

     Параметр               Описание
     followup               Пройти весь MONETA.Assistant с предустановленными значениями. Для
                            этого необходимо выбрать платежную систему и заполнить параметры
                            платежной системы (если они есть). Возможные значнения:
                            •   true. Использовать дополнительные параметры, чтобы пропустить шаги
                                MONETA.Assistant.
                            •   false. Пользователь сам заполняет формы MONETA.Assistant.
                            Значение по умолчанию: false

     paymentSystem.unitId   (1015 – МОНЕТА.РУ, 1020 – Яндекс.Деньги, 1017 – WebMoney и т.п.)
                            Предварительный выбор платежной системы. Полный список способов
                            оплаты можно посмотреть: https://www.moneta.ru/viewPaymentMethods.htm
     javascriptEnabled      (true|false) Признак возможности использовать javascript для автоматической
                            обработки форм. Если будет передано значение «true», а на самом деле у
                            пользователя javascript выключен, то пользователь увидит пустую страницу.
                            Важно передавать действительное значение – «включен» или «выключен»
                            javascript в браузере пользователя. Используется совместно с параметром
                            «followup».

     paymentSystem.accountId Номер счета платежной системы. Например, тип кошелька WebMoney, 2 –
                             WMR, 3 – WMZ, 4 – WME.
                                                           | Автоматическое прохождение MONETA.Assistant |   26




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

   Пример 1
   Пример формы для оплаты заказа «FF790ABCD» в магазине «MAGAZIN.RU» (номер счета 00000001) на
   сумму 120.25 рублей с автоматической обработкой диалогов. Оплата будет производиться через систему
   WebMoney, средства будут списаны с WMR кошелька. Пользователь будет перенаправлен на страницу
   оплаты системы WebMoney.

    <form method="post" action="https://www.payanyway.ru/assistant.htm">
      <input type="hidden" name="MNT_ID" value="00000001">
      <input type="hidden" name="MNT_TRANSACTION_ID" value="FF790ABCD">
      <input type="hidden" name="MNT_CURRENCY_CODE" value="RUB">
      <input type="hidden" name="MNT_AMOUNT" value="120.25">
      <input type="hidden" name="paymentSystem.unitId" value="1017">
      <input type="hidden" name="paymentSystem.accountId" value="2">
      <input type="hidden" name="javascriptEnabled" value="true">
      <input type="hidden" name="followup" value="true">
      <input type="submit" value="Pay with Webmoney WMR">
    </form>

   Если в браузере пользователя выключен javascript и в MONETA.Assistant придет параметр
   javascriptEnabled=false, то пользователь попадет на последний шаг MONETA.Assistant – просмотр деталей
   операции. Для перехода на сайт системы WebMoney пользователь должен нажать кнопку Продолжить.

   Пример 2
   Пример формы для оплаты заказа «FF790ABCD» в магазине «MAGAZIN.RU» (номер счета 00000001) на
   сумму 120.25 рублей с автоматической обработкой диалогов. Оплата будет производиться через систему
   Яндекс.Деньги.

    <form method="post" action="https://www.payanyway.ru/assistant.htm">
      <input type="hidden" name="MNT_ID" value="00000001">
      <input type="hidden" name="MNT_TRANSACTION_ID" value="FF790ABCD">
      <input type="hidden" name="MNT_CURRENCY_CODE" value="RUB">
      <input type="hidden" name="MNT_AMOUNT" value="120.25">
      <input type="hidden" name="paymentSystem.unitId" value="1020">
      <input type="hidden" name="followup" value="true">
      <input type="submit" value="Pay with Yandex.Money">
    </form>
Глава

7
Получение данных от поставщика
                                     Для поставщиков, предоставляющих при оплате расширенную
•   Основные принципы                информацию в интерактивном режиме, возможна отправка
    взаимодействия                   дополнительных проверочных запросов после каждого шага по вводу
•   Параметры запроса                параметров.
•   Формирование подписи             Проверочные запросы служат для того, чтобы:
    запроса
                                     1. Получить от поставщика данные которые зависят от уже
•   Формат ответа на запрос
                                        введенных данных (например, по лицевому счету вернуть адрес и
•   Формирование подписи в              показания счетчиков).
    ответе на запрос
                                     2. Указать сумму заказа, если сумма зависит от введенных
•   Дополнительные коды                 параметров.
    ответа на проверочный
    запрос
•   Пример запроса
•   Пример корректного
    ответа


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


Параметры запроса
     MNT_COMMAND
              STEP для запросов на получение данных.
     MNT_ID
              Идентификатор поставщика в системе MONETA.RU. Соответствует номеру счета.
     MNT_AMOUNT
              Фактическая сумма, полученная на оплату заказа, без учета комиссии за услуги системы
              MONETA.RU. Если поставщик не передал сумму заказа в HTML форме, то данного
              параметра может не быть.
                Примечание: Необязательное поле.
     MNT_CURRENCY_CODE
              ISO код валюты.
                Примечание: Необязательное поле.
     MNT_TEST_MODE
              Если запрос сделан в тестовом режиме, то параметр содержит «1», если в реальном – «0».
                Примечание: Необязательное поле.
                                                                        | Получение данных от поставщика |   28



   MNT_SIGNATURE
             Код для идентификации отправителя и проверки целостности данных. Дополнительная
             информация: Формирование подписи запроса
   STEP
             Наименование текущего шага ввода параметров. Например, значение «PRE».
   Параметры, названия которых начинаются с «CUSTOMFIELD:»
             Параметры, переданные в запросе на получение дополнительных данных.


Формирование подписи запроса
   Кодирование ключа производится путем конкатенации в одну строку значений параметров запроса и
   кода проверки целостности данных, кодированием по алгоритму Message Digest 5 (MD5) - RFC 1321 и
   представлением массива байт в виде строки шестнадцатеричных чисел:

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

    Важно:
    •   Значение параметра MNT_AMOUNT должно быть с двумя десятичными знаками, отделенными
        точкой, например, «1.23» или «123.00».
    •   Если в проверочном запросе не указан параметр MNT_AMOUNT, то при кодировании ключа это
        поле следует пропустить (не «null», не «0», не пробел, а пустая строка).
    •   ТЕСТОВЫЙ РЕЖИМ – если запрос происходит в тестовом режиме, то это значение должно быть
        равно «1», иначе «0».
   Например, в проверочном запросе без суммы подпись будет вычисляться по правилу:

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

    Примечание: Поставщику для проверки необходимо сформировать строку на основе своих данных
    и полей запроса, закодировать ее, преобразовать в строку шестнадцатеричных чисел и сравнить
    полученный код со значением подписи в запросе.


Формат ответа на запрос
   Ответ на запрос должен быть в формате xml следующей структуры:

    <?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
                                                                           | Получение данных от поставщика |   29



               Код ответа на запрос. Дополнительные коды ответа на проверочный запрос.
   MNT_DESCRIPTION
               Описание состояния заказа. Задается в произвольной форме.
   MNT_AMOUNT
               Сумма оплаты.
   MNT_SIGNATURE
               Код для идентификации отправителя и проверки целостности данных. Дополнительная
               информация: Формирование подписи в ответе на запрос
   MNT_ATTRIBUTES
               Содержит параметры, которые будут использоваться в следующем шаге ввода
               параметров.
   ATTRIBUTE
               Элемент представляет один произвольный параметр операции.
   KEY
               Уникальное название параметра операции. Может быть произвольным и не должно
               превышать 32 символа.
   VALUE
               Значение параметра операции.
   При получении ответа на проверочный запрос в системе MONETA.RU анализируются поля ответа.
   Проверочный запрос считается не отправленным, и дальнейшая обработка заказа будет прервана:
   •    Если система MONETA.RU не смогла получить ответ от обработчика.
   •    Если ответ содержит неверный формат.
   •    Если MNT_ID или MNT_TRANSACTION_ID не соответствуют параметрам запроса.
   •    Если MNT_RESULT_CODE не соответствует списку возможных кодов.
   •    Если MNT_SIGNATURE не сходится с ключом, сгенерированным в MONETA.RU.


Формирование подписи в ответе на запрос
   Кодирование ключа производится путем конкатенации в одну строку значений в ответе на запрос и
   кода проверки целостности данных, кодированием по алгоритму Message Digest 5 (MD5) - RFC 1321 и
   представлением массива байт в виде строки шестнадцатеричных чисел:

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

   Кодирование является однонаправленным, поэтому MONETA.Assistant сформирует строку на основе
   своих данных и полей отчета, закодирует ее, преобразует в строку шестнадцатеричных чисел и сравнит
   полученный код со значением подписи в отчете.


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

   Код      Описание
   206      Переданные данные успешно обработаны и сформирован ответ.
            Другие коды ответа соответствуют кодам проверочных запросов: Коды ответа на проверочный
            запрос



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

       checkUrl?MNT_COMMAND=STEP&MNT_ID=9003&MNT_AMOUNT=123.45&STEP=PRE&MNT_CURRENCY_CODE=RUB&
                                                                  | Получение данных от поставщика |   30




    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>
Приложение

A
Дополнительные коды ошибок, отображаемые
пользователю

                 Код    Описание
                 ошибки
                 302    При отправке проверочного запроса в адрес партнера
                        получен некорректный ответ (стандартная html
                        страница, страница с сообщением об ошибке и т.п.) или
                        перенаправление на другой адрес (HTTP Status 301, 302).
                        Убедитесь, что ваш сервис доступен по адресу, указанному
                        в Check URL, и в ответ на запрос вы возвращаете
                        корректный XML.
                 -1     Запроса не было. В настройках счета задан параметр Check
                        URL, но не задан параметр Pay URL.
                 -600   Невозможно отправить уведомление. Неверный Check
                        URL или Pay URL или невозможно установить соединение.
                        Убедитесь, что в разделе управления счетами в настройках
                        Check URL и Pay URL заданы верно, например, в виде:

                         http://www.merchant-site.com/script

                         Примечание: Адрес должен быть доступен для нашей
                         системы (например, нельзя задавать локальные имена
                         внутренних серверов "localhost", "my-pc" и т.п.).

                 -700   Невозможно обработать ответ. Неверный xml формат
                        ответа или неверно сформированная подпись ответа.
                        Убедитесь, что ваш сервис возвращает xml в корректном
                        формате, при формировании подписи вы используете
                        тот же код проверки целостности данных, что указан в
                        настройках счета.
                             | Использование виджета для отображения MONETA.Assistant |   32




Приложение

B
Использование виджета для отображения
MONETA.Assistant
                 Виджет https://www.payanyway.ru/assistant.widget - это форма оплаты,
                 у которой визуальное представление организовано таким образом,
                 чтобы посетитель интернет-магазина мог бы ввести его платежные
                 данные прямо в корзине своего интернет-магазина.
                 Если Вы не используете виджет, то посетитель должен будет
                 перейти из корзины на отдельную страницу оплаты заказа по кнопке
                 “Оплатить”, размещенной в корзине.
                 Кнопка “Оплатить” в корзине должна формироваться динамически
                 и представляет собой форму, у которой имеется ряд скрытых полей.
                 Таким образом, видна остается лишь только кнопка для отправки
                 формы, т.е. кнопка “Оплатить”:

                  <form method='post' action='https://www.payanyway.ru/
                  assistant.htm'>
                      <input type='hidden' name='MNT_ID' value='19312235'>
                      <input type='hidden' name='MNT_CURRENCY_CODE'
                   value='RUB'>
                      <input type='hidden' name='MNT_AMOUNT' value='10.25'>
                      <input type='submit' value='Pay order'>
                  </form>

                 Чтобы вместо кнопки “Оплатить” сразу показать форму оплаты, надо
                 поместить в корзину код iframe:

                  <iframe src='https://www.payanyway.ru/assistant.widget?
                  MNT_ID=19312235&MNT_CURRENCY_CODE=RUB&MNT_AMOUNT=10.25
                   &paymentSystem.unitId=card'>
                      Ваш браузер не поддерживает плавающие фреймы!
                  </iframe>

                 Таким образом, мы “просим” MONETA.Assistant показать форму для
                 оплаты заказа внутри iframe.
                 Если корзина интернет-магазина может быть изменена без
                 перезагрузки страницы, то следует так же менять и параметры,
                 передаваемые в iframe, в частности сумму заказа.
                 Особенности использования
                 Ссылка assistant.widget отличается от assistant.htm только дизайном
                 - в assistant.widget не показываются хидеры, футеры и т.д. Это та же
                 кнопка “Оплатить”, но уже “развёрнутая”.
                 SuccessUrl и FailUrl вызываются также, но нужно учитывать, что
                 они покажутся в Вашем фрейме. Так как SuccessUrl и FailUrl - это
                 страницы с Вашим дизайном, то Вам следует их оформить так,
                 чтобы они хорошо смотрелись в iframe. Если Вам необходимо
                 иметь разные SuccessUrl и FailUrl для работы с одним счетом
                 (показывать в iframe и в браузере), то Вы можете передавать
                 параметры MNT_SUCCESS_URL и MNT_FAIL_URL необходимые
            | Использование виджета для отображения MONETA.Assistant |   33



для данного конкретного случая (на счете в таком случае должна
стоять галочка - “Можно переопределять параметры в запросе”).
Содержимое iframe можно стилизовать индивидуально по Вашему
усмотрению. Примеры страниц, на которых выводится виджет
MONETA.Assistant с измененным внешним видом при помощи
дополнительного css-кода можно увидеть здесь: https://payanyway.ru/
info/w/ru/public/w/partnership/developers/widget-css.html
Там же есть листинги css-кода по каждому из приведенных примеров.
Для установки стилей на Вашем расширенном счете, необходимо
прислать css-код для review в техническую поддержку.
Примеры использования
http://payanyway.ru/info/w/ru/public/w/partnership/demo/var2.html