Интеграция Robokassa — это совокупность нескольких узлов: платежная форма (редирект), серверные уведомления (вебхуки), API для статусов/счетов и модули CMS. Перед стартом убедитесь, что у вас есть:
Robokassa поддерживает классическую схему редиректа на платежную форму и серверные уведомления по результатам. Ключевые сценарии:
Merchant/Index.aspx).С точки зрения протокола, ядро состоит из:
Shp_*.OK{InvId}.Выбор интеграционного пути зависит от стека и сроков:
Robokassa исторически использует aspx‑маршруты, поэтому вы встретите Index.aspx в URL. Ниже — обобщенная карта узлов.
| Узел | Метод | Назначение | Примечание |
|---|---|---|---|
Платежная форма (Merchant/Index.aspx) |
GET/POST | Редирект покупателя на оплату | Параметры: MerchantLogin, OutSum, InvId, Description, SignatureValue, Culture, IsTest, Shp_* |
| SuccessURL | GET | Возврат после успешной оплаты | Отображение результата покупателю |
| FailURL | GET | Возврат при прерывании/ошибке | Возможность повторной оплаты |
| ResultURL (вебхук) | POST | Серверное уведомление о платеже | Подпись по паролю №2, ответ OK{InvId} |
| API статуса | GET/POST | Запрос статуса платежа/инвойса | Используйте для сверки, если вебхук не дошел |
Примечание: конкретные пути API статусов зависят от подключения и могут отличаться; ориентируйтесь на актуальную документацию в ЛК и спецификации. Для продакшн‑редиректов чаще встречается домен https://auth.robokassa.ru/Merchant/Index.aspx.
Корректная проверка подписи — основа безопасности. Рекомендуется алгоритм SHA‑256 (MD5 — устаревающий вариант). В ЛК включите SHA‑256 и всегда:
Shp_* в подпись в том же порядке, в котором отправляете их в форму.Пример строки для подписи (упрощенно):
MerchantLogin:OutSum:InvId:Password#
С добавлением пользовательских полей Shp_* они включаются по правилам провайдера (обычно по алфавиту), иначе проверка подписи может не пройти.
Проверка подписи SHA‑256 в PHP:
<?php
$merchant = $_POST['MerchantLogin'] ?? '';
$outSum = $_POST['OutSum'] ?? '';
$invId = $_POST['InvId'] ?? '';
$sig = strtolower($_POST['SignatureValue'] ?? '');
$password2 = getenv('ROBOKASSA_PASSWORD2');
// Включите Shp_* параметры в подпись, отсортировав по ключу
$shp = [];
foreach ($_POST as $k => $v) {
if (stripos($k, 'Shp_') === 0) { $shp[$k] = $v; }
}
ksort($shp);
$shpStr = '';
foreach ($shp as $k => $v) { $shpStr .= ":$k=$v"; }
$base = "$outSum:$invId:$password2$shpStr"; // для ResultURL
$calc = strtolower(hash('sha256', $base));
if ($calc !== $sig) {
http_response_code(400);
exit('bad signature');
}
// Возвращаем OK с номером счета
echo 'OK' . (int)$invId;
Проверка подписи в Node.js:
const crypto = require('crypto');
function verifySignature({ outSum, invId, password2, shpParams, signature }) {
const suffix = Object.keys(shpParams || {})
.sort()
.map(k => `:${k}=${shpParams[k]}`)
.join('');
const base = `${outSum}:${invId}:${password2}${suffix}`;
const calc = crypto.createHash('sha256').update(base).digest('hex').toLowerCase();
return calc === String(signature).toLowerCase();
}
Дополнительно:
Если вы используете готовые CMS, интеграция ускоряется в разы.
1C‑Bitrix модуль Robokassa
ResultURL доступен без авторизации и не кэшируется.WordPress WooCommerce Robokassa
Совет: используйте «песочницу» и журнал запросов в CMS для отслеживания проблем. В случае ошибок авторизации смотрите раздел troubleshooting по merchant/auth.
Ниже — минимальные примеры. Это не полноценный SDK, а «скелет» для быстрой интеграции.
<?php
$merchantLogin = getenv('ROBOKASSA_LOGIN');
$password1 = getenv('ROBOKASSA_PASSWORD1');
$invoiceId = 12345; $amount = '1490.00';
$desc = 'Оплата заказа #12345';
$base = "$merchantLogin:$amount:$invoiceId:$password1";
$sig = hash('sha256', $base);
$query = http_build_query([
'MerchantLogin' => $merchantLogin,
'OutSum' => $amount,
'InvId' => $invoiceId,
'Description' => $desc,
'SignatureValue' => $sig,
'IsTest' => 1,
]);
$url = 'https://auth.robokassa.ru/Merchant/Index.aspx?' . $query;
header("Location: $url");
class Robokassa {
constructor({ login, pass1, pass2, baseUrl = 'https://auth.robokassa.ru' }) {
this.login = login; this.pass1 = pass1; this.pass2 = pass2; this.baseUrl = baseUrl;
}
createPaymentUrl({ invId, amount, description, isTest = 1, extra = {} }) {
const crypto = require('crypto');
const shpSuffix = Object.keys(extra).sort().map(k => `:${k}=${extra[k]}`).join('');
const signature = crypto.createHash('sha256')
.update(`${this.login}:${amount}:${invId}:${this.pass1}${shpSuffix}`)
.digest('hex');
const params = new URLSearchParams({ MerchantLogin: this.login, OutSum: amount, InvId: invId, Description: description, SignatureValue: signature, IsTest: String(isTest) });
for (const [k,v] of Object.entries(extra)) params.append(k, v);
return `${this.baseUrl}/Merchant/Index.aspx?${params.toString()}`;
}
}
string login = Config.Login;
string pass1 = Config.Pass1;
string amount = "1490.00";
int invId = 12345;
string baseStr = $"{login}:{amount}:{invId}:{pass1}";
string sig = BitConverter.ToString(System.Security.Cryptography.SHA256.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(baseStr))).Replace("-", "").ToLower();
string url = $"https://auth.robokassa.ru/Merchant/Index.aspx?MerchantLogin={login}&OutSum={amount}&InvId={invId}&Description=Order%20{invId}&SignatureValue={sig}&IsTest=1";
Response.Redirect(url);
Вебхуки Robokassa — это, по сути, серверные уведомления на ваш ResultURL. Правила обработки:
OK{InvId} и код 200 — это подтверждение успешного приема.Полезные поля в ResultURL (могут отличаться в зависимости от конфигурации):
| Поле | Описание |
|---|---|
| OutSum | Сумма платежа |
| InvId | Идентификатор счета/заказа |
| SignatureValue | Подпись SHA‑256/MD5 |
| Shp_* | Пользовательские параметры мерчанта |
Если вебхук не дошел, запросите статус платежа через API статусов или воспользуйтесь отчетами в ЛК — см. отчеты и аналитика.
Merchant/Authorization см. troubleshooting.Merchant/Index.aspx, добавлены Shp_* при необходимости.OK{InvId}.Интеграция Robokassa строится вокруг трех опор: корректная подпись (SHA‑256), стабильный ResultURL (вебхук) и четкая логика статусов. Выберите подход — модуль для CMS или прямую работу с Robokassa API — и двигайтесь шаг за шагом по дорожной карте выше. Готовы ускорить запуск и повысить конверсию? Изучите смежные разделы (форма оплаты, Sandbox, методы оплаты) и приступайте к настройке уже сегодня.
Присоединяйтесь и принимайте платежи с первого дня — начните с личного кабинета и перейдите к настройке платежной формы.