Сценарий из mcp-everything. Актуально на 2026-10-24.
Покупатель переходит на страницу Robokassa, платит и возвращается на сайт; магазин узнаёт об оплате серверным уведомлением.
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"))
https://auth.robokassa.ruhttps://services.robokassa.ruТип: Другое
Стандартной схемы авторизации нет: каждый запрос подписывается контрольной суммой, состав которой зависит от метода. В личном кабинете магазина берутся 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");
Создаёт операцию оплаты и открывает платёжную страницу. Тот же набор параметров можно отправить 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 | нет | Признак периодического платежа |
OutSum, InvId, Fee, EMail, SignatureValue, PaymentMethod, IncCurrLabel и параметры Shp_*. Подпись проверяют по формуле OutSum:InvId:Пароль#2:Shp_* и только потом меняют статус заказа.OK + номер заказа (например OK12), иначе уведомление считается недоставленным.Shp_ возвращаются в уведомлениях без изменений и включаются в подпись в алфавитном порядке.StepByStep=true) в строку подписи добавляется модификатор true: MerchantLogin:OutSum:InvId:true:Пароль#1.Result.Code или isSuccess.Если этого недостаточно — официальная документация: https://docs.robokassa.ru/ru/quick-start Вся интеграция одним документом: https://mcp-everything.ru/integrations/robokassa.md