При інтеграції 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С-Бітрікс.
Отримайте консультацію по вашому проекту — обговоримо деталі без зобов'язань. Замовте інтеграцію вже сьогодні!







