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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із платіжною системою CloudPayments
Середня
~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 з платіжною системою CloudPayments

CloudPayments — російський платіжний шлюз з віджетом оплати на JS, який вбудовується в сторінку без редиректу. Покупець вводить дані карти прямо на сторінці магазину — конверсія вища, ніж при редиректу. API заснований на REST, підтримує рекурентні платежі, 3-D Secure, холдирування.

Архітектура інтеграції

CloudPayments надає два варіанти оплати:

Checkout Widget — JS-віджет, форма відкривається у popup або inline на сторінці магазину. Дані карти йдуть прямо в CloudPayments (PCI DSS), на сервер магазину — тільки токен транзакції.

API без редиректу — магазин збирає дані карти сам і передає в API. Потребує сертифікації PCI DSS — рідко використовується.

Стандартний підхід для Bitrix — Checkout Widget.

Підключення віджету

На сторінці оформлення замовлення:

<script src="https://widget.cloudpayments.ru/bundles/cloudpayments.js"></script>

<script>
var widget = new cp.CloudPayments({language: 'ru-RU'});
widget.pay('auth',  // 'auth' — двостадійна, 'charge' — одностадійна
    {
        publicId: 'pk_XXXXX',
        description: 'Оплата замовлення #<?= $orderId ?>',
        amount: <?= $amount ?>,
        currency: 'RUB',
        invoiceId: '<?= $orderId ?>',
        accountId: '<?= $userId ?>',
        skin: 'mini',
        data: {
            orderId: '<?= $orderId ?>',
            csrfToken: '<?= bitrix_sessid() ?>',
        }
    },
    {
        onSuccess: function(options) {
            // Платіж пройшов — сповістити сервер
            fetch('/bitrix/tools/sale_ps_result.php', {
                method: 'POST',
                body: JSON.stringify({ orderId: options.invoiceId }),
            });
        },
        onFail: function(reason, options) {
            console.error('Payment failed:', reason);
        }
    }
);
</script>

У Bitrix віджет підключається в шаблоні компонента bitrix:sale.order.checkout або у result_modifier.php.

Серверна обробка: check та pay сповіщення

CloudPayments відправляє два сповіщення на сервер:

Check — перед списанням. Магазин повинен відповісти {"code":0} якщо замовлення існує, або ненульовим кодом для скасування.

Pay — після успішного списання. Підтвердження оплати.

Обробник сповіщень (/local/payment/cloudpayments/callback.php):

$data = json_decode(file_get_contents('php://input'), true);

// Перевірка HMAC підпису
$hmac = base64_encode(hash_hmac('sha256', file_get_contents('php://input'), $apiSecret, true));
if ($hmac !== $_SERVER['HTTP_CONTENT_HMAC']) {
    http_response_code(403);
    exit;
}

$invoiceId = $data['InvoiceId'];  // наш orderId
$status    = $data['Status'];     // 'Completed', 'Cancelled' тощо

if ($status === 'Completed') {
    // Знайти платіж по orderId, підтвердити
    $order = \Bitrix\Sale\Order::loadByAccountNumber($invoiceId);
    $paymentCollection = $order->getPaymentCollection();
    foreach ($paymentCollection as $payment) {
        if ($payment->getPaySystem()->getField('CODE') === 'cloudpayments') {
            $payment->setPaid('Y');
        }
    }
    $order->save();
}

header('Content-Type: application/json');
echo json_encode(['code' => 0]);

Перевірка підпису обов'язкова. CloudPayments передає HMAC SHA-256 у заголовку Content-HMAC. Без перевірки зловмисник може підтвердити оплату фальшивим POST.

Рекурентні платежі

CloudPayments підтримує підписки: при першому платежі створюється токен карти (Token), подальші списання робляться без участі покупця:

// Перший платіж із збереженням токену — через віджет з параметром createReceipt
// Подальші платежі через API
$response = $this->apiRequest('payments/tokens/charge', [
    'Amount'      => 999,
    'Currency'    => 'RUB',
    'InvoiceId'   => $subscriptionId,
    'AccountId'   => $userId,
    'Token'       => $savedToken,
    'Description' => 'Підписка за лютий',
]);

Фіскалізація

CloudPayments інтегрується з online-касами через параметри cloudPayments.CustomerReceipt у запиті віджету. Ви передаєте масив позицій замовлення, ставку ПДВ, систему оподаткування. CloudPayments формує чек через підключену касу.

Строки розробки

Задача Строк
Базова інтеграція: віджет + check/pay callbacks 2–3 дні
Двостадійні платежі (auth + confirm) +1 день
Рекурентні платежі +2–3 дні
Фіскалізація +1–2 дні
Тестування та debugging 1 день