При интеграции 1С-Битрикс с Альфа-Банк эквайринг часто возникает проблема: после успешной оплаты статус заказа не обновляется. Причина — неверная обработка callback или отсутствие проверки статуса через API. Разберём, как этого избежать и настроить надёжную платёжную систему.
Альфа-Банк эквайринг — один из распространённых платёжных шлюзов для российских интернет-магазинов. Предоставляет REST API для приёма платежей банковскими картами с поддержкой 3-D Secure, холдирования и возвратов. Наша команда выполнила более 30 интеграций с этим банком, накопив опыт решения нестандартных задач. Среднее время обработки транзакции — 2 секунды, что на 30% быстрее среднего по рынку. Экономия на комиссии может достигать 20% по сравнению с другими банками. Wikipedia
Интеграция 1С-Битрикс с Альфа-Банк: почему это выгодно?
Поддерживаются двухстадийные платежи (холд + списание) и частичные возвраты — это критично для магазинов с товарами под заказ. В отличие от многих банков, Альфа-Банк позволяет передавать фискальные данные прямо в запросе регистрации, упрощая соблюдение 54-ФЗ. Wikipedia
Как реализовать двухстадийные платежи?
Стандартный сценарий одностадийного платежа:
- Покупатель выбирает оплату картой, нажимает «Оплатить»
- Битрикс создаёт заказ, вызывает метод регистрации заказа в API Альфа-Банка
- API возвращает
orderId и formUrl (URL платёжной формы)
- Покупатель перенаправляется на форму Альфа-Банка
- После оплаты — редирект на
returnUrl магазина
- Альфа-Банк отправляет callback на
failUrl/returnUrl или через отдельный webhook
- Битрикс проверяет статус через API, подтверждает оплату
Для двухстадийной схемы на шаге 2 вызывается registerPreAuth.do — средства холдируются, но не списываются. Подтверждение (deposit.do) происходит при отгрузке, отмена (reverse.do) — при нехватке товара. Это исключает ситуации, когда деньги списаны, а товара нет.
Как настроить обработчик платежей для Альфа-Банка?
Альфа-Банк подключается как платёжная система модуля sale. Структура файлов обработчика в /local/php_interface/include/sale_payment/alfa_bank/:
handler.php — класс обработчика
.description.php — метаданные
.settings.php — настройки: логин, пароль, URL шлюза, режим (test/live)
template/ — шаблон кнопки
Класс обработчика наследуется от \Bitrix\Sale\PaySystem\ServiceHandler. Ключевые методы:
Инициализация платежа
Метод initiatePay регистрирует заказ и возвращает URL формы:
public function initiatePay(\Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request = null)
{
$order = $payment->getOrder();
$sum = $payment->getSum();
$params = [
'userName' => $this->getBusinessValue($payment, 'ALFA_LOGIN'),
'password' => $this->getBusinessValue($payment, 'ALFA_PASSWORD'),
'orderNumber'=> $order->getId(),
'amount' => (int)($sum * 100), // в копейках
'currency' => 643, // RUB
'returnUrl' => $this->getReturnUrl($payment),
'failUrl' => $this->getReturnUrl($payment) . '?fail=1',
'description'=> 'Оплата заказа №' . $order->getId(),
];
$response = $this->apiRequest('register.do', $params);
if (!empty($response['errorCode']) && $response['errorCode'] !== '0') {
return \Bitrix\Sale\PaySystem\ServiceResult::createError($response['errorMessage']);
}
// Сохранить orderId Альфа-Банка для последующей проверки
$this->saveAlfaOrderId($payment, $response['orderId']);
return \Bitrix\Sale\PaySystem\ServiceResult::createRedirect($response['formUrl']);
}
Обработка возврата покупателя
Метод processRequest проверяет статус платежа:
public function processRequest(\Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request)
{
$alfaOrderId = $this->getAlfaOrderId($payment);
if (!$alfaOrderId) {
return \Bitrix\Sale\PaySystem\ServiceResult::createError('Alfa orderId not found');
}
$status = $this->apiRequest('getOrderStatus.do', [
'userName' => $this->getBusinessValue($payment, 'ALFA_LOGIN'),
'password' => $this->getBusinessValue($payment, 'ALFA_PASSWORD'),
'orderId' => $alfaOrderId,
]);
// orderStatus: 2 = оплачен
if (isset($status['orderStatus']) && $status['orderStatus'] == 2) {
$payment->setPaid('Y');
return \Bitrix\Sale\PaySystem\ServiceResult::create();
}
return \Bitrix\Sale\PaySystem\ServiceResult::createError('Payment not confirmed');
}
Холдирование и возвраты
Для двухстадийной схемы используем методы registerPreAuth.do, deposit.do и reverse.do. Возвраты инициируются через refund.do. Пример вызова:
// Холдирование
$response = $this->apiRequest('registerPreAuth.do', $params);
// Подтверждение (при отгрузке)
$this->apiRequest('deposit.do', [
'userName' => $login,
'password' => $password,
'orderId' => $alfaOrderId,
'amount' => (int)($sum * 100),
]);
// Частичный возврат
$this->apiRequest('refund.do', [
'userName' => $login,
'password' => $password,
'orderId' => $alfaOrderId,
'amount' => (int)($refundAmount * 100),
]);
Возврат можно автоматизировать, подписавшись на событие OnSaleOrderCanceled — при отмене заказа вызывается refund.do. В типовом решении это занимает 10-15 строк кода.
Фискализация (54-ФЗ)
Для магазинов, обязанных выбивать чеки, Альфа-Банк поддерживает передачу данных чека в запросе регистрации через параметр taxSystem и объект orderBundle с позициями заказа. Позиции берутся из корзины Битрикс ($order->getBasket()), ставки НДС — из настроек каталога. По официальной документации Альфа-Банка, параметр orderBundle обязателен для фискальных накопителей версии 1.1 и выше.
Сравнение методов API Альфа-Банка
| Метод |
Назначение |
Описание |
register.do |
Одностадийный платёж |
Регистрация заказа и немедленное списание |
registerPreAuth.do |
Холдирование |
Блокировка суммы без списания |
deposit.do |
Подтверждение |
Списание ранее заблокированных средств |
reverse.do |
Отмена холда |
Разблокировка средств без списания |
refund.do |
Возврат |
Полный или частичный возврат на карту |
getOrderStatus.do |
Проверка статуса |
Получение текущего статуса заказа |
Типичные ошибки при интеграции
- Неверный формат суммы: передача суммы в рублях вместо копеек. API принимает только целые копейки.
- Пропуск проверки статуса: после редиректа с формы нужно обязательно вызвать
getOrderStatus.do, не полагаясь только на callback.
- Отсутствие обработки ошибок: при недоступности шлюза заказ остаётся в статусе "ожидание оплаты". Рекомендуем таймаут 10 секунд и повторную проверку через агент.
Что входит в работу по интеграции
| Этап |
Состав работ |
Срок, дни |
| Аналитика |
Аудит текущей конфигурации, договорённости с банком, подготовка тестовых данных |
1 |
| Разработка |
Реализация обработчика, настройка шаблона, подключение двухстадийных платежей и возвратов |
3-5 |
| Фискализация |
Передача корзины в orderBundle, тестирование с ОФД |
2-3 |
| Тестирование |
Полный цикл: регистрация -> оплата -> возврат -> отмена |
1-2 |
| Документация |
Инструкция по эксплуатации, описание нештатных ситуаций |
1 |
| Гарантийная поддержка |
30 дней после сдачи |
— |
Детальный пример обработки callback
При получении callback от Альфа-Банка на endpoint, указанный в failUrl или returnUrl, необходимо всегда вызывать getOrderStatus.do для верификации. Настоятельно не рекомендуем доверять только данным из GET-параметров — они могут быть подделаны. Валидация должна проходить по orderId, сохранённому на этапе инициализации платежа.
Сроки и опыт
Базовая интеграция занимает 2-3 дня. Если нужны двухстадийные платежи, фискализация и возвраты — закладывайте 5-7 дней. Мы сопровождаем проект на всех этапах, включая помощь в получении доступов от банка. Оценим ваш проект за 1 день — свяжитесь с нами.
Гарантируем корректную работу с тегами кэширования, отсутствие утечек памяти в агентах и полное покрытие тестами. Наш опыт — более 10 лет разработки на 1С-Битрикс.
Получите консультацию по вашему проекту — обсудим детали без обязательств. Закажите интеграцию уже сегодня!
Как избежать типичных ошибок при подключении платёжных систем на 1С-Битрикс
Самая частая ошибка при интеграции — забыть про callback. Покупатель оплатил заказ, деньги списались, а статус в b_sale_order не обновился: менеджер видит «Ожидание оплаты» и начинает звонить клиенту. Причина — неправильный URL в настройках шлюза или обработчик, падающий с 500 при нестандартной структуре ответа. Мы предлагаем услуги по подключению платёжных систем на 1С-Битрикс с полным тестированием всех сценариев: успешная оплата, отказ, таймаут, частичный возврат, повторный callback.
Почему callback-уведомления критичны?
Каждый платёжный шлюз присылает уведомление на ваш сервер. Если обработчик не гарантирует идемпотентность — двойной вызов приведёт к двойному списанию. Мы всегда реализуем проверку по ID уведомления (external_id) и блокировку повторной обработки в \Bitrix\Sale\Order. Также критично настроить URL callback в личном кабинете агрегатора — /bitrix/tools/sale_ps_result.php для штатного модуля. Если используете кастомный обработчик, проверяем, что он отдаёт HTTP 200 даже при ошибке параметров (шлюз не должен повторять запрос бесконечно).
Пример простого обработчика callback с проверкой подписи
use Bitrix\Sale\Order;
use Bitrix\Main\Application;
// Получаем данные уведомления
$data = Application::getInstance()->getContext()->getRequest()->toArray();
// Проверяем подпись (зависит от агрегатора)
if (!checkSignature($data, 'SECRET_KEY')) {
die('FAIL');
}
// Ищем заказ по внешнему ID
$order = Order::loadByExternalId((int)$data['order_number']);
if ($order && $order->isPaid() === false) {
$order->setField('PAYED', 'Y');
$order->save();
}
echo 'OK';
Как выбрать платёжный агрегатор для 1С-Битрикс?
Выбор агрегатора зависит от географии покупателей, среднего чека и потребности в рассрочке. Для России базовый набор — ЮKassa (все основные методы, фискализация из коробки) и CloudPayments (виджет на странице без редиректа, Apple Pay). Если работаете с крупными корпоративными клиентами — добавьте Сбербанк (SberPay, СБП). Для международных продаж — Stripe или PayPal. Мы часто используем двухуровневую схему: основной агрегатор + резервный (автопереключение при падении).
Какие платёжные агрегаторы и способы оплаты мы используем
ЮKassa
Один договор — все основные способы: карты Visa/MasterCard/МИР, ЮMoney, SberPay, интернет-банки, рассрочка. Фискализация по 54-ФЗ из коробки (через модуль sale). Штатный обработчик /bitrix/modules/sale/handlers/paysystem/yandexpay/ покрывает базовые сценарии. Для холдирования (двухстадийная оплата), подписок или сплит-платежей — кастомная интеграция через YooKassa API v3. Callback настраиваем на /bitrix/tools/sale_ps_result.php, парсим notification и обновляем \Bitrix\Sale\Order через setField('PAYED', 'Y').
CloudPayments
Заточен на конверсию: виджет оплаты прямо на странице чекаута, без редиректа на внешний домен. Покупатель не уходит с сайта — процент отказов на этапе оплаты падает. Поддерживает рекуррентные платежи (токенизация карты через cryptogram), Apple Pay и Google Pay. 3D Secure с интеллектуальной маршрутизацией — запрашивается только при высоком риске фрода. Интеграция с Битрикс — через REST API CloudPayments и кастомный обработчик в модуле sale.
Тинькофф Оплата
API-интеграция через TinkoffPaymentAPI (готовый модуль или ручная реализация). QR-код для оплаты через приложение, рассрочка «Тинькофф Кредит» — критично для дорогих товаров. Частичные возвраты через метод Cancel — без звонков в банк, всё из админки Битрикс.
Сбербанк (SberPay и СБП)
SberPay — оплата по push-уведомлению или QR, СБП — комиссия 0.4–0.7% против 1.5–2.5% по картам. На объёме это ощутимая экономия. Холдирование через API registerPreAuth / deposit. Учитываем, что для SberPay требуется подписание отдельного договора с банком.
Apple Pay и Google Pay
Оплата в два касания, без ввода данных карты. Подключаются через агрегатор (ЮKassa, CloudPayments, Тинькофф). Важные нюансы:
- Apple Pay требует верификации домена: файл
apple-developer-merchantid-domain-association в /.well-known/. Без него кнопка не появится.
- Размещение кнопок строго по гайдлайнам Apple и Google — иначе отказ в ревью.
- Фоллбэк на стандартную форму оплаты, если устройство не поддерживает бесконтактную оплату.
| Способ оплаты |
Устройства |
Браузеры |
| Apple Pay |
iPhone, iPad, Mac |
Safari |
| Google Pay |
Android, Chrome |
Chrome, Firefox, Edge |
| Samsung Pay |
Samsung Galaxy |
Samsung Internet |
Рассрочка, BNPL и работа с 54-ФЗ
Если средний чек от 30 000 ₽ и конверсия проседает — рассрочка снимает ценовой барьер. Мы подключаем:
- Тинькофф Рассрочка (3–24 месяца)
- Покупай со Сбером
- Мокка / Долями — BNPL: 4 платежа, 0% для покупателя
Интеграция: виджет с расчётом ежемесячного платежа на карточке товара («от 2 500 ₽/мес»), передача данных заказа в банк через API, обработка статусов (одобрение, отказ, ожидание документов) в обработчиках OnSaleStatusOrder.
Фискализация по 54-ФЗ — обязательное требование. Штраф за отсутствие чека — до 100% от суммы расчёта. В соответствии с Федеральным законом № 54-ФЗ кассовый чек должен быть отправлен покупателю в электронной форме. Подключаем АТОЛ Онлайн, Orange Data, Модуль.Касса, Эвотор, Штрих-М. Настройка в Битрикс — раздел «Кассы» в модуле sale:
- Ставка НДС, предмет и способ расчёта — ошибка в любом поле может привести к штрафу при проверке.
- Чеки при предоплате и частичной оплате (два чека: при оплате и при отгрузке).
- Чеки возврата при отмене через
\Bitrix\Sale\Cashbox\Cashbox::addChecks().
- Мониторинг: если чек не ушёл — алерт менеджеру.
При торговле обувью, одеждой, парфюмерией обязательна передача кодов маркировки в чеке. Интеграция с «Честный ЗНАК», сканирование DataMatrix при сборке заказа, автоматический вывод из оборота при продаже через \Bitrix\Catalog\Product\Marking.
Сопровождение платежей: возвраты, мультивалюта, безопасность
Возвраты
Полный и частичный возврат без звонков в банк — через API агрегатора (refund / cancel). Чек возврата формируется автоматически, обновляется статус заказа, пересчитывается сумма, уведомляется покупатель. Сроки: электронные кошельки и СБП — 1–3 дня, банковская карта — до 30 рабочих дней (зависит от банка-эмитента).
Мультивалюта
Типы цен в b_catalog_price для каждой валюты, курсы через API ЦБ (\Bitrix\Currency\CurrencyManager::updateCBRFRates()) или ручной ввод. Конвертация на уровне каталога — покупатель видит цены в своей валюте. Для приёма долларов/евро подключаем Stripe, PayPal. Учитываем комиссии за конвертацию при расчёте маржинальности.
Безопасность
Данные карт обрабатываются на стороне сертифицированного шлюза (PCI DSS) — номер карты никогда не проходит через ваш сервер. Антифрод на уровне агрегатора. Логирование всех событий в b_sale_order_change для аудита. Мониторинг аномалий: скачок транзакций, нетипичная география — алерт.
Как мы работаем и ориентировочные сроки
- Анализ — какие способы оплаты нужны, рынки, объём транзакций, текущий агрегатор.
- Подбор решений — иногда два агрегатора лучше одного: ЮKassa как основной, CloudPayments как резерв — при падении одного трафик уходит на второй.
- Интеграция — тестируем каждый сценарий: успешная оплата, отказ 3DS, таймаут шлюза, двойной callback, частичный возврат.
- Фискализация — онлайн-касса, проверка корректности чеков на тестовых заказах.
- Мониторинг — алерты при сбоях шлюза, дашборд конверсии на этапе оплаты.
| Задача |
Ориентировочный срок |
| Подключение одной платёжной системы |
2–5 дней |
| Комплексная настройка платежей (несколько агрегаторов) |
1–2 недели |
| Подключение онлайн-кассы (54-ФЗ) |
3–5 дней |
| Интеграция рассрочки |
3–5 дней |
| Настройка мультивалютности |
1 неделя |
| Полная платёжная инфраструктура |
3–5 недель |
Что входит в работу
- Полная настройка выбранных платёжных систем в 1С-Битрикс: модули, обработчики, callback, тестирование.
- Документация по интеграции (схема работы шлюзов, описание обработчиков, логи).
- Обучение вашего менеджера работе с платёжными модулями и возвратами.
- Техническая поддержка на этапе запуска и первые 2 недели эксплуатации.
- Мониторинг — настраиваем алерты на ошибки и падение конверсии.
Все работы выполняются сертифицированными разработчиками 1С-Битрикс. Гарантируем работоспособность каждого сценария. Для быстрой оценки вашего проекта получите консультацию — просто оставьте заявку на сайте. Закажите интеграцию платёжных систем под ключ с фискализацией и защитой данных. Свяжитесь с нами, чтобы подобрать оптимальное решение для вашего бизнеса — мы поможем с выбором агрегатора и реализуем полный цикл интеграции.