Интеграция 1С-Битрикс с БелВЭБ — задача, с которой сталкиваются интернет-магазины в Беларуси, обслуживающие карты МИР, Visa, Mastercard и Белкарт. Ни Маркетплейс, ни стандартные обработчики не подходят — нужна разработка с нуля. Мы создаём обработчик с OAuth-авторизацией, идемпотентностью, верификацией webhook и полным циклом 3DS v2. Сроки от 3 дней, экономия времени на интеграции до 60%. Оценим ваш проект бесплатно — свяжитесь с нами сегодня.
Почему БелВЭБ требует кастомной интеграции?
В отличие от Альфа-Банка или ПриватБанка, у БелВЭБ нет готового модуля для 1С-Битрикс. Платежный шлюз предоставляет только REST API с Bearer-токеном и подписью HMAC. Это даёт гибкость, но требует глубокой кастомизации. Например, двухстадийная оплата (capture) реализуется отдельным запросом, а не флагом — в готовых решениях такой логики нет.
Другая сложность — 3-D Secure v2 (EMV 3DS): шлюз возвращает редирект на страницу аутентификации банка. Обработчик должен перехватить этот редирект, передать клиенту и обработать callback. Для Белкарт работает национальная система верификации — её нужно тестировать отдельно. На практике это добавляет 1-2 дня к срокам, если не учитывать заранее.
Технические параметры шлюза
БелВЭБ предоставляет платёжный шлюз на базе технологии 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, уникальная на каждую попытку создания платежа. Обеспечивает идемпотентность: повторный запрос с тем же ключом вернёт тот же платёж без его дублирования. Это критично при сетевых сбоях.
Как обрабатываются вебхуки?
БелВЭБ подписывает уведомления 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, идемпотентностью и HMAC-верификацией;
- интеграция с кассой Битрикса (встроенная логика заказов);
- реализация 3DS-редиректа и обработка callback;
- настройка тестовой среды и кеширование токена;
- тестирование: создание платежа, возврат, частичный возврат, отмена;
- настройка логгирования ошибок и уведомлений;
- передача документации и доступов, обучение вашего администратора.
Сроки ориентировочно
| Задача | Срок |
|---|---|
| Разработка обработчика + авторизация OAuth | 2–3 дня |
| Тестирование полного цикла (оплата, возврат, webhook) | 1 день |
| Боевое подключение | 1 день |
Опыт нашей команды — 10+ лет интеграций с 1С-Битрикс, более 50 проектов по платёжным шлюзам. Закажите интеграцию — получите готовый модуль, который работает без сюрпризов.
Пример настроек тестовой среды
Для тестирования используйте test-api.belveb.by. Убедитесь, что в настройках платёжной системы Битрикса указан корректный URL. Кеш токена в тестовой среде лучше отключить, чтобы видеть каждый запрос. Всегда проверяйте подпись webhook даже в тесте — это обязательное требование безопасности.
Как выполнить частичный возврат?
public function refundPartially(string $orderId, float $amount): array
{
$payload = [
'orderId' => $orderId,
'amount' => [
'value' => number_format($amount, 2, '.', ''),
'currency' => 'BYN',
],
];
$ch = curl_init('https://api.belveb.by/v1/refunds');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $this->getToken(),
],
]);
return json_decode(curl_exec($ch), true);
}
Частичные возвраты работают через тот же endpoint, но с указанием суммы меньше полной. Ограничение: нельзя вернуть больше, чем было фактически захвачено (captured).
Пошаговая инструкция по интеграции (для разработчиков)
- Получите client_id и client_secret в личном кабинете БелВЭБ.
- Реализуйте класс
BelvebAuthдля получения и кеширования токена. - Создайте метод создания платежа с обязательным полем
X-Idempotency-Key. - Настройте обработку webhook с проверкой подписи HMAC.
- Реализуйте 3DS-редирект: перехватите ответ шлюза с полем
redirectUrl, перенаправьте клиента. - После успешного колбэка подтвердите платёж через capture (если двухстадийный).
- Протестируйте все сценарии: успех, отказ, возврат, частичный возврат.
Свяжитесь с нами для получения консультации по архитектуре интеграции. Мы пришлём готовый пример обработчика и смету за 4 часа.







