Интеграция 1С-Битрикс с платёжной системой CloudPayments
CloudPayments — российский платёжный шлюз с виджетом оплаты на JS, который встраивается в страницу без редиректа. Покупатель вводит данные карты прямо на странице магазина — конверсия выше, чем при редиректе. API основан на REST, поддерживает рекуррентные платежи, 3-D Secure, холдирование.
Архитектура интеграции
CloudPayments предоставляет два варианта оплаты:
Checkout Widget — JS-виджет, форма открывается в popup или inline на странице магазина. Данные карты уходят сразу в CloudPayments (PCI DSS), на сервер магазина — только токен транзакции.
API без редиректа — магазин собирает данные карты сам и передаёт в API. Требует сертификации PCI DSS — редко используется.
Стандартный подход для Битрикс — 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: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 интегрируется с онлайн-кассами через параметры cloudPayments.CustomerReceipt в запросе виджета. Передаёте массив позиций заказа, ставку НДС, систему налогообложения. CloudPayments формирует чек через подключённую кассу.
Сроки разработки
| Задача | Срок |
|---|---|
| Базовая интеграция: виджет + check/pay callbacks | 2–3 дня |
| Двухстадийные платежи (auth + confirm) | +1 день |
| Рекуррентные платежи | +2–3 дня |
| Фискализация | +1–2 дня |
| Тестирование и отладка | 1 день |







