Интеграция 1С-Битрикс с платёжной системой Kaspi Pay (Казахстан)
Kaspi Pay — платёжный инструмент экосистемы Kaspi Bank. Широко распространён в Казахстане: покупатель сканирует QR-код или вводит номер телефона, подтверждает оплату в приложении Kaspi. Для интернет-магазинов актуален как один из наиболее конверсионных методов оплаты на казахстанском рынке.
Варианты интеграции
Kaspi предоставляет несколько методов для интернет-магазинов:
QR-оплата — генерируется QR-код со счётом. Покупатель сканирует через Kaspi.kz app. Используется как на сайте, так и в офлайн-точках.
Kaspi Pay по ссылке — ссылка ведёт на форму подтверждения в браузере или открывает приложение Kaspi.
Kaspi eCommerce API — для интернет-магазинов, прямая интеграция через API.
Для интеграции с Битрикс стандартный подход — eCommerce API или платёжная ссылка.
Kaspi eCommerce API
Авторизация через Bearer токен. Базовый URL: https://api.kaspi.kz/payment/
$token = $this->getBusinessValue($payment, 'KASPI_TOKEN');
$orderId = $payment->getOrder()->getId();
$amount = $payment->getSum(); // в тенге (KZT)
// Создание платежа
$payload = [
'device' => [
'platformType' => 'WEB',
'id' => md5($orderId),
],
'amount' => [
'value' => $amount,
'currency' => 'KZT',
],
'externalId' => (string)$orderId,
'description' => 'Оплата заказа №' . $orderId,
'paymentType' => 'ECOM',
'customer' => [
'phone' => $phone, // телефон покупателя в формате +77XXXXXXXXX
],
'redirectUrl' => $returnUrl,
'callbackUrl' => $callbackUrl,
];
$ch = curl_init('https://api.kaspi.kz/payment/api/v1/payments/create');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $token,
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
// $response['data']['paymentLink'] — ссылка для редиректа
// $response['data']['paymentId'] — ID платежа для проверки статуса
Обработка уведомлений
Kaspi отправляет POST на callbackUrl при изменении статуса платежа:
$rawBody = file_get_contents('php://input');
$data = json_decode($rawBody, true);
$paymentId = $data['data']['paymentId'];
$externalId = $data['data']['externalId']; // наш orderId
$status = $data['data']['status']; // 'COMPLETED', 'FAILED', 'EXPIRED'
// Верификация через заголовок подписи или дополнительный запрос статуса
if ($status === 'COMPLETED') {
// Подтвердить через отдельный GET-запрос для защиты от фальшивых уведомлений
$verification = $this->httpGet(
'https://api.kaspi.kz/payment/api/v1/payments/' . $paymentId,
[],
['Authorization: Bearer ' . $token]
);
if ($verification['data']['status'] === 'COMPLETED') {
$order = \Bitrix\Sale\Order::loadByAccountNumber($externalId);
// setPaid('Y'), save()
}
}
http_response_code(200);
echo json_encode(['status' => 'OK']);
Важно: всегда верифицируйте статус через дополнительный GET-запрос к API. Принимать статус только из тела callback без проверки — риск мошенничества.
QR-код на странице заказа
Альтернативный UX для мобильных пользователей — QR-код прямо на странице оформления:
// Получить QR-код для оплаты
$qrResponse = $this->httpPost('https://api.kaspi.kz/payment/api/v1/payments/qr', $payload, $headers);
$qrBase64 = $qrResponse['data']['qrCode']; // base64 PNG изображение
echo '<img src="data:image/png;base64,' . $qrBase64 . '" alt="Kaspi Pay QR">';
echo '<p>Отсканируйте QR в приложении Kaspi</p>';
Дополнительно — реализуйте polling или WebSocket для автообновления статуса на странице без перезагрузки.
Особенности казахстанского рынка
- Валюта — тенге (KZT). Суммы без копеек (целые числа)
- Телефоны в формате
+77XXXXXXXXX(7 или 8 в начале — уточняйте формат у Kaspi) - Kaspi Pay популярен для оплат от 5 000 до 500 000 KZT — основная аудитория
- Kaspi также предоставляет рассрочку (Kaspi Red) — отдельная интеграция
Сроки разработки
| Задача | Срок |
|---|---|
| Создание платежа + редирект + callback | 2–3 дня |
| QR-код на странице + polling статуса | +1–2 дня |
| Тестирование на тестовой среде | 0.5–1 день |







