Інтеграція 1С-Bitrix з платіжною системою PayKeeper
PayKeeper — платіжний шлюз з акцентом на малий та середній бізнес. Відрізняється від конкурентів тим, що платіжний сервер встановлюється на власному хостингу клієнта або працює в хмарі. API стандартний: створення платіжної форми, отримання статусів, повернення.
Як працює PayKeeper
PayKeeper надає платіжний сервер (PHP-застосунок) на домені клієнта або в власній інфраструктурі. Магазин через API створює рахунок, отримує URL платіжної форми, покупець вводить дані карти.
Сповіщення про оплату приходять через POST на вказаний result_url.
Формування рахунку через API
$apiUrl = $this->getBusinessValue($payment, 'PAYKEEPER_URL'); // https://your.paykeeper.ru
$clientId = $this->getBusinessValue($payment, 'PAYKEEPER_USER');
$clientSecret = $this->getBusinessValue($payment, 'PAYKEEPER_PASSWORD');
$orderId = $payment->getOrder()->getId();
$sum = $payment->getSum();
// Отримати токен
$tokenResponse = $this->httpPost($apiUrl . '/info/settings/token/', [], [
'Authorization: Basic ' . base64_encode("{$clientId}:{$clientSecret}"),
]);
$token = $tokenResponse['token'];
// Створити рахунок
$invoiceParams = [
'pay_amount' => number_format($sum, 2, '.', ''),
'clientid' => $payment->getOrder()->getUserId(),
'orderid' => $orderId,
'client_email' => $email,
'client_phone' => $phone,
'service_name' => 'Оплата замовлення №' . $orderId,
];
$invoiceParams['token'] = md5(implode('', $invoiceParams) . $token);
$invoice = $this->httpPost($apiUrl . '/change/invoice/preview/', $invoiceParams);
// $invoice['invoice_id'] — ID рахунку
// Платіжна форма: $apiUrl . '/?id=' . $invoice['invoice_id']
Обробка сповіщень
PayKeeper відправляє POST на result_url при оплаті:
$clientSecret = $this->getBusinessValue($payment, 'PAYKEEPER_PASSWORD');
$id = $_POST['id'];
$sum = $_POST['sum'];
$orderId = $_POST['orderid'];
$key = $_POST['key'];
// Перевірка підпису
$expected = md5($id . $sum . $orderId . $clientSecret);
if (strtolower($key) !== strtolower($expected)) {
http_response_code(400);
echo 'bad signature';
exit;
}
// Додаткова перевірка через API
$paymentInfo = $this->httpGet($apiUrl . '/info/payments/byid/', ['id' => $id], $token);
if ($paymentInfo['status'] === 'paid') {
// Підтвердити платіж у Bitrix
$order = \Bitrix\Sale\Order::loadByAccountNumber($orderId);
// ... setPaid('Y'), save()
}
echo 'OK';
Особливість: self-hosted PayKeeper
Оскільки PayKeeper може бути встановлений на домені клієнта, URL API у кожного магазину свій. У налаштуваннях платіжної системи у Bitrix потрібно передбачити поле для URL PayKeeper-сервера, а не hardcode його. Це важливо при роботі з кількома магазинами або зміні хостингу.
Повернення
PayKeeper підтримує повернення через API:
$refundParams = [
'id' => $paykeeperPaymentId,
'amount' => number_format($refundAmount, 2, '.', ''),
];
$refundParams['token'] = md5(implode('', $refundParams) . $token);
$result = $this->httpPost($apiUrl . '/change/payment/return/', $refundParams);
Фіскалізація
PayKeeper має вбудовану інтеграцію з online-касами (OFD). Дані чека передаються при створенні рахунку в параметрах кошика. Склад позицій беруться з $order->getBasket().
Строки розробки
| Задача | Строк |
|---|---|
| Отримання токену + створення рахунку + обробка сповіщень | 2–3 дні |
| Повернення | +1 день |
| Фіскалізація | +1–2 дні |
| Тестування | 0,5–1 день |







