Интеграция 1С-Битрикс с платёжной системой Сбербанк Онлайн
Типичная ситуация: интернет-магазин на Битрикс работает, заказы идут, но покупатели звонят и просят «выставить счёт через Сбер» — потому что не видят нужной кнопки на странице оплаты. Подключение Сбербанк Онлайн к Битрикс закрывает этот запрос и попутно вскрывает несколько технических нюансов, которые на этапе «просто установим модуль» не очевидны.
Как работает платёжный шлюз Сбербанка
Сбербанк Онлайн работает через REST API эквайринга (securepayments.sberbank.ru/payment/rest/ для боевой среды, 3dsec.sberbank.ru/payment/rest/ для тестовой). Схема взаимодействия:
- Магазин вызывает
register.do— регистрирует заказ в системе Сбербанка, получаетorderIdиformUrl - Покупателя редиректят на
formUrl— страницу оплаты Сбербанка - После оплаты Сбербанк перенаправляет покупателя на
returnUrlи отправляет нотификацию наfailUrlили выполняет callback - Магазин вызывает
getOrderStatus.doдля финальной проверки статуса
Критически важно не полагаться только на returnUrl для подтверждения оплаты — покупатель может закрыть вкладку после оплаты, не дождавшись редиректа. Всегда нужен callback или периодический опрос getOrderStatus.do.
Техническая интеграция с 1С-Битрикс
В экосистеме Битрикс Сбербанк Онлайн реализуется как обработчик платёжной системы модуля sale. Есть несколько путей.
Готовый модуль из Маркетплейса. Официальный модуль от Сбербанка (sberbank.ecom) доступен на marketplace.1c-bitrix.ru. После установки в разделе Магазин → Настройки → Платёжные системы появляется новый тип с полями userName, password (или token для новой схемы аутентификации). Модуль регистрирует обработчик \Sale\Handlers\PaySystem\SberbankHandler и webhook-URL вида /bitrix/tools/sale_ps_result.php.
Кастомный обработчик нужен, когда: используется нестандартная схема заказов, нужна интеграция с 1С для автоматической смены статусов, или готовый модуль конфликтует с другими компонентами. Размещается в /local/php_interface/include/sale_payment/sberbank_custom/, структура стандартная для Sale PaySystem.
Ключевые параметры при регистрации заказа
Вызов register.do требует обязательных параметров:
-
orderNumber— уникальный номер в системе магазина (обычноBXORDER_{ID}) -
amount— сумма в копейках (распространённая ошибка — передавать в рублях) -
returnUrl— URL возврата после оплаты -
currency— код валюты (643 для рублей по ISO 4217)
Для работы фискализации (54-ФЗ) в запрос добавляется объект orderBundle с товарными позициями, ставками НДС и признаками предмета расчёта. Без orderBundle касса Сбербанка не сформирует чек — это частая причина претензий от налоговой к магазинам, которые «вроде бы подключили онлайн-кассу».
Обработка уведомлений и статусы
Сбербанк отправляет POST-уведомление на checkUrl при изменении статуса транзакции. В Битрикс обработчик callback должен:
- Принять POST, распарсить
mdOrderиorderNumber - Вызвать
getOrderStatus.doдля получения актуального статуса (не доверять данным из callback без верификации) - При статусе
2(оплачен) вызвать$payment->setPaid('Y')и сохранить транзакцию - Вернуть ответ
{"errorCode": 0}— иначе Сбербанк будет повторять попытки
Таблица статусов getOrderStatus.do:
| Код | Значение | Действие |
|---|---|---|
| 0 | Заказ зарегистрирован | Ожидать |
| 1 | Предавторизована сумма | Для двухстадийных платежей |
| 2 | Оплачен | Подтвердить в Битрикс |
| 3 | Авторизация отменена | Отменить заказ |
| 4 | Возврат выполнен | Обновить статус |
| 6 | Авторизация отклонена | Уведомить покупателя |
Двухстадийная оплата
Для товаров с отложенной отгрузкой (предзаказ, склад) используется двухстадийная схема: registerPreAuth.do блокирует сумму на карте, deposit.do — списывает по факту отгрузки. Сбербанк предоставляет оба метода, но двухстадийка требует отдельного подключения в договоре эквайринга. В Битрикс это реализуется через разделение обработчика на два этапа и дополнительную кнопку «Подтвердить оплату» в административной части заказа.
Реальный кейс: проблема дублирования платежей
Интернет-магазин электроники на Битрикс 21. После перехода с тестовой среды на боевую около 3% транзакций дублировались — покупатель платил один раз, в заказе фиксировались два платежа. Причина: обработчик returnUrl и callback приходили почти одновременно, оба успевали вызвать setPaid('Y'). Решение — добавить проверку $payment->isPaid() перед подтверждением и использовать блокировку через \Bitrix\Main\Application::getConnection()->lock() на время обработки транзакции.
Тестирование
Тестовая среда Сбербанка (3dsec.sberbank.ru) работает с тестовыми картами из документации. Обязательно проверьте:
- Успешную оплату с подтверждением через callback
- Отмену на странице оплаты (покупатель нажал «Назад»)
- Таймаут сессии (по умолчанию 1200 секунд — Сбербанк отменяет незавершённые заказы)
- Корректность формирования чека при включённой кассе
Сроки интеграции зависят от конфигурации: установка готового модуля без кассы — от 1 до 2 дней. Полная интеграция с 54-ФЗ, двухстадийной оплатой и подстройкой под нестандартную структуру заказов — от 3 до 7 рабочих дней.







