Интеграция 1С-Битрикс с платёжной системой Webpay (Беларусь)
Webpay — белорусский платёжный шлюз, работающий через Приорбанк. Принимает карты Visa, MasterCard, БЕЛКАРТ. Интеграция реализуется через перенаправление на защищённую форму Webpay с подписанными параметрами.
Принцип работы
Магазин формирует POST-запрос к форме Webpay со всеми параметрами заказа и подписью. Покупатель оплачивает на стороне банка. Webpay уведомляет магазин через POST на notify_url и редиректит покупателя.
Тестовая среда: https://trial.webpay.by/
Боевая среда: https://payment.webpay.by/
Параметры запроса и подпись
$wsb_storeid = $this->getBusinessValue($payment, 'WEBPAY_STORE_ID');
$wsb_seed = md5(microtime() . rand()); // случайная соль для каждого запроса
$wsb_currency_id = 'BYR'; // или 'BYN', 'USD', 'EUR' — уточнять у банка
$wsb_order_num = $payment->getOrder()->getId();
$wsb_total = number_format($payment->getSum(), 2, '.', '');
$wsb_test = $isTest ? 1 : 0;
// Подпись: MD5 от конкатенации параметров
$seedBody = $wsb_seed
. $wsb_storeid
. $wsb_order_num
. $wsb_test
. $wsb_currency_id
. $wsb_total
. $secretKey;
$wsb_signature = md5($seedBody);
// Форма для отправки POST
?>
<form method="POST" action="https://payment.webpay.by/" id="webpay-form">
<input type="hidden" name="*scart" value="">
<input type="hidden" name="wsb_version" value="2">
<input type="hidden" name="wsb_storeid" value="<?= $wsb_storeid ?>">
<input type="hidden" name="wsb_order_num" value="<?= $wsb_order_num ?>">
<input type="hidden" name="wsb_currency_id" value="<?= $wsb_currency_id ?>">
<input type="hidden" name="wsb_seed" value="<?= $wsb_seed ?>">
<input type="hidden" name="wsb_signature" value="<?= $wsb_signature ?>">
<input type="hidden" name="wsb_total" value="<?= $wsb_total ?>">
<input type="hidden" name="wsb_test" value="<?= $wsb_test ?>">
<input type="hidden" name="wsb_notify_url" value="<?= $notifyUrl ?>">
<input type="hidden" name="wsb_return_url" value="<?= $returnUrl ?>">
<input type="hidden" name="wsb_cancel_return_url" value="<?= $cancelUrl ?>">
</form>
<script>document.getElementById('webpay-form').submit();</script>
Позиции заказа
Webpay принимает позиции заказа (необязательно, но рекомендуется для корректного отображения в ЛК):
// Добавляем позиции через input name="wsb_invoice_item_name[N]"
$basketItems = $payment->getOrder()->getBasket();
$i = 1;
foreach ($basketItems as $item) {
// wsb_invoice_item_name[1], wsb_invoice_item_count[1], wsb_invoice_item_price[1]
echo '<input type="hidden" name="wsb_invoice_item_name[' . $i . ']" value="' . htmlspecialchars($item->getField('NAME')) . '">';
echo '<input type="hidden" name="wsb_invoice_item_count[' . $i . ']" value="' . $item->getQuantity() . '">';
echo '<input type="hidden" name="wsb_invoice_item_price[' . $i . ']" value="' . number_format($item->getPrice(), 2, '.', '') . '">';
$i++;
}
Обработка notify_url
Webpay отправляет POST с результатом оплаты:
$orderNum = $_POST['wsb_order_num'];
$transactionId = $_POST['wsb_transaction_id'];
$paymentStatus = $_POST['wsb_payment_type']; // 'success' или 'failed'
// Проверка подписи от Webpay
$receivedSig = $_POST['wsb_signature'];
$expectedSig = md5(
$_POST['wsb_transaction_id']
. $_POST['wsb_order_num']
. $_POST['wsb_test']
. $_POST['wsb_currency_id']
. $_POST['wsb_total']
. $secretKey
);
if (strtolower($receivedSig) !== strtolower($expectedSig)) {
http_response_code(400);
exit('bad signature');
}
if ($paymentStatus === 'success') {
$order = \Bitrix\Sale\Order::loadByAccountNumber($orderNum);
// Подтвердить оплату: $payment->setPaid('Y'), $order->save()
}
Специфика белорусских платежей
Webpay исторически использует BYR (белорусских рублей в старом формате) и BYN (деноминированные рубли с 2016 года). Уточняйте с банком, какой код валюты использует ваш договор. BYN — актуальный, BYR — может встречаться в старых интеграциях.
Webpay не поддерживает автоматическую фискализацию через API — чеки нужно формировать самостоятельно через кассовое ПО или интегрировать отдельно.
Тестирование
В тестовом режиме (wsb_test=1) любые данные карты принимаются. Тестовая карта: 4200000000000000. Уведомления в тестовом режиме приходят с параметром wsb_test=1 — проверяйте обработчик для обоих режимов.
Сроки разработки
| Задача | Срок |
|---|---|
| Формирование формы + обработка notify_url | 1–2 дня |
| Тестирование и отладка | 0.5 дня |







