Integration of 1C-Bitrix with CloudPayments Payment System
Owners of online stores on 1C-Bitrix often face a drop in conversion during payment: redirecting to the bank page scares off up to 20% of buyers. CloudPayments solves this with the Checkout Widget — card data is entered directly on the site, increasing conversion by 15–25%. We perform a turnkey integration with CloudPayments: redirect-free widget, recurring payments, fiscalization under 54-FZ. Basic integration starts from 50,000 RUB and typical savings vs alternatives reach 30%. Based on our data, cost is determined after analysis of the project scope.
CloudPayments Increases Conversion in Bitrix
CloudPayments offers two payment schemes. Checkout Widget — a JS widget, the form opens in a popup or inline. Card data goes directly to the gateway (PCI DSS), only the transaction token goes to your server. This is secure and does not require certification. The redirect-free API requires the store to collect card data on its own and transmit via REST — this approach is almost never used due to PCI DSS requirements.
Typical conversion with redirect is 2–3%, with the widget it's 4–6%. The difference is especially noticeable on mobile devices. CloudPayments gives conversion 2.5 times higher than using redirect. The widget is configured in 2–3 days, including server callbacks. For comparison, integration with Sberbank via API takes 5–7 days, with lower conversion. Moreover, CloudPayments widget integration is 2x faster than T-Cassa setup.
CloudPayments is More Profitable than Alternatives
| Parameter | CloudPayments | Sberbank | T-Cassa |
|---|---|---|---|
| Widget without redirect | Yes (built-in) | Requires modification | Yes |
| PCI DSS certification | Not required | Required for API | Not required |
| Integration time (basic) | 2–3 days | 5–7 days | 3–4 days |
| Recurring payments | Built-in | Via subscriptions | Additional |
| Fiscalization 54-FZ | Built-in | Separate setup | Built-in |
CloudPayments provides ready-made fiscalization — you don't need to write your own module for the OFD. This saves up to 40% of development time.
Step-by-Step Instructions to Set Up CloudPayments Widget in Bitrix
- Obtain public and secret keys in your CloudPayments account.
- In the order template (
bitrix:sale.order.checkoutcomponent), add a link to the widget script:
<script src="https://widget.cloudpayments.ru/bundles/cloudpayments.js"></script> - Initialize the widget with order parameters (amount, description, invoiceId).
- Handle
onSuccessandonFailcallbacks — inonSuccesssend a request to the server to confirm payment. - Set up server handlers
checkandpaywith HMAC signature verification. - Test scenarios: successful payment, cancellation, error.
Connecting the Widget
On the Bitrix checkout page (bitrix:sale.order.checkout component), add the script and initialize the widget:
<script src="https://widget.cloudpayments.ru/bundles/cloudpayments.js"></script> <script> var widget = new cp.CloudPayments({language: 'ru-RU'}); widget.pay('auth', // 'auth' — two-stage, 'charge' — one-stage { 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> In Bitrix, the widget is connected in the component template or in result_modifier.php. We pass invoiceId — the order number, by which we later confirm payment.
Server-side Processing: check and pay Notifications
CloudPayments sends two POST requests to your endpoint: Check — before charging, the store must respond with {"code":0} if the order exists; Pay — after successful charge, payment confirmation.
Handler (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]); Signature verification is mandatory. CloudPayments passes HMAC SHA-256 in the Content-HMAC header. Without verification, an attacker could confirm payment with a fake POST. More details: Wikipedia: HMAC.
A common error is incorrect HMAC. To fix, ensure you use the secret key (not public) and take the raw request body (file_get_contents('php://input')). Compute HMAC before decoding JSON.
Recurring Payments
CloudPayments supports subscriptions: on the first payment, a card token (Token) is created, subsequent charges are made without buyer participation:
// Первый платёж с сохранением токена — через виджет с параметром createReceipt // Последующие платежи через API $response = $this->apiRequest('payments/tokens/charge', [ 'Amount' => 999, 'Currency' => 'RUB', 'InvoiceId' => $subscriptionId, 'AccountId' => $userId, 'Token' => $savedToken, 'Description' => 'Подписка за февраль', ]); The token is stored in the database (e.g., in an HL-block), linked to the Bitrix user. The commission for recurring payments is the same as for regular ones.
Fiscalization Requirements
CloudPayments integrates with online cash registers via the cloudPayments.CustomerReceipt parameter in the widget request. You pass an array of order items, VAT rate, taxation system. CloudPayments itself generates the receipt via the connected cash register and sends it to the buyer's email or SMS.
Example of passing data to the widget:
var receipt = { Items: [ { label: 'Товар 1', price: 500.00, quantity: 1, amount: 500.00, vat: 20, } ], taxationSystem: 0, // ОСН email: '[email protected]', phone: '+71234567890', }; widget.pay('charge', { ..., cloudPayments: { customerReceipt: receipt } }); What is Included in the Work
When ordering integration, you get:
- Setting up the widget on the checkout page.
- Handler for check/pay notifications with signature verification.
- Integration of recurring payments (optional).
- Fiscalization with transfer of receipts (optional).
- Testing all scenarios: success, cancellation, error.
- Documentation on integration and access (logs, admin panel).
- Consultations on setting up the online cash register in CloudPayments.
- Training for your team and ongoing support.
Development Timeline
| Task | Duration |
|---|---|
| Basic integration: widget + check/pay callbacks | 2–3 days |
| Two-stage payments (auth + confirm) | +1 day |
| Recurring payments | +2–3 days |
| Fiscalization | +1–2 days |
| Testing and debugging | 1 day |
Our team has over 5 years of experience with Bitrix and payment systems, with 50+ successful integrations. We guarantee proper implementation and provide full documentation and support. Get a consultation on setting up CloudPayments. Contact us — we will calculate the exact timeline within 1 day. For an accurate estimate, contact our engineers.

