Стандартный модуль Robokassa из Маркетплейса часто не даёт нужной гибкости: вы не можете управлять параметрами Shp_*, менять логику фискализации или оптимизировать обработку под высокие нагрузки. Кастомная интеграция решает эти проблемы — вы получаете полный контроль над формированием подписи, обработкой уведомлений и логикой ошибок. Наш опыт — 7+ лет интеграций Битрикс с платёжными системами, более 50 успешных проектов. Мы гарантируем корректную обработку платежей и полное соответствие требованиям 54-ФЗ.
Почему кастомная интеграция Robokassa надёжнее готового модуля?
Готовый модуль из Маркетплейса ограничен в настройках: не позволяет гибко управлять параметрами Shp_*, не поддерживает нестандартные сценарии фискализации и не оптимизирован под высокие нагрузки. Кастомная интеграция даёт полный контроль над формированием подписи, обработкой уведомлений и логикой ошибок. Она в 3 раза быстрее обрабатывает платежи за счёт оптимизированного кэширования и параллельных запросов к API Битрикс и Robokassa.
| Критерий | Стандартный модуль | Кастомная интеграция |
|---|---|---|
| Управление Shp_* | Ограничено | Полный контроль |
| Фискализация | Базовая, часты ошибки | Гибкая настройка под 54-ФЗ |
| Производительность | Средняя | Оптимизирована (кэширование, параллельные запросы) |
| Гарантия | Отсутствует | 12 месяцев |
Схема работы
- Битрикс формирует подписанную ссылку на форму Robokassa
- Покупатель оплачивает (карта, кошелёк, наличные)
- Robokassa отправляет POST-уведомление на
ResultURLмагазина - Магазин проверяет подпись, подтверждает оплату
- Robokassa перенаправляет покупателя на
SuccessURLилиFailURL
Параметры и формирование подписи
Базовые параметры запроса к Robokassa:
| Параметр | Значение | Описание |
|---|---|---|
MerchantLogin |
из ЛК | Логин магазина |
OutSum |
сумма | Сумма оплаты |
InvId |
orderId | Номер заказа |
Description |
текст | Описание (до 100 символов) |
SignatureValue |
MD5/SHA256 | Подпись |
IsTest |
1 | Тестовый режим |
Encoding |
utf-8 | Кодировка |
Подпись формируется как MD5 или SHA256 (зависит от настроек магазина в ЛК Robokassa):
// MD5 подпись
$signature = md5("{$merchantLogin}:{$outSum}:{$invId}:{$password1}");
// SHA256 (рекомендуется)
$signature = hash('sha256', "{$merchantLogin}:{$outSum}:{$invId}:{$password1}");
// URL платёжной формы
$payUrl = 'https://auth.robokassa.ru/Merchant/Index.aspx?'
. http_build_query([
'MerchantLogin' => $merchantLogin,
'OutSum' => number_format($outSum, 2, '.', ''),
'InvId' => $invId,
'Description' => $description,
'SignatureValue' => $signature,
'Encoding' => 'utf-8',
'IsTest' => $isTest ? 1 : 0,
]);
Обработка ResultURL
Robokassa отправляет POST с параметрами на ResultURL. Проверка подписи обязательна — используется Password2 (отличается от Password1):
$outSum = $_POST['OutSum'];
$invId = $_POST['InvId'];
$received = strtolower($_POST['SignatureValue']);
$password2 = $this->getBusinessValue($payment, 'ROBOKASSA_PASSWORD2');
$expected = strtolower(hash('sha256', "{$outSum}:{$invId}:{$password2}"));
if ($received !== $expected) {
echo 'bad sign';
exit;
}
// Подпись верна — подтверждаем оплату
$order = \Bitrix\Sale\Order::loadByAccountNumber($invId);
// ... setPaid('Y'), save()
echo "OK{$invId}"; // Robokassa ждёт именно этот ответ
Критично: ответ на ResultURL должен быть строго OK{InvId}. Если Robokassa не получает этот ответ — считает уведомление неотправленным и пробует снова (до 8 раз).
Дополнительные параметры (Shp_*)
Robokassa поддерживает пользовательские параметры с префиксом Shp_. Они включаются в подпись и возвращаются в ResultURL. Используйте для передачи идентификатора заказа в Битрикс, если InvId занят или нужны дополнительные данные:
$signature = hash('sha256',
"{$merchantLogin}:{$outSum}:{$invId}:{$password1}:Shp_item={$itemId}&Shp_user={$userId}"
);
// Параметры Shp_ в подпись включаются в алфавитном порядке ключей
Фискализация
Robokassa поддерживает ФЗ-54 через параметр Receipt в base64-encoded JSON:
$receipt = [
'sno' => 'osn', // система налогообложения
'items' => array_map(function($basketItem) {
return [
'name' => $basketItem->getField('NAME'),
'quantity' => $basketItem->getQuantity(),
'sum' => $basketItem->getPrice() * $basketItem->getQuantity(),
'payment_method' => 'full_prepayment',
'payment_object' => 'commodity',
'tax' => 'vat20',
];
}, iterator_to_array($order->getBasket())),
];
$receiptEncoded = base64_encode(json_encode($receipt, JSON_UNESCAPED_UNICODE));
Как обеспечить корректную фискализацию чеков?
Для соблюдения 54-ФЗ при оплате через Robokassa необходимо передавать в запросе параметр Receipt с корректными данными о товарах, ставках НДФЛ и системе налогообложения. Частая ошибка — неверный формат payment_object или tax. В нашей практике мы используем предварительную валидацию чека через тестовый контур Robokassa. Это позволяет избежать отказов фискального накопителя и штрафов.
Пример из практики: интернет-магазин бытовой техники
Недавно мы внедрили кастомную интеграцию Robokassa для крупного магазина бытовой техники. Стандартный модуль не справлялся с нагрузкой в 2000+ заказов в день — платежи зависали, фискализация сыпала ошибки. Мы переписали модуль: добавили асинхронную обработку ResultURL через очередь, оптимизировали запросы к инфоблокам и настроили параллельную отправку чеков. В результате время подтверждения платежа снизилось с 3 секунд до 0.4 секунды, а число неуспешных фискализаций упало до нуля. Заказчик сэкономил на возвратах и штрафах — инвестиции в интеграцию окупились за пару месяцев.
Что входит в работу
Мы предоставляем интеграцию «под ключ»:
- Анализ текущей схемы оплаты на сайте
- Разработка модуля с полным циклом: генерация ссылки, ResultURL, SuccessURL, FailURL
- Настройка дополнительных параметров
Shp_*для передачи метаданных заказа - Реализация фискализации в соответствии с 54-ФЗ
- Тестирование на тестовом и боевом контуре Robokassa
- Документация по API и инструкция по обслуживанию
- Гарантия на код — 12 месяцев
Сроки и бюджет
| Задача | Срок |
|---|---|
| Обработчик: формирование ссылки + ResultURL | 1–2 дня |
| Дополнительные параметры Shp_* | 0.5 дня |
| Фискализация | +1–2 дня |
| Тестирование полного цикла | 0.5 дня |
Стоимость рассчитывается индивидуально и зависит от сложности — в среднем она сопоставима с тремя месяцами абонемента на готовый модуль, но даёт гораздо больше контроля. Оценим ваш проект за 1 день.
Свяжитесь с нами для консультации — мы гарантируем стабильную работу даже при пиковых нагрузках. Закажите интеграцию, и мы настроим всё под ваш бизнес.







