Інтеграція 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 години.







