Перейти к основному содержимому

Интерфейс оплаты

Об интерфейсе оплаты

Внимание! Если вы используете CMS систему или любые другие торговые платформы, рекомендуем ознакомиться с готовыми решениями в разделе виджеты и модули.

Интерфейс Robokassa, предлагает перейти к оплате, нажав одну кнопку. Предварительно магазин должен сохранить у себя передаваемую информацию (номер счёта, сумма, дата формирования и дополнительные параметры, если они используются) и связать её со своим заказом.

Типовая последовательность работы

  1. Ваш скрипт формирует набор данных и SignatureValue.
  2. Покупатель оплачивает заказ в интерфейсе Robokassa.
  3. Магазин получает уведомление на 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 (оставляйте слот пустым, если параметр не используется).
  • Модификаторы добавляются только при наличии и строго в следующем порядке:
    1. Receipt — фискальные данные в минимизированном JSON UTF-8.
    2. StepByStep — признак поэтапной оплаты.
    3. ResultUrl2 — дополнительный серверный callback.
    4. SuccessUrl2 — альтернативный success-редирект.
    5. SuccessUrl2Method — метод запроса к SuccessUrl2 (GET или POST).
    6. FailUrl2 — альтернативный fail-редирект.
    7. FailUrl2Method — метод запроса к FailUrl2.
    8. 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:

  • sberpay
  • sbolpay
  • intent
  • ://qr.nspk.ru/

iOS

Обрабатывайте ссылку через WebView, если схема URL совпадает с любым из значений ниже или сам адрес содержит //qr.nspk.ru/:

  • ios-app-smartonline://sbolpay/
  • btripsexpenses://sbolpay/
  • budgetonline-ios://sbolpay
  • sbolpay
  • sberpay