Інтеграція 1С-Бітрікс із платіжною системою PayKeeper

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із платіжною системою PayKeeper
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

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