Robokassa API: Принять оплату через платёжную страницу

Сценарий из mcp-everything. Актуально на 2026-10-24.

Покупатель переходит на страницу Robokassa, платит и возвращается на сайт; магазин узнаёт об оплате серверным уведомлением.

  1. В личном кабинете возьми MerchantLogin, Пароль#1 и Пароль#2, выбери алгоритм хэша (в примерах — MD5) и укажи ResultURL — адрес серверного уведомления.
  2. Посчитай подпись: хэш строки MerchantLogin:OutSum:InvId:Пароль#1. Если передаёшь свои параметры Shp_*, добавь их в конец в алфавитном порядке в виде Shp_name=value.
  3. Перенаправь покупателя: GET /Merchant/Index.aspx с MerchantLogin, OutSum (точка как разделитель, два знака), InvId, Description и SignatureValue. Для теста — IsTest=1 и тестовые пароли.
  4. После оплаты Robokassa пришлёт на ResultURL OutSum, InvId и SignatureValue. Проверь подпись по формуле OutSum:InvId:Пароль#2[:Shp_*] и только после этого отметь заказ оплаченным.
  5. Ответь на уведомление строкой OK + номер заказа (например, OK1042) — иначе Robokassa будет считать его недоставленным. Возврат покупателя на SuccessURL не подтверждает оплату.
import hashlib
from urllib.parse import urlencode

LOGIN, PASS1, PASS2 = "demo-shop", "<Пароль#1>", "<Пароль#2>"

def pay_url(inv_id: int, out_sum: str, description: str) -> str:
    sig = hashlib.md5(f"{LOGIN}:{out_sum}:{inv_id}:{PASS1}".encode()).hexdigest()
    q = {"MerchantLogin": LOGIN, "OutSum": out_sum, "InvId": inv_id, "Description": description, "SignatureValue": sig}
    return "https://auth.robokassa.ru/Merchant/Index.aspx?" + urlencode(q)

def result_ok(form: dict) -> str | None:
    """Обработчик ResultURL: вернуть 'OK<InvId>' или None, если подпись неверна."""
    expected = hashlib.md5(f"{form['OutSum']}:{form['InvId']}:{PASS2}".encode()).hexdigest()
    return f"OK{form['InvId']}" if expected.lower() == form["SignatureValue"].lower() else None

print(pay_url(1042, "1500.00", "Оплата заказа 1042"))

Базовые URL

Авторизация

Тип: Другое

Стандартной схемы авторизации нет: каждый запрос подписывается контрольной суммой, состав которой зависит от метода. В личном кабинете магазина берутся MerchantLogin, Пароль#1, Пароль#2 (и Password3 для API возвратов), там же выбирается алгоритм хэша (в примерах документации — MD5). Пароль#1 используется для подписи запросов на оплату, Пароль#2 — для проверки уведомлений и XML-интерфейсов. Invoice API и Refund API принимают тело в виде JWT, подписанного HMAC.

Подпись запуска оплаты: MerchantLogin:OutSum:InvId:модификаторы:Пароль#1:Shp_*. Пример из документации (PHP, MD5):

$signature = md5("$merchantLogin:$outSum:$invId:$password1");

Методы сценария

GET /Merchant/Index.aspx — Открыть платежную страницу

Создаёт операцию оплаты и открывает платёжную страницу. Тот же набор параметров можно отправить POST-формой (application/x-www-form-urlencoded). Для теста передайте IsTest=1. Ответ — HTML платёжной формы или 302 с адресом платёжной страницы; он не подтверждает оплату.

Параметр Где Тип Обяз. Описание
MerchantLogin query string да Идентификатор магазина
OutSum query string да Сумма к оплате, десятичный разделитель — точка
SignatureValue query string да Подпись запроса с Паролем#1
InvId query integer нет Уникальный номер счёта; при 0 или отсутствии назначается автоматически
Description query string нет Название товара или услуги без спецсимволов
Email query string нет Email покупателя для чеков и уведомлений
IncCurrLabel query string нет Предлагаемый способ оплаты из GetCurrencies
Culture query string нет Язык платёжной страницы: ru, en
Encoding query string нет Кодировка данных
IsTest query integer нет Тестовый режим: 0, 1
ExpirationDate query string нет Крайний срок оплаты, YYYY-MM-DDThh:mm
Receipt query string нет Фискальные данные — минимизированный JSON в URL-кодировке
IsWithoutFreeSale query boolean нет Не формировать автоматический чек «Свободная продажа» без Receipt
StepByStep query boolean нет Двухстадийная оплата (холдирование)
PaymentMethods query array нет Разрешённые способы оплаты, параметр можно повторять
ResultUrl2 query string нет Дополнительный адрес серверного уведомления
SuccessUrl2 query string нет Дополнительный адрес возврата после успешной оплаты
FailUrl2 query string нет Дополнительный адрес возврата после ошибки
Token query string нет Токен сохранённой карты
Recurring query boolean нет Признак периодического платежа

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://docs.robokassa.ru/ru/quick-start Вся интеграция одним документом: https://mcp-everything.ru/integrations/robokassa.md