Интеграция 1С-Битрикс с платежной системой Webpay (Беларусь)

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с платежной системой Webpay (Беларусь)
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 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 дня