Інтеграція 1С-Bitrix з платіжною системою 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 дня |







