Подразделы Платёжная форма и виджет
Платёжная форма
Подразделы Платёжная форма
Настройка стилей
1. Общая информация
Для платёжной формы доступна персонализация стилей, позволяющая адаптировать внешний вид. Вы можете изменить цветовую схему, шрифты, отступы и другие визуальные элементы без изменения функциональности и структуры.
Ознакомиться с платёжной формой можно в разделе “Платёжная форма и виджет” — «Новая платёжная форма».
Все загружаемые стили проходят автоматическую проверку на соответствие требованиям безопасности. Некоторые CSS-свойства будут удалены системой для защиты пользовательских данных и поддержания функциональности платёжной формы.
2. Основные элементы формы для кастомизации
- Хедер формы:
payment-header__info— контейнер заголовка платёжной формыmerchant— блок данных магазинаmerchant-name— название магазинаamount— блок с суммой платежаamount__total-wrapper— обёртка для суммы и деталейamount__total— сумма платежаarrow-bottom— стрелка для раскрытия деталейamount__details— детали платежаamount__details-item— элементы деталей платежа (получатель, номер заказа, описание)payment-form__mnt-logo— логотип магазина
- Кнопки:
button-primary— основная кнопка оплатыbutton-secondary— второстепенные кнопкиpayment-form__navigation— навигация по форме
- Поля ввода:
input— базовые поля вводаinput-wrapper— обёртка для полей вводаselect— выпадающие спискиselect-wrapper— обёртка для выпадающих списковselect-arrow— стрелка выпадающего спискаoption— стили для опций в выпадающем списке
- Основной контент:
payment-form__content— основной контейнер контента формыpayment-form__title— заголовок блока оплатыpayment-form__comment— дополнительная информация блока оплатыpayment-form__error— блок ошибок (красный)payment-form__alert— блок предупреждений (оранжевый)payment-form__notice— уведомление о согласии с договоромpayment-form__message— сообщение о результате операцииpayment-form__description— описание
- Форма оплаты по карте:
card— контейнер полей ввода картыlogo-cardType— логотип платёжной системы введённой картыpayment-form__input card-num— поле номера картыpayment-form__input card-exp— поле срока действия картыpayment-form__input card-cvv— поле CVV кодаpayment-form__input card-holder— поле имени держателя карты
- Футер формы оплаты по карте:
card__footer— нижний блок карточной формыcard__footer-security— блок информации о безопасностиcard__footer-security-logo— логотип безопасностиcard__footer-security-text— текст о безопасностиcard__footer-cardsystems-logo— логотипы списка платёжных систем
- Дополнительные элементы формы оплаты по карте:
remove-card— контейнер кнопки удаления сохранённой картыremove-card__button— кнопка удаления карты
- Чекбоксы:
checkbox-wrapper— контейнер чекбоксаremember-card— контейнер чекбокса «Запомнить карту»remember-card__checkbox— чекбокс «Запомнить карту»remember-card__label— текстовая метка чекбокса
- Всплывающие подсказки:
hint-wrapper— контейнер подсказкиhint-icon— иконка подсказкиhint-text— текст всплывающей подсказки
- Модальные тултипы:
tooltip-info— информационный тултип в модальном окнеtooltip-info-header— заголовок подсказкиtooltip-info-text— текст подсказкиtooltip-close— кнопка закрытия тултипа
- Дополнительные методы оплаты:
payment-methods— методы оплатыpayment-methods__main-list— список методов оплатыbutton payment-method__item— кнопка выбора метода оплаты
- Футер:
footer— нижний блок формыfooter__main— меню нижнего блока формыfooter__link— ссылка на раздел «Обратная связь»footer__copy— копирайт и логотипfooter__lang— выбор языка
- Загрузка и анимации:
loader-circles— анимация загрузки (три точки)three-body— анимация загрузки (три шара)dot-windmill— анимация загрузки (вращающиеся точки)
- QR-коды для оплаты:
payment-form__qrcode— контейнер QR-кодаpayment-form__qrcode-block— блок с QR-кодомpayment-form__qrcode-img— изображение QR-кода
- Модальные окна:
modal-wrapper— фон модального окнаmodal-window— модальное окноmodal-title— заголовок модального окнаmodal-content— основной контент модального окнаmodal-action— кнопки действий в модальном окнеmodal-closeIcon— иконка закрытия модального окна
3. Как загрузить стили
3.1. Шаги загрузки
- Войдите в Личный кабинет moneta.ru:
- Перейдите в раздел «Мой счёт» → «Управление счетами»
- Выберите «Редактировать стиль Moneta.Assistant»
- Загрузите CSS-стили:
- В поле «CSS стили» вставьте ваш CSS-код
- Нажмите кнопку «Сохранить»
Подсказка: Добавление стилей в виде javascript недоступно.
3.2. Ограничения
- Недоступны
@importи внешние ресурсы (в том числе шрифты) - Отсутствует возможность изменения структуры элементов формы
- Доступно использование только следующих шрифтов:
GolosTextWebRegular— обычный текстGolosTextWebMedium— среднее выделение текстаGolosTextWebDemiBold— полужирный текст для заголовковGolosTextWebBold— жирный текст для важных элементов
4. HTML стартовой страницы платёжной формы
Ниже представлена HTML-структура стартовой страницы платёжной формы. Изучение этой структуры поможет вам лучше понять взаимосвязь элементов и правильно определить классы для кастомизации. Данный HTML-код содержит основные контейнеры и элементы интерфейса. При написании CSS-стилей вы можете использовать классы из этой структуры для точного позиционирования и стилизации нужных элементов.
Карточная форма работает через iframe, поэтому html код разделён на два блока.
Подсказка: Для интерактивной работы с html-кодом — доступен просмотр платёжной формы в разделе “Платёжная форма и виджет” — «Новая платёжная форма» с помощью функционала браузера «Просмотреть код».
HTML-код платёжной формы
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>
<title>Assistant</title>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<meta http-equiv="cache-control" content="no-cache">
<meta name="color-scheme" content="light">
<meta name="supported-color-schemes" content="light">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="static/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="static/img/favicon.svg" sizes="any" type="image/svg+xml">
<link rel="stylesheet" href="static/css/assistant.min.css">
<script src="static/js/assistant.js"></script>
</head>
<body data-test-id="card" id="assistant" style="position: static;">
<div class="modal-wrapper hidden" id="modalWrapper">
<div class="modal-window">
<button type="button" class="tooltip-close">
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<path d="M8.267 8.267C7.911 8.62277 7.911 9.19993 8.267 9.5557L14.7114 15.9999L8.267 22.4441C7.911 22.8001 7.911 23.3772 8.267 23.733C8.62299 24.089 9.20015 24.089 9.5557 23.733L16.0001 17.2886L22.4445 23.733C22.8001 24.089 23.3772 24.089 23.7332 23.733C24.0892 23.3772 24.0892 22.8001 23.7332 22.4441L17.2888 15.9999L23.7332 9.5557C24.0892 9.19993 24.0892 8.62277 23.7332 8.267C23.3772 7.911 22.8001 7.911 22.4445 8.267L16.0001 14.7112L9.5557 8.267C9.20015 7.911 8.62299 7.911 8.267 8.267Z"></path>
</svg>
</button>
<h4 class="tooltip-info-header">Запомним данные карты</h4>
<div class="tooltip-info-text">
<p>При следующей оплате вводить ничего не нужно, деньги спишутся автоматически.</p>
<p>Данные будем хранить в зашифрованном виде. Это надёжно и безопасно.</p>
<p>Отвязать карту и отменить автоматические списания можно у продавца или в службе поддержки PayAnyWay.</p>
</div>
</div>
</div>
<div class="payment-form">
<div id="header" class="payment-form__header payment-header"
data-state="CREATED" data-redirecttarget="_parent">
<div class="payment-header__info">
<div class="merchant">
<div class="merchant-name">Название счёта</div>
</div>
<div class="amount">
<div class="amount__total-wrapper">
<div class="amount__total" id="amountDetailsSwitcher" tabindex="1">
15,00 ₽
<div>
<div class="arrow-bottom">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.35199 8.34427C4.77864 7.92697 5.44629 7.88904 5.91676 8.23046L6.05155 8.34427L12 14.1623L17.9485 8.34427C18.3751 7.92697 19.0428 7.88904 19.5132 8.23046L19.648 8.34427C20.0747 8.76157 20.1135 9.41458 19.7644 9.87473L19.648 10.0066L12.8498 16.6557C12.4231 17.073 11.7555 17.111 11.285 16.7695L11.1502 16.6557L4.35199 10.0066C3.88267 9.54753 3.88267 8.8033 4.35199 8.34427Z" fill="#111111"></path>
</svg>
</div>
</div>
</div>
</div>
<div class="amount__details hidden" id="amountDetailsBlock" style="height: 0px;">
<div class="amount__details-items">
<div class="amount__details-item">
<div class="amount__details-item-name">Получатель</div>
<div class="amount__details-item-value">Название получателя</div>
</div>
<div class="amount__details-item">
<div class="amount__details-item-name">Номер заказа</div>
<div class="amount__details-item-value">base-241125-1734</div>
</div>
</div>
</div>
</div>
</div>
<div class="payment-form__mnt-logo"></div>
</div>
<iframe src="card.html" class="paymentForm" allowfullscreen="" id="cardForm" autofocus=""></iframe>
<div class="iframe_loader" id="ifrLoaderWrapper" style="height: 468px; margin-top: -468px;">
<div class="dot-windmill" id="iFrameLoader"></div>
</div>
<div class="payment-methods">
<div class="payment-methods__main-list" id="pmMainList">
<a class="button payment-method__item" href="/sbp" id="pm_sbp">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--sbp-ru"></div>
</div>
</a>
<a class="button payment-method__item" href="/sber.pay" id="pm_sberpay">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--sberpay"></div>
</div>
</a>
<a class="button payment-method__item" href="/alfa.pay" id="pm_alfapay">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--alfapay"></div>
</div>
</a>
<a class="button payment-method__item" href="/t.pay" id="pm_tpay">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--tpay"></div>
</div>
</a>
</div>
</div>
</div>
<footer id="footer" class="footer">
<div class="footer__main">
<div class="footer__link">
<a href="https://www.payanyway.ru/backoffice/auth/support?lang=ru" target="_blank">Обратная связь</a>
</div>
<div class="footer__copy">
Платёжный сервис
<a href="https://www.payanyway.ru" target="_blank">PayAnyWay</a>
</div>
</div>
<div class="footer__lang">
<a href="?moneta.locale=en" id="langLinkD">English</a>
</div>
</footer>
</body>
</html>HTML-код формы оплаты по карте
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Card Backend</title>
<link rel="stylesheet" href="static/css/cardform.min.css">
<script type="text/javascript" src="static/js/cardform.js"></script>
<script type="text/javascript" src="static/js/threeDSInfo.min.js"></script>
</head>
<body>
<form class="payment-form__content" method="post" action="?">
<div class="payment-form__title">
<div class="payment-form__title-text">По карте</div>
<div class="payment-form__title-logos">
<div class="logo-cardType default" id="cardTypeLogo"></div>
</div>
</div>
<div class="card">
<div class="payment-form__input-wrapper">
<input placeholder="Номер карты" value="" aria-label="cardNumber" autocomplete="cc-number"
class="payment-form__input card-num" id="cardNumber" inputmode="numeric" maxlength="23" name="cardNumber">
</div>
<input placeholder="ММ/ГГ" value="" aria-label="cardExpiration" autocomplete="cc-exp"
class="payment-form__input card-exp" id="cardExpiration" inputmode="numeric" maxlength="7" name="cardExpiration">
<input placeholder="Код" aria-label="cardCVV2" autocomplete="cc-csc" class="payment-form__input card-cvv"
id="cardCVV2" inputmode="numeric" maxlength="3" name="cardCVV2" type="password">
<input placeholder="Владелец карты" value="" aria-label="cardHolder" autocomplete="cc-name"
class="payment-form__input card-holder" id="cardHolder" inputmode="text" name="cardHolder" type="text">
<div class="error-comment">Напишите имя как на карте, например: IVAN IVANOV</div>
<div class="remember-card">
<label class="remember-card__label">
<input id="rememberCard" name="rememberCard" type="checkbox">
<span class="remember-card__checkbox">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12">
<path id="checkbox-icon" fill-rule="evenodd" clip-rule="evenodd"
d="m4.2 8.3l6-6.3 0.8 0.8-6.8 7.2-3.2-3.3 0.8-0.9z" fill="currentColor"></path>
</svg>
</span>
<span>Запомнить карту</span>
</label>
</div>
</div>
<button class="button-primary" type="submit" name="_do_pay">
<span class="button-text">Оплатить</span>
<span id="loader-container" class="loader-circles__wrapper">
<span class="loader-circles loader-circles--center">
<span class="loader-circles__circle loader-circles__circle--left"></span>
<span class="loader-circles__circle loader-circles__circle--middle"></span>
<span class="loader-circles__circle loader-circles__circle--right"></span>
</span>
</span>
</button>
<div class="payment-form__notice">
При оплате вы соглашаетесь с <a href="https://www.moneta.ru/info/public/users/nko/cardsserviceoffer.pdf" class="link--gray" target="_blank">Договором</a>
</div>
<div class="card__footer">
<div class="card__footer-security">
<div class="card__footer-security-logo"></div>
<div class="card__footer-security-text">Безопасная оплата</div>
</div>
<div class="card__footer-cardsystems">
<div class="card__footer-cardsystems-logo"></div>
</div>
</div>
</form>
</body>
</html>Подразделы Настройка стилей
Настройка стилей (лёгкая кастомизация)
1. Общая информация
Для платёжной формы доступна персонализация стилей, позволяющая адаптировать внешний вид. Вы можете изменить цветовую схему, шрифты, отступы и другие визуальные элементы без изменения функциональности и структуры.
Ознакомиться с платёжной формой можно в разделе “Платёжная форма и виджет” — «Новая платёжная форма».
Все загружаемые стили проходят автоматическую проверку на соответствие требованиям безопасности. Некоторые CSS-свойства будут удалены системой для защиты пользовательских данных и поддержания функциональности платёжной формы.
2. Основные элементы формы для кастомизации
- Хедер формы:
payment-header__info— контейнер заголовка платёжной формыmerchant— блок данных магазинаmerchant-name— название магазинаamount— блок с суммой платежаamount__total-wrapper— обёртка для суммы и деталейamount__total— сумма платежаarrow-bottom— стрелка для раскрытия деталейamount__details— детали платежаamount__details-item— элементы деталей платежа (получатель, номер заказа, описание)payment-form__mnt-logo— логотип магазина
- Кнопки:
button-primary— основная кнопка оплатыbutton-secondary— второстепенные кнопкиpayment-form__navigation— навигация по форме
- Поля ввода:
input— базовые поля вводаinput-wrapper— обёртка для полей вводаselect— выпадающие спискиselect-wrapper— обёртка для выпадающих списковselect-arrow— стрелка выпадающего спискаoption— стили для опций в выпадающем списке
- Основной контент:
payment-form__content— основной контейнер контента формыpayment-form__title— заголовок блока оплатыpayment-form__comment— дополнительная информация блока оплатыpayment-form__error— блок ошибок (красный)payment-form__alert— блок предупреждений (оранжевый)payment-form__notice— уведомление о согласии с договоромpayment-form__message— сообщение о результате операцииpayment-form__description— описание
- Форма оплаты по карте:
card— контейнер полей ввода картыlogo-cardType— логотип платёжной системы введённой картыpayment-form__input card-num— поле номера картыpayment-form__input card-exp— поле срока действия картыpayment-form__input card-cvv— поле CVV кодаpayment-form__input card-holder— поле имени держателя карты
- Футер формы оплаты по карте:
card__footer— нижний блок карточной формыcard__footer-security— блок информации о безопасностиcard__footer-security-logo— логотип безопасностиcard__footer-security-text— текст о безопасностиcard__footer-cardsystems-logo— логотипы списка платёжных систем
- Дополнительные элементы формы оплаты по карте:
remove-card— контейнер кнопки удаления сохранённой картыremove-card__button— кнопка удаления карты
- Чекбоксы:
checkbox-wrapper— контейнер чекбоксаremember-card— контейнер чекбокса «Запомнить карту»remember-card__checkbox— чекбокс «Запомнить карту»remember-card__label— текстовая метка чекбокса
- Всплывающие подсказки:
hint-wrapper— контейнер подсказкиhint-icon— иконка подсказкиhint-text— текст всплывающей подсказки
- Модальные тултипы:
tooltip-info— информационный тултип в модальном окнеtooltip-info-header— заголовок подсказкиtooltip-info-text— текст подсказкиtooltip-close— кнопка закрытия тултипа
- Дополнительные методы оплаты:
payment-methods— методы оплатыpayment-methods__main-list— список методов оплатыbutton payment-method__item— кнопка выбора метода оплаты
- Футер:
footer— нижний блок формыfooter__main— меню нижнего блока формыfooter__link— ссылка на раздел «Обратная связь»footer__copy— копирайт и логотипfooter__lang— выбор языка
- Загрузка и анимации:
loader-circles— анимация загрузки (три точки)three-body— анимация загрузки (три шара)dot-windmill— анимация загрузки (вращающиеся точки)
- QR-коды для оплаты:
payment-form__qrcode— контейнер QR-кодаpayment-form__qrcode-block— блок с QR-кодомpayment-form__qrcode-img— изображение QR-кода
- Модальные окна:
modal-wrapper— фон модального окнаmodal-window— модальное окноmodal-title— заголовок модального окнаmodal-content— основной контент модального окнаmodal-action— кнопки действий в модальном окнеmodal-closeIcon— иконка закрытия модального окна
3. Как загрузить стили
3.1. Шаги загрузки
- Войдите в Личный кабинет moneta.ru:
- Перейдите в раздел «Мой счёт» → «Управление счетами»
- Выберите «Редактировать стиль Moneta.Assistant»
- Загрузите CSS-стили:
- В поле «CSS стили» вставьте ваш CSS-код
- Нажмите кнопку «Сохранить»
Подсказка: Добавление стилей в виде javascript недоступно.
3.2. Ограничения
- Недоступны
@importи внешние ресурсы (в том числе шрифты) - Отсутствует возможность изменения структуры элементов формы
- Доступно использование только следующих шрифтов:
GolosTextWebRegular— обычный текстGolosTextWebMedium— среднее выделение текстаGolosTextWebDemiBold— полужирный текст для заголовковGolosTextWebBold— жирный текст для важных элементов
4. HTML стартовой страницы платёжной формы
Ниже представлена HTML-структура стартовой страницы платёжной формы. Изучение этой структуры поможет вам лучше понять взаимосвязь элементов и правильно определить классы для кастомизации. Данный HTML-код содержит основные контейнеры и элементы интерфейса. При написании CSS-стилей вы можете использовать классы из этой структуры для точного позиционирования и стилизации нужных элементов.
Карточная форма работает через iframe, поэтому html код разделён на два блока.
Подсказка: Для интерактивной работы с html-кодом — доступен просмотр платёжной формы в разделе “Платёжная форма и виджет” — «Новая платёжная форма» с помощью функционала браузера «Просмотреть код».
HTML-код платёжной формы
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>
<title>Assistant</title>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<meta http-equiv="cache-control" content="no-cache">
<meta name="color-scheme" content="light">
<meta name="supported-color-schemes" content="light">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="static/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="static/img/favicon.svg" sizes="any" type="image/svg+xml">
<link rel="stylesheet" href="static/css/assistant.min.css">
<script src="static/js/assistant.js"></script>
</head>
<body data-test-id="card" id="assistant" style="position: static;">
<div class="modal-wrapper hidden" id="modalWrapper">
<div class="modal-window">
<button type="button" class="tooltip-close">
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<path d="M8.267 8.267C7.911 8.62277 7.911 9.19993 8.267 9.5557L14.7114 15.9999L8.267 22.4441C7.911 22.8001 7.911 23.3772 8.267 23.733C8.62299 24.089 9.20015 24.089 9.5557 23.733L16.0001 17.2886L22.4445 23.733C22.8001 24.089 23.3772 24.089 23.7332 23.733C24.0892 23.3772 24.0892 22.8001 23.7332 22.4441L17.2888 15.9999L23.7332 9.5557C24.0892 9.19993 24.0892 8.62277 23.7332 8.267C23.3772 7.911 22.8001 7.911 22.4445 8.267L16.0001 14.7112L9.5557 8.267C9.20015 7.911 8.62299 7.911 8.267 8.267Z"></path>
</svg>
</button>
<h4 class="tooltip-info-header">Запомним данные карты</h4>
<div class="tooltip-info-text">
<p>При следующей оплате вводить ничего не нужно, деньги спишутся автоматически.</p>
<p>Данные будем хранить в зашифрованном виде. Это надёжно и безопасно.</p>
<p>Отвязать карту и отменить автоматические списания можно у продавца или в службе поддержки PayAnyWay.</p>
</div>
</div>
</div>
<div class="payment-form">
<div id="header" class="payment-form__header payment-header"
data-state="CREATED" data-redirecttarget="_parent">
<div class="payment-header__info">
<div class="merchant">
<div class="merchant-name">Название счёта</div>
</div>
<div class="amount">
<div class="amount__total-wrapper">
<div class="amount__total" id="amountDetailsSwitcher" tabindex="1">
15,00 ₽
<div>
<div class="arrow-bottom">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.35199 8.34427C4.77864 7.92697 5.44629 7.88904 5.91676 8.23046L6.05155 8.34427L12 14.1623L17.9485 8.34427C18.3751 7.92697 19.0428 7.88904 19.5132 8.23046L19.648 8.34427C20.0747 8.76157 20.1135 9.41458 19.7644 9.87473L19.648 10.0066L12.8498 16.6557C12.4231 17.073 11.7555 17.111 11.285 16.7695L11.1502 16.6557L4.35199 10.0066C3.88267 9.54753 3.88267 8.8033 4.35199 8.34427Z" fill="#111111"></path>
</svg>
</div>
</div>
</div>
</div>
<div class="amount__details hidden" id="amountDetailsBlock" style="height: 0px;">
<div class="amount__details-items">
<div class="amount__details-item">
<div class="amount__details-item-name">Получатель</div>
<div class="amount__details-item-value">Название получателя</div>
</div>
<div class="amount__details-item">
<div class="amount__details-item-name">Номер заказа</div>
<div class="amount__details-item-value">base-241125-1734</div>
</div>
</div>
</div>
</div>
</div>
<div class="payment-form__mnt-logo"></div>
</div>
<iframe src="card.html" class="paymentForm" allowfullscreen="" id="cardForm" autofocus=""></iframe>
<div class="iframe_loader" id="ifrLoaderWrapper" style="height: 468px; margin-top: -468px;">
<div class="dot-windmill" id="iFrameLoader"></div>
</div>
<div class="payment-methods">
<div class="payment-methods__main-list" id="pmMainList">
<a class="button payment-method__item" href="/sbp" id="pm_sbp">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--sbp-ru"></div>
</div>
</a>
<a class="button payment-method__item" href="/sber.pay" id="pm_sberpay">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--sberpay"></div>
</div>
</a>
<a class="button payment-method__item" href="/alfa.pay" id="pm_alfapay">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--alfapay"></div>
</div>
</a>
<a class="button payment-method__item" href="/t.pay" id="pm_tpay">
<div class="payment-method__item-info">
<div class="payment-method__item-logo payment-method__item-logo--tpay"></div>
</div>
</a>
</div>
</div>
</div>
<footer id="footer" class="footer">
<div class="footer__main">
<div class="footer__link">
<a href="https://www.payanyway.ru/backoffice/auth/support?lang=ru" target="_blank">Обратная связь</a>
</div>
<div class="footer__copy">
Платёжный сервис
<a href="https://www.payanyway.ru" target="_blank">PayAnyWay</a>
</div>
</div>
<div class="footer__lang">
<a href="?moneta.locale=en" id="langLinkD">English</a>
</div>
</footer>
</body>
</html>HTML-код формы оплаты по карте
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Card Backend</title>
<link rel="stylesheet" href="static/css/cardform.min.css">
<script type="text/javascript" src="static/js/cardform.js"></script>
<script type="text/javascript" src="static/js/threeDSInfo.min.js"></script>
</head>
<body>
<form class="payment-form__content" method="post" action="?">
<div class="payment-form__title">
<div class="payment-form__title-text">По карте</div>
<div class="payment-form__title-logos">
<div class="logo-cardType default" id="cardTypeLogo"></div>
</div>
</div>
<div class="card">
<div class="payment-form__input-wrapper">
<input placeholder="Номер карты" value="" aria-label="cardNumber" autocomplete="cc-number"
class="payment-form__input card-num" id="cardNumber" inputmode="numeric" maxlength="23" name="cardNumber">
</div>
<input placeholder="ММ/ГГ" value="" aria-label="cardExpiration" autocomplete="cc-exp"
class="payment-form__input card-exp" id="cardExpiration" inputmode="numeric" maxlength="7" name="cardExpiration">
<input placeholder="Код" aria-label="cardCVV2" autocomplete="cc-csc" class="payment-form__input card-cvv"
id="cardCVV2" inputmode="numeric" maxlength="3" name="cardCVV2" type="password">
<input placeholder="Владелец карты" value="" aria-label="cardHolder" autocomplete="cc-name"
class="payment-form__input card-holder" id="cardHolder" inputmode="text" name="cardHolder" type="text">
<div class="error-comment">Напишите имя как на карте, например: IVAN IVANOV</div>
<div class="remember-card">
<label class="remember-card__label">
<input id="rememberCard" name="rememberCard" type="checkbox">
<span class="remember-card__checkbox">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12">
<path id="checkbox-icon" fill-rule="evenodd" clip-rule="evenodd"
d="m4.2 8.3l6-6.3 0.8 0.8-6.8 7.2-3.2-3.3 0.8-0.9z" fill="currentColor"></path>
</svg>
</span>
<span>Запомнить карту</span>
</label>
</div>
</div>
<button class="button-primary" type="submit" name="_do_pay">
<span class="button-text">Оплатить</span>
<span id="loader-container" class="loader-circles__wrapper">
<span class="loader-circles loader-circles--center">
<span class="loader-circles__circle loader-circles__circle--left"></span>
<span class="loader-circles__circle loader-circles__circle--middle"></span>
<span class="loader-circles__circle loader-circles__circle--right"></span>
</span>
</span>
</button>
<div class="payment-form__notice">
При оплате вы соглашаетесь с <a href="https://www.moneta.ru/info/public/users/nko/cardsserviceoffer.pdf" class="link--gray" target="_blank">Договором</a>
</div>
<div class="card__footer">
<div class="card__footer-security">
<div class="card__footer-security-logo"></div>
<div class="card__footer-security-text">Безопасная оплата</div>
</div>
<div class="card__footer-cardsystems">
<div class="card__footer-cardsystems-logo"></div>
</div>
</div>
</form>
</body>
</html>Расширенная настройка интерфейса
1. Общая информация
Для платёжной формы доступна опция расширенной кастомизации. В отличие от базовой настройки стилей, эта возможность позволяет полностью разработать собственный интерфейс для всех или отдельных этапов оплаты с сохранением базовой функциональности и безопасности платёжной системы.
Чтобы получить исходный HTML-файл, выгрузите его из интерфейса платёжной формы в браузере.
Ознакомиться с платёжной формой можно в разделе “Платёжная форма и виджет” — «Новая платёжная форма».
2. Файлы кастомизации и ограничения
Для изменения доступны:
- HTML-файлы: с семантически правильной структурой, включая все необходимые секции (
<!DOCTYPE html>,<html>,<head>,<body>) и полный контент страницы. Файлы должны быть самодостаточными и содержать всю разметку, а не только изменяемые части. - CSS-файлы: должны содержать полное описание стилей для всех элементов интерфейса, а не только переопределения отдельных правил. Рекомендуем добавлять свои стили в css-файл формы.
- Шрифты: форматы
woff2иwoff. - Изображения и иконки: форматы SVG (рекомендуется для иконок), PNG, JPEG (JPG).
Ограничения:
- Добавление JavaScript недоступно.
- Для кнопок методов оплаты недоступно изменение наименований и иконок.
Ориентировочная структура предоставляемых файлов:
html-файл— платёжная форма и форма ввода данных картыcss-файл— стили для платёжной формы и формы ввода данных карты (name.css)fonts/— папка с файлами шрифтовimg/— папка с файлами изображений и иконок
3. Процесс передачи и пример архива
Подготовленные файлы кастомизации передайте вашему менеджеру.
При получении файлов мы проведём техническое ревью и предоставим обратную связь по результатам.
Пример структуры архива:
В приложенном архиве представлена папка js с файлом script.js для ознакомления и просмотра работы формы. Его редактирование и добавление новых скриптов недоступны.
4. Работа с postMessage
Если платёжная форма встроена на страницу магазина через iframe, родительская страница и iframe могут обмениваться сообщениями через механизм postMessage.
Механизм используется для:
- автоматического изменения размеров
iframeпод размер виджета; - передачи CSS-класса для кастомизации виджета при подключённой расширенной настройке интерфейса и переданных стилях (см. разд. 1–3).
Обмен сообщениями происходит между родительской страницей магазина и iframe с платёжной формой. Для приёма сообщений на стороне магазина зарегистрируйте обработчик события message.
Поддерживаемые сообщения:
- от платёжной формы → на страницу магазина:
widgetSize— актуальные размеры виджета; - от страницы магазина → платёжную форму:
bodyClass— CSS-класс для кастомизации виджета.
Минимальный сценарий подключения:
- Встроить платёжную форму в страницу через
iframe. - Зарегистрировать обработчик
window.addEventListener('message', ...). - Обрабатывать сообщение
widgetSizeи менять размерыiframe. - При необходимости отправлять сообщение
bodyClassдля кастомизации виджета.
4.1. Получение размеров виджета (widgetSize)
Платёжная форма отправляет сообщение widgetSize, когда размер виджета изменяется. Это позволяет автоматически изменять размеры iframe на стороне магазина.
Формат сообщения:
{
"m_type": "widgetSize",
"width": 300,
"height": 64
}Где m_type — тип сообщения; width и height — ширина и высота виджета в пикселях. Рекомендуемый формат — число. Если виджет передаёт размеры строками, на стороне магазина их нужно привести к числу (см. пример ниже).
После получения сообщения необходимо:
- Убедиться, что сообщение пришло с соответствующим типом и структурой.
- Обновить размеры
iframe.
Пример кода для родительского окна:
// ID iframe-элемента, в котором размещается форма
const ASSISTANT_WIDGET_ID = 'assistantWidget'
/**
* Проверка, является ли сообщение валидным
* @param {unknown} msg - Проверяемый объект
* @returns {msg is { m_type: string } & Record<string, unknown>}
*/
function isValidMessage(msg) {
return typeof msg?.m_type === 'string';
}
/**
* Получает элемент виджета по ID
* @returns {HTMLIFrameElement | null}
*/
function getAssistantWidget() {
const widget = document.getElementById(ASSISTANT_WIDGET_ID);
if (!widget) {
console.warn(`Элемент с id "${ASSISTANT_WIDGET_ID}" не найден`);
}
return widget;
}
/**
* Обработчик сообщений от виджета
* @param {MessageEvent} event - Событие сообщения от window
* @returns {void}
*/
function listener(event) {
let msg;
try {
msg = JSON.parse(event.data);
} catch (e) {
return; // Невалидный JSON - игнорируем
}
if (!isValidMessage(msg)) {
return; // Неверная структура сообщения - игнорируем
}
switch (msg.m_type) {
case "widgetSize": {
const width = Number(msg.width);
const height = Number(msg.height);
if (!Number.isFinite(width) || !Number.isFinite(height)) {
console.warn('Неверный формат сообщения widgetSize:', msg);
return;
}
const assistantWidget = getAssistantWidget();
if (!assistantWidget) return;
assistantWidget.style.height = `${height}px`;
assistantWidget.style.width = `${width}px`;
break;
}
default:
console.debug(`Получено неизвестное сообщение: ${msg.m_type}`);
break;
}
}
// Подписка на сообщения
if (window.addEventListener) {
window.addEventListener("message", listener, false);
} else {
window.attachEvent("onmessage", listener);
}Пример сообщения от платёжной формы:
{"m_type":"widgetSize","width":360,"height":740}4.2. Передача CSS-класса (bodyClass)
Родительская страница может передать в платёжную форму CSS-класс для дополнительной кастомизации виджета. Функция доступна, если подключена расширенная настройка интерфейса и переданы стили (см. разд. 1–3).
Формат сообщения:
{
"m_type": "bodyClass",
"m_val": "class_name"
}Где m_type — тип сообщения; m_val — имя CSS-класса.
Особенности обработки на стороне платёжной формы:
- Из значения
m_valудаляются все недопустимые символы. Доступны только буквы, цифры, дефис-и нижнее подчёркивание_. - Платёжная форма устанавливает CSS-класс для
bodyвиджета и применяет стили для этого класса (переданные в рамках расширенной настройки интерфейса). Если по значениюm_valстили не найдены — отображается стандартный интерфейс платёжной формы. - Отдельный ответ на сообщение
bodyClassне отправляется.
Пример отправки класса (предполагается, что объявлена функция getAssistantWidget() из примера выше):
/**
* Отправляет сообщение в виджет для установки CSS-класса для элемента body
* @param {string} bodyClass - Название CSS-класса
*/
function setBodyClass(bodyClass) {
if (!bodyClass || typeof bodyClass !== 'string') {
console.warn('bodyClass должен быть непустой строкой');
return;
}
const assistantWidget = getAssistantWidget();
if (!assistantWidget) return;
const data = {
m_type: 'bodyClass',
m_val: bodyClass
};
assistantWidget.contentWindow?.postMessage(data, "*");
}Пример вызова:
setBodyClass('custom-theme-dark');Общее описание
Документ описывает прикладной программный интерфейс MONETA.Assistant для приёма оплаты товаров и услуг. Материал рассчитан на разработчиков с базовыми знаниями HTML и принципов работы протокола HTTP, подключающих оплату через систему «MONETA.RU».
Интерфейс MONETA.Assistant предоставляет прикладной программный интерфейс для оплаты товаров и услуг при помощи различных платежных систем. Таким образом, online-магазин реализует поддержку только интерфейса MONETA.Assistant, в то время как покупатели могут производить оплату с любой электронной платежной системы, которую поддерживает «MONETA.RU».
При помощи интерфейса MONETA.Assistant можно связать свою внутреннюю систему приема, хранения и обработки заказов с системой «MONETA.RU». На основании сформированного заказа, магазин будет создавать запрос на оплату к системе «MONETA.RU» и принимать отчет о проведенной оплате с сохранением своих внутренних параметров (например, номер заказа в системе или дополнительные информационные поля).
Для подключения интерфейса на сайте необходимо создать форму специального вида с реквизитами оплаты, а также создать обработчик, который будет принимать уведомления с отчетом о проведенной операции.
Описание процесса оплаты
Оплата без открытия счета в «MONETA.RU»:
- Пользователь выбирает товар.
- Магазин формирует заказ, при необходимости регистрирует в своей системе реквизиты заказа.
- На странице интерфейса MONETA.Assistant Пользователь выбирает способ оплаты.
- Система «MONETA.RU» подготавливает форму оплаты.
- Пользователь подтверждает оплату выбранным способом.
- Внешняя платежная система уведомляет систему «MONETA.RU» об оплате.
- Система «MONETA.RU» отправляет магазину отчет о проведенной операции.
- Система «MONETA.RU» сообщает о результате оплаты и предлагает Пользователю вернуться на сайт магазина.
Диаграмма процедуры оплаты товара без открытия Пользователем счета в системе «MONETA.RU» с использованием интерфейса MONETA.Assistant:
С чего начать
Demo-площадка
Для того, чтобы попробовать, как работает MONETA.Assistant, можно создать личный кабинет на demo площадке.
Вы можете использовать demo площадку Moneta.Ru https://demo.moneta.ru, чтобы протестировать работу MONETA.Assistant.
Примечание: Номера счетов (MNT_ID) на demo площадке и рабочей платформе будут различаться!
Регистрация на demo площадке
Для того, чтобы начать работу на demo площадке Вам следует создать два личных кабинета: личный кабинет магазина, который может принимать платежи и личный кабинет пользователя, который может платить в магазин. Для каждого личного кабинета используйте разные e-mail адреса.
- Создайте личный кабинет магазина на demo площадке. Для этого перейдите по ссылке: https://demo.moneta.ru/backoffice/auth/register
- Создайте личный кабинет пользователя на demo площадке. Для этого перейдите по ссылке: https://demo.moneta.ru/locale.htm?moneta.locale=ru&redirect=/register.htm
- Свяжитесь со службой поддержки PayAnyWay (business@support.payanyway.ru), чтобы завершить регистрацию личного кабинета магазина, а также получить виртуальные деньги в личном кабинете пользователя.
Примечание: При обращении в службу поддержки укажите e-mail или телефон, которые Вы использовали при регистрации.
- После того как служба поддержки подтвердит регистрацию, создайте “расширенный” счет в личном кабинете магазина. Для этого выполните следующие шаги:
- Откройте https://demo.moneta.ru и зайдите в личный кабинет магазина.
- Перейдите
Мой счет > Управление счетами. - В разделе
Расширенные счета, нажмитеДобавить счет. - Заполните форму и нажмите
Сохранить.
Настройки счёта магазина
В разделе управления счетами (блок Счета в левой части обзорной страницы, ссылка Мой счет > Управление счетами) уполномоченные представители магазина могут настроить параметры взаимодействия учетной системы магазина и системы «МОНЕТА.РУ».
- Тестовый режим
- Признак тестового режима, в котором движения средств по операции не происходит, но обеспечивается информационный обмен.
Примечание: Запросы также выполняются в тестовом режиме, если в запросе на оплату передан параметр
MNT_TEST_MODE=1(см. раздел Запрос на оплату). - Список платежных систем
- Список (разделенный запятыми) идентификаторов платежных систем, которые необходимо показывать пользователю в MONETA.Assistant. Например, card,sbpc2b - пользователю в MONETA.Assistant будут показаны только оплата банковской картой и СБП. Если список пустой, то будут показаны все доступные системы. Также это значение можно передать в запросе с помощью параметра paymentSystem.limitIds.
- Платежная система по умолчанию
- Указывается идентификатор платежной системы по умолчанию. Например, card – банковская карта, sbpc2b – СБП, sberpay – SberPay и т.д. Список доступных способов оплаты для заданного счёта можно посмотреть на странице «Рабочий кабинет / Способы оплаты». Также это значение можно передать в запросе с помощью параметра
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 в указанную ссылку, чтобы магазин смог определить внутренний идентификатор заказа.
- InProgress URL
- URL страницы магазина, куда должен попасть покупатель после успешного запроса на авторизацию средств, до подтверждения списания и зачисления средств. Поддерживается ограниченным количеством методов оплаты. Переход пользователя произойдет независимо от получения магазином средств и отчета о проведенной оплате.
Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID в указанную ссылку, чтобы магазин смог определить внутренний идентификатор заказа.
- Return URL
- URL страницы магазина, куда должен вернуться покупатель при добровольном отказе от оплаты. Отчет об оплате в этом случае магазину не отсылается.
Примечание: MONETA.Assistant добавляет параметр MNT_TRANSACTION_ID в указанную ссылку, чтобы магазин смог определить внутренний идентификатор заказа.
Запрос на оплату через MONETA.Assistant
Запрос на оплату через интерфейс MONETA.Assistant представляет собой HTML-форму. Форма должна быть подготовлена магазином, передана пользователю, подтверждена пользователем и отправлена на адрес https://www.payanyway.ru/assistant.htm для обработки системой «MONETA.RU». Для тестирования можно использовать demo-площадку: https://demo.moneta.ru/assistant.htm.
Если планируется работа через iframe, используйте https://www.payanyway.ru/assistant.widget (на demo: https://demo.moneta.ru/assistant.widget).
Примечание: Альтернативно для продакшена часто используется https://moneta.ru/assistant.htm и https://moneta.ru/assistant.widget — поведение соответствует указанным выше адресам на домене PayAnyWay.
Новую форму достаточно поместить внутрь iframe — она адаптируется к размерам1.
Параметры запроса на оплату
Обязательные параметры
- MNT_ID
- Идентификатор магазина в системе MONETA.RU. Соответствует номеру расширенного счёта магазина.
Примечание: Номера счетов (MNT_ID) на demo-площадке и рабочей платформе различаются.
- MNT_AMOUNT
- Сумма оплаты. Десятичные символы отделяются точкой; не более двух знаков после запятой. Значение носит рекомендательный характер и технически может быть изменено пользователем. Необязательный параметр, если в настройках счёта указан Check URL. Если параметр не задан, сумма будет запрошена в учётной системе магазина соответствующим проверочным запросом.
Необязательные параметры
- MNT_TRANSACTION_ID
- Внутренний идентификатор заказа в магазине (до 255 символов). Если магазин не укажет параметр, MONETA.Assistant сгенерирует 20-значный идентификатор, например
52972360059455248073.
Подсказка: В личном кабинете Moneta.RU этот параметр также может называться CTID, «Внешний ID» или «Внешний идентификатор».
- MNT_CURRENCY_CODE
- ISO-код валюты оплаты заказа. Должен соответствовать коду валюты счёта получателя (MNT_ID). Возможные значения:
RUB,USD,EUR. - MNT_TEST_MODE
- Указание тестового режима запроса:
0— рабочий режим;1— тестовый режим без реального списания и зачисления. Значение по умолчанию:0.
Примечание: Запросы также выполняются в тестовом режиме, если включён флаг «Тестовый режим» в настройках счёта.
- MNT_DESCRIPTION
- Описание оплаты (не более 500 символов).
- MNT_SUBSCRIBER_ID
- Внутренний идентификатор пользователя в учётной системе магазина.
- MNT_SIGNATURE
- Код идентификации отправителя и проверки целостности данных. Если параметр передан, MONETA.RU сформирует собственный код по параметрам запроса и сравнит его с
MNT_SIGNATURE; при несовпадении MONETA.Assistant завершится с ошибкой. Обязателен, если в настройках счёта включена «Подпись формы оплаты обязательна».
Примечание: Если в запросе на оплату не передаётся MNT_TRANSACTION_ID, параметр MNT_SIGNATURE передавать не следует — такие запросы будут неверны.
- MNT_CUSTOM1, MNT_CUSTOM2, MNT_CUSTOM3
- Произвольные поля; возвращаются магазину в параметрах отчёта о проведённой оплате.
- MNT_SUCCESS_URL
- URL страницы после успешных действий. Используется только при включённом флаге «Можно переопределять настройки в URL». Если флаг не выставлен или параметр не задан — берётся Success URL из настроек счёта. Если не передать
MNT_SUCCESS_URLи не задать поле в настройках, но флаг переопределения включён, по умолчанию используется https://www.moneta.ru/paymentSuccess.htm. К ссылке MONETA.Assistant добавляетMNT_TRANSACTION_ID. - MNT_INPROGRESS_URL
- URL после успешной авторизации средств до подтверждения списания (поддерживается не всеми методами оплаты). Логика переопределения такая же, как у
MNT_SUCCESS_URL; при отсутствии значений и включённом флаге используется настройка счёта. К ссылке добавляетсяMNT_TRANSACTION_ID. - MNT_FAIL_URL
- URL после отменённой или неуспешной оплаты; отчёт магазину не отсылается. Логика переопределения аналогична; если URL не задан при включённом флаге, по умолчанию используется https://www.moneta.ru/paymentFail.htm. К ссылке добавляется
MNT_TRANSACTION_ID. - MNT_RETURN_URL
- URL при добровольном отказе от оплаты; отчёт не отсылается. Переопределение — как у других URL. К ссылке добавляется
MNT_TRANSACTION_ID. - moneta.locale
- Язык интерфейса:
ru— русский,en— английский. - paymentSystem.unitId
- Предварительный выбор платежной системы (например, card — банковские карты, sbpc2b — СБП, sberpay — SberPay). Список на странице https://www.moneta.ru/viewPaymentMethods.htm.
- paymentSystem.limitIds
- Список идентификаторов платёжных систем через запятую, которые нужно показать пользователю (например,
card,sbpc2b,sberpay). - paymentDetails
- Состояние блока деталей платежа в интерфейсе MONETA.Assistant:
true— детали развёрнуты,false— свёрнуты. Если параметр не передан, считаетсяfalse. - showAdditionalPaymentMethods
- Внутри способов оплаты СБП, SberPay, T-Pay и аналогичных при значении
trueотображаются кнопки всех доступных методов оплаты. Если параметр не передан или передан какfalse, эти кнопки не показываются.
Формирование подписи в запросе на оплату
Конкатенация значений и кода проверки целостности данных, затем MD5 (RFC 1321) и представление байт как шестнадцатеричной строки:
MNT_SIGNATURE = MD5(
MNT_ID + MNT_TRANSACTION_ID + MNT_AMOUNT + MNT_CURRENCY_CODE
+ MNT_SUBSCRIBER_ID + ТЕСТОВЫЙ_РЕЖИМ + КОД_ПРОВЕРКИ_ЦЕЛОСТНОСТИ_ДАННЫХ)где ТЕСТОВЫЙ_РЕЖИМ — 1, если запрос в тестовом режиме, иначе 0.
MNT_AMOUNTв подписи — всегда с двумя десятичными знаками (1.23,123.00).- Если
MNT_SUBSCRIBER_IDотсутствует, в подписи используется пустая строка (неnull, не0, не пробел).
Примеры запросов на оплату
Пример 1
Минимальная форма (при корректных настройках счёта): заказ FF790ABCD, счёт 00000001, сумма 120.25 RUB.
<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
С дополнительными параметрами и тестовым режимом:
<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
Интерфейс на английском, платёжная система по умолчанию — СБП:
<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="sbpc2b">
<input type="submit" value="Pay order">
</form>Пример 4
С подписью MNT_SIGNATURE (обычный режим), счёт 54600817:
<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>Подпись: строка для MD5 (значения подряд, без разделителей) — 54600817FF790ABCD120.25RUB0 + код проверки QWERTY:
54600817FF790ABCD120.25RUB0QWERTYДля тестового режима в подписи перед кодом проверки используется 1 вместо 0.
Минимальная ширина iframe — 320px, рекомендуемая — 488px. Полезная высота зависит от числа способов оплаты: чем их больше, тем выше должен быть iframe, чтобы не требовалась прокрутка. ↩︎
Уведомление о проведенной оплате (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 — код проверки целостности данных.
Проверочные запросы (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 сохраняются в операции.
Получение данных от поставщика
Для поставщиков, предоставляющих при оплате расширенную информацию в интерактивном режиме, возможна отправка дополнительных проверочных запросов после каждого шага по вводу параметров.
Проверочные запросы служат для того, чтобы:
- Получить от поставщика данные, которые зависят от уже введённых данных (например, по лицевому счёту вернуть адрес и показания счётчиков).
- Указать сумму заказа, если сумма зависит от введённых параметров.
Основные принципы взаимодействия
Запросы на получение данных 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>Дополнительные коды ошибок, отображаемые пользователю
- 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
Виджет https://www.payanyway.ru/assistant.widget — это форма оплаты, у которой визуальное представление организовано так, чтобы посетитель интернет-магазина мог ввести платёжные данные прямо в корзине.
Примечание: Также доступен адрес https://moneta.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 (в примере задан предвыбор способа оплаты paymentSystem.unitId=card):
<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 необходимые для данного конкретного случая (на счете в таком случае должна стоять галочка - “Можно переопределять параметры в запросе”).
Содержимое iframe можно стилизовать индивидуально. Примеры виджета с CSS: https://payanyway.ru/info/w/ru/public/w/partnership/developers/widget-css.html; дополнительные примеры — https://docs.moneta.ru/customization/.
Для установки стилей на расширенном счёте необходимо прислать CSS-код на review в техническую поддержку.
Примеры использования: https://payanyway.ru/info/w/ru/public/w/partnership/demo/var2.html
Настройка виджета
Добавление платёжной формы на сайт магазина
Примечание: Если вы уже используете интерфейс MONETA.Assistant, то подключение новой платёжной формы займёт совсем немного времени, если нет – изучите https://docs.moneta.ru/assistant/v1/overview/, чтобы реализовать обработчики Check и Pay URL.
Подключим скрипт
После того, как ваш магазин готов обрабатывать запросы от нашей системы, добавьте следующий скрипт на страницу, где будете принимать платежи от клиентов:
<script type="text/javascript" src="https://payanyway.ru/assistant-builder"></script>Примечание: Исходники скрипта: https://github.com/PayAnyWay/assistant.
Определим параметры платежа
Теперь на этой же странице нужно подготовить параметры для платёжной формы:
<script type="text/javascript">
let options = {
account: 32691195,
amount: 12.34,
transactionId: '1234567890-abcdef'
};
// ...
</script>В этом примере параметров всего три, но может быть и больше – вот они все:
- account
- Номер вашего бизнес-счёта.
- amount
- Сумма платежа.
- transactionId
- Номер заказа в магазине.
- operationId
- ID операции в Монете.
- description
- Описание заказа.
- signature
- Подпись запроса.
- subscriberId
- ID клиента в магазине.
- testMode
- Признак тестового платежа.
Значения:
0– платёж настоящий (по умолчанию)1– платёж тестовый
- amount
- Язык интерфейса. Значения:
ru– русский (по умолчанию)en– английский
- theme
- Цветовая тема интерфейса. Значения:
light– светлая (по умолчанию)dark– тёмная
- customParams
- Укажите любые другие параметры, если необходимо. Например:
customParams: { param1: "value1", param2: "value2" }Все параметры из блока
customParamsбудут присутствовать в запросах на Check и Pay URL.
Отрисуем платёжную форму
После того, как все параметры платёжной формы определены – отрисуем её:
let assistant = new Assistant.Builder();
assistant.build(options, 'payment-form');Обратите внимание на второй параметр в функции build. Это id контейнера, в котором будет отрисована платёжная форма. В данном примере нам предварительно нужно было создать следующий html-элемент и разместить его на странице:
<div id="payment-form"></div>Если не указывать второй параметр в функции build – платёжная форма будет отрисована в модальном окне поверх всей страницы.
Примечание: Платёжная форма в модальном окне всегда имеет светлую цветовую тему. Наши дизайнеры небезосновательно считают, что так лучше.
Добавим обработчики
И ещё один момент – после успешной оплаты или в случае ошибки (а иногда – во время обработки платежа) бывает необходимо совершить какие-либо действия: уйти на другую страницу и так далее. Для этого можно добавить обработчики:
// платёж прошёл успешно
assistant.setOnSuccessCallback(function(operationId, transactionId) {
// здесь можно сделать что угодно – например,
// перенаправить на другую страницу
location.replace("https://domain.domain");
});
// платёж не прошёл
assistant.setOnFailCallback(function(operationId, transactionId) {
// действия по обработке ошибок
});
// платёж обрабатывается
assistant.setOnInProgressCallback(function(operationId, transactionId) {
// действия по обработке промежуточного статуса операции
});Здесь:
operationId– номер операции в МонетеtransactionId– номер заказа в магазине
Примечание: Если в настройках счёта задан InProgress URL – переход по нему произойдёт автоматически.
Код целиком
<div id="payment-form"></div>
<script type="text/javascript" src="https://payanyway.ru/assistant-builder"></script>
<script type="text/javascript">
let options = {
account: 32691195,
amount: 12.34,
transactionId: '1234567890-abcdef'
};
let assistant = new Assistant.Builder();
// платёж прошёл успешно
assistant.setOnSuccessCallback(function(operationId, transactionId) {
// здесь можно сделать что угодно – например,
// перенаправить на другую страницу
location.replace("https://domain.domain");
});
// платёж не прошёл
assistant.setOnFailCallback(function(operationId, transactionId) {
// действия по обработке ошибок
});
// платёж обрабатывается
assistant.setOnInProgressCallback(function(operationId, transactionId) {
// действия по обработке промежуточного статуса операции
});
assistant.build(options, 'payment-form');
</script>Компактная платёжная форма
Компактная платёжная форма поддерживает приём платежей только с банковских карт.
Цветовые темы
Наша форма имеет две цветовые темы – светлую и тёмную. Подумайте, какая из них будет лучше сочетаться с дизайном вашего сайта:
Определились? Теперь можно приступать к интеграции!
Добавление платёжной формы на сайт магазина
Подсказка: Если вы уже используете интерфейс MONETA.Assistant, то подключение компактной платёжной формы займёт совсем немного времени, если нет – изучите документацию, чтобы реализовать обработчики Check и Pay URL.
Подключим скрипт
После того, как ваш магазин готов обрабатывать запросы от нашей системы, добавьте следующий скрипт на страницу, где будете принимать платежи от клиентов:
<script type="text/javascript" src="https://payanyway.ru/assistant-builder"></script>Подсказка: Исходники скрипта доступны на GitHub.
Определим параметры платежа
Теперь на этой же странице нужно подготовить параметры для платёжной формы:
<script type="text/javascript">
const options = {
account: 32691195,
amount: 12.34,
transactionId: '1234567890-abcdef'
};
// ...
</script>В этом примере параметров всего три, но может быть и больше – вот они все:
- account
- Номер вашего бизнес-счёта.
- amount
- Сумма платежа.
- transactionId
- Номер заказа в магазине.
- operationId
- ID операции в Монете.
- description
- Описание заказа.
- signature
- Подпись запроса.
- subscriberId
- ID клиента в магазине.
- lang
- Язык интерфейса. Значения:
ru– русский
en– английский
- Значение по умолчанию:
ru. - theme
- Цветовая тема интерфейса. Значения:
light– светлая,
dark– тёмная
- Значение по умолчанию:
light - customParams
- Укажите любые другие параметры, если необходимо. Эти параметры будут присутствовать в запросах на
CheckиPay URL. Например:
customParams: {
param1: "value1",
param2: "value2"
}Отрисуем платёжную форму
После того, как все параметры платёжной формы определены – отрисуем её.
const assistant = new Assistant.Builder();
assistant.build(options, 'payment-form');Обратите внимание на второй параметр в функции build. Это id контейнера, в котором будет отрисована платёжная форма. В данном примере нам предварительно нужно было создать следующий html-элемент и разместить его на странице:
<div id="payment-form"></div>Если не указывать второй параметр в функции build – платёжная форма будет отрисована в модальном окне поверх всей страницы.
Подсказка: Платёжная форма в модальном окне всегда имеет светлую цветовую тему. Наши дизайнеры небезосновательно считают, что так лучше.
Добавим обработчики
И ещё один момент – после успешной оплаты или в случае ошибки (а иногда – во время обработки платежа) бывает необходимо совершить какие-либо действия: уйти на другую страницу и так далее. Для этого можно добавить обработчики:
// платёж прошёл успешно
assistant.setOnSuccessCallback(function(operationId, transactionId) {
// здесь можно сделать что угодно – например,
// перенаправить на другую страницу:
location.replace("https://domain.domain");
});
// платёж не прошёл
assistant.setOnFailCallback(function(operationId, transactionId) {
// действия по обработке ошибок
});
// платёж обрабатывается
assistant.setOnInProgressCallback(function(operationId, transactionId) {
// действия по обработке промежуточного статуса операции
});Здесь:
operationId– номер операции в МонетеtransactionId– номер заказа в магазине
Примечание: Если в настройках счёта задан InProgress URL – переход по нему произойдёт автоматически.
Код целиком
<div id="payment-form"></div>
<script type="text/javascript" src="https://payanyway.ru/assistant-builder"></script>
<script type="text/javascript">
const options = {
account: 32691195,
amount: 12.34,
transactionId: '1234567890-abcdef'
};
const assistant = new Assistant.Builder();
// платёж прошёл успешно
assistant.setOnSuccessCallback(function(operationId, transactionId) {
// здесь можно сделать что угодно – например,
// перенаправить на другую страницу:
location.replace("https://domain.domain");
});
// платёж не прошёл
assistant.setOnFailCallback(function(operationId, transactionId) {
// действия по обработке ошибок
});
// платёж обрабатывается
assistant.setOnInProgressCallback(function(operationId, transactionId) {
// действия по обработке промежуточного статуса операции
});
assistant.build(options, 'payment-form');
</script>



