Інтеграція 1С-Bitrix з платіжною системою Click (Узбекистан)
Click — найбільший платіжний сервіс Узбекистану. Використовується для оплати картами Uzcard та Humo (локальні узбецькі платіжні системи), а також через мобільний додаток Click. Для інтернет-магазинів працює в режимі SPAY (Shopping): покупець обирає оплату Click, вводить номер телефону та підтверджує в додатку або через SMS.
Схема роботи Click SPAY
- Магазин відправляє запит на створення платежу через API Click
- Покупець отримує Push-сповіщення або SMS із сумою
- Підтверджує в додатку Click
- Click повідомляє магазин про результат
- Магазин оновлює статус замовлення
API-інтеграція
Click надає два API:
Merchant API — для створення платіжних форм та перевірки статусів. Базовий URL: https://api.click.uz/v2/merchant/
Prepare/Complete callbacks — Click повідомляє про підготовку та завершення платежу через POST на URL магазину.
Авторизація: serviceId + merchantId + підпис на основі merchantUserId та secretKey.
Формування платежу
$serviceId = $this->getBusinessValue($payment, 'CLICK_SERVICE_ID');
$merchantId = $this->getBusinessValue($payment, 'CLICK_MERCHANT_ID');
$secretKey = $this->getBusinessValue($payment, 'CLICK_SECRET_KEY');
$orderId = $payment->getOrder()->getId();
$amount = $payment->getSum(); // у UZS (узбецьких сумах)
// Генерація платіжного посилання (без API — через пряме посилання)
$payUrl = sprintf(
'https://my.click.uz/services/pay?service_id=%s&merchant_id=%s&amount=%s&transaction_param=%s&return_url=%s',
$serviceId,
$merchantId,
$amount,
$orderId,
urlencode($returnUrl)
);
// Або через API створення інвойсу
$timestamp = time();
$digest = md5($timestamp . $secretKey);
$authHeader = $merchantId . ':' . $digest . ':' . $timestamp;
$invoiceData = [
'service_id' => $serviceId,
'amount' => $amount,
'phone_number' => $phone, // телефон покупця
'merchant_trans_id' => $orderId,
];
$response = $this->httpPost(
'https://api.click.uz/v2/merchant/invoice/create',
$invoiceData,
['Auth: ' . $authHeader, 'Content-Type: application/json']
);
// $response['invoice_id'] — ID рахунку
Обробка Prepare callback
Click спочатку відправляє Prepare (підготовка платежу), потім Complete (завершення). Обидва — POST-запити:
// Prepare
$clickTransId = $_POST['click_trans_id'];
$merchantTransId = $_POST['merchant_trans_id']; // наш orderId
$amount = $_POST['amount'];
$signString = $_POST['sign_string'];
$signTime = $_POST['sign_time'];
// Перевірка підпису
$expectedSign = md5($clickTransId . $serviceId . $secretKey . $merchantTransId . $amount . $signTime);
if ($signString !== $expectedSign) {
echo json_encode(['error' => -1, 'error_note' => 'Invalid sign']);
exit;
}
// Перевірити, чи існує замовлення
$order = \Bitrix\Sale\Order::loadByAccountNumber($merchantTransId);
if (!$order) {
echo json_encode(['error' => -5, 'error_note' => 'Order not found']);
exit;
}
// Відповідь на Prepare
echo json_encode([
'click_trans_id' => $clickTransId,
'merchant_trans_id' => $merchantTransId,
'merchant_prepare_id' => $orderId,
'error' => 0,
'error_note' => 'Success',
]);
// Complete
$merchantPrepareId = $_POST['merchant_prepare_id'];
$error = $_POST['error']; // 0 = успіх
if ($error === '0' || $error === 0) {
$order = \Bitrix\Sale\Order::loadByAccountNumber($merchantPrepareId);
// setPaid('Y'), save()
}
echo json_encode([
'click_trans_id' => $_POST['click_trans_id'],
'merchant_trans_id' => $_POST['merchant_trans_id'],
'merchant_confirm_id' => $orderId,
'error' => 0,
'error_note' => 'Success',
]);
Особливості узбецького ринку
- Суми у узбецьких сумах (UZS). На початок 2026 року 1 USD ≈ 12 800 UZS. Для суми 500 000 UZS — це ~39 USD. Переконайтеся, що у Bitrix правильно налаштована валюта UZS
- Карти Uzcard та Humo — локальні карти без міжнародного коду BIN. Click обробляє їх через свою процесингову мережу
- Додаток Click встановлено у більшості активних покупців у Узбекистані — звичний метод оплати
Терміни розробки
| Завдання | Термін |
|---|---|
| Платіжне посилання + Prepare/Complete callbacks | 2–3 дні |
| Перевірка на тестовому середовищі Click | 0.5–1 день |
| Налаштування валюти UZS у Bitrix | 0.5 дня |







