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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із платіжною системою Webpay (Білорусь)
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

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