Интеграция 1С-Битрикс с платежной системой PayKeeper

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с платежной системой PayKeeper
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 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 день