Alfa-Bank Belarus Integration with 1C-Bitrix: Turnkey

When integrating Alfa-Bank Belarus internet acquiring with a 1C-Bitrix website, we often encounter the same mistake: developers use the Russian Alfa-Bank API, but the Belarusian bank uses a different processing system — OpenWay. The result is weeks of negotiations and code rewrites, costing on avera

Our competencies:

Frequently Asked Questions

When integrating Alfa-Bank Belarus internet acquiring with a 1C-Bitrix website, we often encounter the same mistake: developers use the Russian Alfa-Bank API, but the Belarusian bank uses a different processing system — OpenWay. The result is weeks of negotiations and code rewrites, costing on average $3000 in lost time. We have already been through this and are ready to implement a turnkey integration in 3–5 days. Typical integration cost starts at $1500 and is recouped within two months through reduced manual reconciliation, saving you $1000 compared to in-house development. We will assess your project for free. According to Wikipedia: Internet acquiring, this approach is typical for banks with their own payment infrastructure.

Why integration with Alfa-Bank Belarus requires a separate approach

The Belarusian branch's API is built on the OpenWay processing system (ecom.alfa-bank.by). The workflow is a standard redirect-flow: the store registers an order, receives a formUrl, the buyer goes to the bank's page, and after payment the bank redirects to returnUrl and sends a callback. Authentication uses userName/password in the request parameters (not in the header), format form-urlencoded or JSON. This differs from the Russian bank's API, so a pre-built library will not work.

Problems we solve

1. Authentication and request structure. Unlike RESTful standards, Alfa-Bank Belarus requires credentials in the request body. Many handlers incorrectly place the Authorization header, leading to a 401 error. We correctly implement the userName and password parameters. This reduces debugging time by 70%.

2. Status verification. Some developers trust the callback and update the order status immediately. However, the callback may be delayed or arrive with incorrect parameters. We always call getOrderStatus.do for confirmation — this is mandatory. In practice, this reduces the risk of unprocessed payments by 95%. Our dual verification system is 5 times more reliable than relying on callbacks alone, increasing payment confirmation rate from 95% to 99.9%.

3. Currency conversion. The amount is passed in Belarusian kopecks (integer). If your site uses a different currency, conversion must be done before creating the payment. In one project, we discovered the client was passing the amount in rubles — we had to rewrite the logic. This oversight can cause 100% payment failure.

How we implement a turnkey integration

We use the stack: PHP 8.1, Bitrix D7, ORM, tagged caching. The handler extends \Bitrix\Sale\PaySystem\ServiceHandler and supports all payment types. Example order registration:

class AlfaBankBelarusGateway { private const API_URL = 'https://ecom.alfa-bank.by/payment/rest/'; private string $userName; private string $password; public function registerOrder(array $orderData): array { $params = [ 'userName' => $this->userName, 'password' => $this->password, 'orderNumber' => $orderData['number'], 'amount' => (int)($orderData['amount'] * 100), 'currency' => 933, 'returnUrl' => $orderData['returnUrl'], 'failUrl' => $orderData['failUrl'], 'description' => 'Заказ №' . $orderData['number'], 'language' => 'ru', 'pageView' => 'DESKTOP', ]; $response = $this->request('register.do', $params); if (!empty($response['errorCode']) && $response['errorCode'] !== '0') { throw new \RuntimeException( 'Ошибка регистрации: ' . ($response['errorMessage'] ?? 'неизвестная ошибка') ); } return $response; } private function request(string $method, array $params): array { $ch = curl_init(self::API_URL . $method); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => 30, ]); $result = curl_exec($ch); curl_close($ch); return json_decode($result, true); } public function getOrderStatus(string $orderId): array { return $this->request('getOrderStatus.do', [ 'userName' => $this->userName, 'password' => $this->password, 'orderId' => $orderId, 'language' => 'ru', ]); } } 

Case study: a client — an online store with a turnover of over 10,000 orders per month. We implemented the integration in 4 days. After launch, the callback arrived with a delay of up to 10 seconds, leading to manual processing. We added a Bitrix agent that checks unpaid orders every 30 seconds via getOrderStatus. Now payments are confirmed instantly. Per the bank's documentation, a repeat payment attempt with the same orderNumber is blocked, so we generate the number as BX{ID}. The client reported a 15% reduction in abandoned carts due to smoother payment flow, which translates to an estimated $5000 in additional monthly revenue.

Avoiding payment loss due to callback delays

The main recommendation is not to rely solely on the callback. Even if the bank sends a notification, it may be delayed or lost. We implement double control: callback processing + background status polling via agents. This ensures that no payment remains unconfirmed. Our method reduces payment processing errors by 98% compared to manual handling. Comparison: our approach processes 99.9% of payments on time, while using only the callback drops this to 95%.

What is included in the work — deliverables

  • Consultation and requirements gathering.
  • Development of a custom handler considering the OpenWay API.
  • Callback and refund setup.
  • Testing on the bank's test environment (ecom-test.alfa-bank.by).
  • Detailed operational documentation (including troubleshooting guide).
  • Access to test environment and API credentials configuration.
  • Staff training (up to 2 hours).
  • Code warranty — 6 months.
  • Monitoring and alerting setup after launch.

Work process

  1. Analysis — we study your site, product catalog, current payment system.
  2. Design — we prepare the handler architecture, coordinate the scheme with the bank.
  3. Implementation — we write code, connect the bank's test data.
  4. Testing — we run a full cycle: payment, callback, refund, duplicate check.
  5. Deployment — we roll out to the production server, set up monitoring.
  6. Support — we monitor operation for 14 days after launch.

Estimated timelines

Stage Duration
Handler development 2–3 days
Testing 1 day
Production connection and acceptance 1 day

On average, integration takes 3–5 working days for a typical architecture. The timeline may increase if site template modifications or bank approvals are needed. But our process is 3 times faster than average industry standards.

Common integration mistakes
Mistake Consequence
Passing amount in rubles instead of kopecks Incorrect payment amount, failure
Using wrong currency code (not 933) Order registration error
Skipping status verification after callback Payment may remain unconfirmed
Not handling duplicates Repeated payment blocked by bank

We guarantee stable integration, based on experience with 30+ completed projects. Contact us for an assessment of your task. Get a free consultation and a demo of the handler.