Интеграция 1С-Битрикс с платёжной системой 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') {
// Подтвердить платёж в Битрикс
$order = \Bitrix\Sale\Order::loadByAccountNumber($orderId);
// ... setPaid('Y'), save()
}
echo 'OK';
Особенность: self-hosted PayKeeper
Поскольку PayKeeper может быть установлен на домене клиента, URL API у каждого магазина свой. В настройках платёжной системы в Битрикс нужно предусмотреть поле для URL PayKeeper-сервера, а не хардкодить его. Это важно при работе с несколькими магазинами или при смене хостинга.
Возвраты
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 имеет встроенную интеграцию с онлайн-кассами (OFD). Данные чека передаются при создании инвойса в параметрах корзины. Состав позиций берётся из $order->getBasket().
Сроки разработки
| Задача | Срок |
|---|---|
| Получение токена + создание инвойса + обработка уведомлений | 2–3 дня |
| Возвраты | +1 день |
| Фискализация | +1–2 дня |
| Тестирование | 0.5–1 день |







