Интерфейс оплаты
Об интерфейсе оплаты
Внимание! Если вы используете CMS систему или любые другие торговые платформы, рекомендуем ознакомиться с готовыми решениями в разделе виджеты и модули.
Интерфейс Robokassa, предлагает перейти к оплате, нажав одну кнопку. Предварительно магазин должен сохранить у себя передаваемую информацию (номер счёта, сумма, дата формирования и дополнительные параметры, если они используются) и связать её со своим заказом.
Типовая последовательность работы
- Ваш скрипт формирует набор данных и SignatureValue.
- Покупатель оплачивает заказ в интерфейсе Robokassa.
- Магазин получает уведомление на ResultURL и самостоятельно обновляет статус заказа.
Robokassa уведомляет об оплате, но не изменяет статусы заказов автоматически — логика обработки остается на стороне магазина.
URL для запросов HTTP GET/POST:
https://auth.robokassa.ru/Merchant/Index.aspx
Готовый виджет для оплаты на сайте
Вы можете выбрать готовый виджет и кастомизировать его под ваши нужды в конструкторе или в личном кабинете в разделе "Платежный виджет"
В конструкторе выберите нужный виджет способа перехода к оплате, отредактируйте его внешний вид, проставте сумму оплаты и при необходимости дополнительные поля. Затем сгенерируемый готовый код скопируйте к себе на сайт.
По каждому магазину передается четыре параметра:
• Кнопка перехода на оплату;
• Форма с произвольной суммой оплаты;
• Ссылка перехода на оплату;
• Оплата с помощью QR-кода;
Пример кода виджета, для самостоятельной установки
Приведённые примеры предполагают, что в технических настройках магазина выбран алгоритм расчёта хэша MD5.
Кнопка
Минимальный вариант — это кнопка, которая сразу ведёт пользователя на страницу Robokassa.
<?php
$merchantLogin = "demo";
$password1 = "password_1";
$invId = 12;
$outSum = "990.00";
$description = "Оплата заказа №12";
$signature = md5("$merchantLogin:$outSum:$invId:$password1");
?>
<form action="https://auth.robokassa.ru/Merchant/Index.aspx" method="POST">
<input type="hidden" name="MerchantLogin" value="<?= $merchantLogin ?>" />
<input type="hidden" name="OutSum" value="<?= $outSum ?>" />
<input type="hidden" name="InvId" value="<?= $invId ?>" />
<input type="hidden" name="Description" value="<?= $description ?>" />
<input type="hidden" name="SignatureValue" value="<?= $signature ?>" />
<input type="hidden" name="IsTest" value="1" />
<button type="submit">Оплатить через Robokassa</button>
</form>
Форма с произвольной суммой
Если покупатель должен сам ввести сумму (например, при пополнении счёта), используйте промежуточную форму. Скрипт ниже принимает сумму от пользователя, рассчитывает подпись и автоматически отправляет данные на страницу оплаты.
<?php
$merchant_login = "demo";
$password_1 = "password_1";
$invid = 0;
$description = "Техническая документация по ROBOKASSA";
$default_sum = "10.00";
$receipt = urlencode('{"items":[{"name":"Пополнение счёта","quantity":1,"sum":'.$default_sum.',"tax":"none"}]}');
$signature_value = md5("$merchant_login:$default_sum:$invid:$receipt:$password_1");
print "<html><script language=JavaScript ".
"src='https://auth.robokassa.ru/Merchant/PaymentForm/FormFLS.js?".
"MerchantLogin=$merchant_login&DefaultSum=$default_sum&InvoiceID=$invid".
"&Description=$description&Receipt=$receipt&SignatureValue=$signature_value'></script></html>";
?>
С применением всех параметров
Расширенный пример позволяет передать дополнительные настройки: язык интерфейса, метод оплаты, email покупателя и чек для фискализации.
<?php
// регистрационная информация (Идентификатор магазина, пароль №1)
$merchant_login = "demo";
$password_1 = "password_1";
// номер заказа
$invid = 12345;
// описание заказа
$description = "Техническая документация по ROBOKASSA";
// сумма заказа
$out_sum = "8.96";
// товарная номенклатура в url encode
$receipt = "%7B%22items%22%3A%5B%7B%22name%22%3A%22product%22%2C%22quantity%22%3A1%2C%22sum%22%3A8.96%2C%22tax%22%3A%22none%22%7D%5D%7D";
// предлагаемый метод оплаты
$incurrlabel = "BankCard";
// язык интерфейса
$culture = "ru";
// email покупателя
$Email = "test@test.com";
// срок оплаты, до которого необходимо совершить платеж
$ExpirationDate = "2029-01-16T12:00";
// пользовательский параметр
$Shp_item = "digital";
// generate signature
$signature_value = md5("$merchant_login:$out_sum:$invid:$receipt:$password_1:Shp_item=$Shp_item");
// форма оплаты товара
print
"<html>".
"<form action='https://auth.robokassa.ru/Merchant/Index.aspx' method='POST'>".
"<input type='hidden' name='MerchantLogin' value='$merchant_login'>".
"<input type='hidden' name='OutSum' value='$out_sum'>".
"<input type='hidden' name='InvId' value='$invid'>".
"<input type='hidden' name='Description' value='$description'>".
"<input type='hidden' name='SignatureValue' value='$signature_value'>".
"<input type='hidden' name='Shp_item' value='$Shp_item'>".
"<input type='hidden' name='IncCurrLabel' value='$incurrlabel'>".
"<input type='hidden' name='Culture' value='$culture'>".
"<input type='hidden' name='Email' value='$Email'>".
"<input type='hidden' name='ExpirationDate' value='$ExpirationDate'>".
"<input type='hidden' name='Receipt' value='$receipt'>".
"<input type='submit' value='Оплатить'>".
"</form>".
"</html>";
?>
Скачать примеры
Описание параметров
Обязательные параметры
| Параметр | Значение |
|---|---|
MerchantLogin | Логин магазина, указанный в технических настройках. |
OutSum | Сумма к оплате. Формат — число через точку, например 123.45. |
SignatureValue | Контрольная сумма запроса. Строится из строки MerchantLogin:OutSum:InvId:модификаторы:Пароль#1:Shp_* с использованием настроенного метода хэширования. Подробнее — в разделе «Сборка подписи». |
Необязательные параметры
| Параметр | Значение |
|---|---|
InvId | Номер счёта в магазине. Параметр необязательный, но мы настоятельно рекомендуем его использовать. Значение должно быть уникальным для каждой оплаты. Допустимые значения: от 1 до 9223372036854775807 (2 – 1). Если значение пустое, равно 0 или параметр не указан, при создании операции оплаты ему автоматически будет присвоено уникальное значение. |
Description | Название товара или услуги (до 100 символов, без спецсимволов). |
Email | Почта покупателя. Используется для чеков и уведомлений. |
IncCurrLabel | Предлагаемый способ оплаты. Тот вариант оплаты, который вы рекомендуете использовать своим покупателям. Если параметр не задан, по умолчанию открывается оплата банковской картой. Если параметр указан, покупатель при переходе на сайт Robokassa попадёт на страницу оплаты с выбранным способом оплаты. Подробнее см. в разделе «XML-интерфейсы». |
Culture | Язык интерфейса (ru или en). |
Encoding | Кодировка передаваемых данных (по умолчанию UTF-8). |
IsTest | Включение тестового режима (1 — тест, 0 — основной). |
ExpirationDate | Крайний срок оплаты в формате ISO 8601 (YYYY-MM-DDThh:mm). |
Receipt | Фискальные данные в формате JSON (закодированы в UTF-8 и затем в URL). Подробности см. в разделе «Фискализация». |
StepByStep | Признак холда (true), при котором оплата проводится в два этапа. Подробности см. в разделе «Холдирование и предавторизация». |
ResultUrl | Адрес для серверного уведомления об оплате. Подробности см. в разделе «Оповещение об оплате на ResultURL». |
PaymentMethods | Предлагаемые способы оплаты. В отличие от IncCurrLabel позволяет передать сразу несколько способов оплаты.Для этого укажите несколько параметров PaymentMethods с разными значениями.При использовании Iframe-версии платёжной страницы способ реализации описан в соответствующем разделе. |
SuccessUrl | Адрес для успешного возврата пользователя после оплаты. Подробности см. в разделе «Переадресация при успешной оплате (SuccessURL)». |
FailUrl | Адрес для возврата при ошибке оплаты. |
ResultUrl2 | Дополнительный серверный callback. Для холдирования укажите ResultUrl2, чтобы получить уведомление Result2, и учитывайте его в подписи вместе с StepByStep. Подробности см. в разделе «Дополнительное оповещение об оплате на ResultUrl2». |
SuccessUrl2 | Дополнительный адрес возврата при успешной оплате. Подробности см. в разделе «Дополнительная переадресация (ReturnURL: SuccessUrl2)». |
SuccessUrl2Method | Метод запроса к SuccessUrl2 (GET или POST). |
FailUrl2 | Дополнительный адрес возврата при ошибке. Подробности см. в разделе «Дополнительная переадресация (ReturnURL: FailUrl2)». |
FailUrl2Method | Метод запроса к FailUrl2 (GET или POST). |
Token | Токен сохранённой карты. Подробности см. в разделе «Оплата по сохранённой карте». |
Recurring | Флаг периодического платежа (true). Подробности см. в разделе «Периодические платежи». |
Shp | Дополнительные пользовательские параметры. Подробности см. в разделе «Дополнительные пользовательские параметры». |
Приоритет способов оплаты
IncCurrLabel— фиксирует один метод оплаты или валюту (значения из XML-интерфейса в полеAlias).PaymentMethods— задаёт список доступных методов (значения из XML-интерфейса в полеAlias).- При одновременной передаче Robokassa учитывает
PaymentMethods; при отсутствии массива используетсяIncCurrLabel.
Сборка подписи SignatureValue
SignatureValue подтверждает, что запрос на платёж сформирован вашим магазином. Строка для подписи собирается последовательно и всегда разделяется двоеточиями без пробелов:
MerchantLogin:OutSum:<InvId или пустой слот>:<модификаторы в строгом порядке>:Пароль#1:<Shp_параметры>
Основные правила:
- Если
InvIdне передаётся, оставьте пустой слот (OutSum::...) . Рекомендуем передавать параметрInvIdс целью упрощения контроля оплаты. Пароль#1из личного кабинета всегда указывается перед пользовательскими параметрами.- Дополнительные параметры
Shp_*добавляются после пароля, сортируются строго по алфавиту и присоединяются в формате:Shp_key=value. - Алгоритм хэширования должен совпадать с настройками магазина.
Состав строки:
- Обязательные элементы —
MerchantLogin,OutSum,Пароль#1. - Опциональный элемент —
InvId(оставляйте слот пустым, если параметр не используется). - Модификаторы добавляются только при наличии и строго в следующем порядке:
Receipt— фискальные данные в минимизированном JSON UTF-8.StepByStep— признак поэтапной оплаты.ResultUrl2— дополнительный серверный callback.SuccessUrl2— альтернативный success-редирект.SuccessUrl2Method— метод запроса кSuccessUrl2(GETилиPOST).FailUrl2— альтернативный fail-редирект.FailUrl2Method— метод запроса кFailUrl2.Token— токен сохранённой карты для CoF-платежей.
Примеры сочетаний модификаторов
- Только чек:
MerchantLogin:OutSum:InvId:Receipt:Пароль#1. - Чек и пользовательский параметр:
MerchantLogin:OutSum:InvId:Receipt:Пароль#1:Shp_order=25. - Холдирование с ResultUrl2:
MerchantLogin:OutSum:InvId:StepByStep:ResultUrl2:Пароль#1. - Платеж с чеком и дополнительной переадресацией после успешной оплаты или отказа от платежа:
MerchantLogin:OutSum:InvId:Receipt:SuccessUrl2:SuccessUrl2Method:FailUrl2:FailUrl2Method:Пароль#1.
После формирования строки вычислите хеш — по умолчанию используется MD5; при смене алгоритма в настройках магазина используйте тот же метод в интеграции.
Дополнительные пользовательские параметры
Параметры, начинающиеся с префикса Shp_, позволяют передать в Robokassa собственные данные — идентификатор пользователя, тип товара или любые другие служебные значения.
- Добавляйте только латинские буквы, цифры и подчёркивания после префикса
Shp_. - Перед отправкой запроса отсортируйте параметры
Shp_*строго по названию (алфавиту) и включите их в строку подписи в формате:Shp_key=value. - Переданные значения будут возвращены в ResultURL, SuccessURL, FailURL и других уведомлениях без изменений.
Используйте пользовательские параметры, чтобы связать оплату с внутренними сущностями магазина или передать дополнительные признаки заказа.
Типовые ошибки интерфейса оплаты
25— магазин не активирован. Ошибка появляется, если магазин работает в боевом режиме без активации или в настройках сайта указан некорректный идентификатор магазина. Проверьте значение идентификатора в разделе «Мои магазины» → «Технические настройки» и обновите его в вашем коде.26— магазин не найден. Убедитесь, что идентификатор магазина указан без опечаток и совпадает с данными в личном кабинете.29— неверный параметрSignatureValue. Проверьте скрипт, который формирует подпись, и убедитесь, что используются корректные значенияMerchantLoginиMerchantPass1. Если добавляете пользовательские параметрыshp_, включайте их в формулу подсчёта и передавайте в алфавитном порядке.30— неверный параметр счёта. Проверьте обязательные и необязательные параметры, которые вы передаёте при инициализации оплаты.31— неверная сумма платежа. При переадресации на платёжную страницу сумма должна быть передана и быть больше нуля.33— время, отведённое на оплату счёта, истекло. Ознакомьтесь с лимитами по способам оплаты и оформляйте платёж заново.34— услуга рекуррентных платежей не разрешена магазину. Подключите услугу через менеджеров Robokassa.35— неверные параметры для инициализации рекуррентного платежа. Сверьтесь с документацией по рекуррентным платежам и проверьте настройки на сайте.40— повторная оплата счёта с тем же номером невозможна. Для каждого платежа передавайте уникальныйInvId. Значения, использованные в тестовом режиме (IsTest=1), не логируются и не вызывают эту ошибку.41— ошибка на старте операции. Повторите инициализацию платежа, при повторной неудаче обратитесь в поддержку.51— срок оплаты счёта истек. Актуально для счетов, выставленных через личный кабинет или JSON Web Token.52— попытка повторной оплаты уже оплаченного счёта. Актуально для счетов, выставленных через личный кабинет или JSON Web Token.53— счёт не найден. Проверьте ссылку на счёт или его существование (для личного кабинета и JSON Web Token).64— функционал холдирования средств запрещён для магазина. Подключите услугу перед использованием холда.65— некорректные параметры для холдирования. Уточните передаваемые значения для операций с холдом.20,21,22,23,24,27,28,32,36,37,43,500— внутренние ошибки сервиса. Сообщите в поддержку Robokassa через раздел «Поддержка» в личном кабинете.
Если вы используете тестовую среду Robokassa (IsTest=1 или соответствующая настройка в модуле), применяйте только тестовую пару технических паролей из вкладки «Технические настройки» в карточке магазина. Использование боевых паролей в тестовом окружении приводит к ошибке 29.
Рекомендации для разработчиков мобильных приложений
При интеграции платёжной формы через встроенный браузер используйте компонент WKWebView. Он рекомендован для iOS начиная с версии 8.0 и для macOS начиная с 10.10. При использовании устаревших компонентов UIWebView или WebView корректная работа платёжной формы не гарантируется.
Обработка Intent-ссылок в WebView
Android
Если URL содержит один из паттернов, инициируйте intent action:
sberpaysbolpayintent://qr.nspk.ru/
iOS
Обрабатывайте ссылку через WebView, если схема URL совпадает с любым из значений ниже или сам адрес содержит //qr.nspk.ru/:
ios-app-smartonline://sbolpay/btripsexpenses://sbolpay/budgetonline-ios://sbolpaysbolpaysberpay