Интеграция 1С-Битрикс с интернет-эквайрингом БелВЭБ (Беларусь)

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с интернет-эквайрингом БелВЭБ (Беларусь)
Средняя
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    989

Интеграция 1С-Битрикс с интернет-эквайрингом БелВЭБ (Беларусь)

БелВЭБ (Белорусский банк развития и реконструкции) предоставляет интернет-эквайринг для белорусских интернет-магазинов. Банк ориентирован на корпоративный сегмент, и его платёжный шлюз имеет ряд технических особенностей, которые отличают его от более распространённых решений. Интеграция с 1С-Битрикс требует разработки кастомного обработчика платёжной системы — готовых модулей на Маркетплейсе практически нет.

Технические параметры шлюза

БелВЭБ предоставляет платёжный шлюз на базе технологии 3DS v2 (EMV 3-D Secure). API — REST/JSON, аутентификация через Bearer-токен, который получается отдельным запросом к /oauth/token.

Основные endpoint'ы (тестовая среда: test-api.belveb.by, боевая: api.belveb.by):

POST /v1/payments          — создание платежа
GET  /v1/payments/{id}     — статус платежа
POST /v1/payments/{id}/capture   — подтверждение (двухстадийный)
POST /v1/payments/{id}/cancel    — отмена
POST /v1/refunds           — возврат

Получение токена доступа

class BelvebAuth
{
    private const TOKEN_URL = 'https://api.belveb.by/oauth/token';

    public function getToken(string $clientId, string $clientSecret): string
    {
        $ch = curl_init(self::TOKEN_URL);
        curl_setopt_array($ch, [
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => http_build_query([
                'grant_type'    => 'client_credentials',
                'client_id'     => $clientId,
                'client_secret' => $clientSecret,
                'scope'         => 'payments',
            ]),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER     => ['Content-Type: application/x-www-form-urlencoded'],
        ]);
        $result = json_decode(curl_exec($ch), true);
        curl_close($ch);

        return $result['access_token'] ?? throw new \RuntimeException('Token request failed');
    }
}

Токен имеет ограниченный TTL (обычно 1 час). Кешировать его в \Bitrix\Main\Data\Cache с TTL минус 60 секунд — иначе токен может протухнуть в середине обработки.

Создание платежа

public function createPayment(array $data, string $token): array
{
    $payload = [
        'amount'      => [
            'value'    => number_format($data['amount'], 2, '.', ''),
            'currency' => 'BYN',
        ],
        'description' => 'Заказ №' . $data['orderNumber'],
        'orderId'     => $data['orderNumber'],
        'returnUrl'   => $data['returnUrl'],
        'cancelUrl'   => $data['cancelUrl'],
        'notifyUrl'   => $data['notifyUrl'],
        'capture'     => true,
        'customer'    => [
            'email' => $data['customerEmail'],
        ],
    ];

    $ch = curl_init('https://api.belveb.by/v1/payments');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => json_encode($payload),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $token,
            'X-Idempotency-Key: ' . $data['idempotencyKey'],
        ],
    ]);

    $result = json_decode(curl_exec($ch), true);
    curl_close($ch);
    return $result;
}

Поле X-Idempotency-Key — строка UUID, уникальная на каждую попытку создания платежа. Обеспечивает идемпотентность: повторный запрос с тем же ключом вернёт тот же платёж без его дублирования.

Webhook-уведомления

БелВЭБ подписывает уведомления HMAC-SHA256. Ключ подписи выдаётся при подключении.

public function verifyWebhook(string $body, string $signature, string $secret): bool
{
    $computed = base64_encode(hash_hmac('sha256', $body, $secret, true));
    return hash_equals($computed, $signature);
}

// В обработчике:
$body = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';

if (!$gateway->verifyWebhook($body, $signature, $webhookSecret)) {
    http_response_code(401);
    exit;
}

$event = json_decode($body, true);

// Обрабатываем только succeeded
if ($event['type'] === 'payment.succeeded') {
    $payment->setPaid('Y');
    $payment->save();
}

Статусы платежа:

Статус Значение
pending Создан, ожидает оплаты
processing Обрабатывается
succeeded Оплачен успешно
failed Отклонён
cancelled Отменён
refunded Возвращён

Специфика для Беларуси

БелВЭБ поддерживает оплату картами VISA, Mastercard и Белкарт. Для карт Белкарт 3DS-верификация работает через национальную систему аутентификации — важно тестировать именно этот сценарий отдельно.

Валюта — BYN, сумма передаётся в рублях с двумя знаками после запятой (не в копейках, в отличие от некоторых других шлюзов). Это частый источник ошибок при переносе кода с других интеграций.

Сроки

Задача Срок
Разработка обработчика + авторизация OAuth 2–3 дня
Тестирование полного цикла (оплата, возврат, webhook) 1 день
Боевое подключение 1 день