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

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

Robokassa — агрегатор платежів: приймає карти, ЮMoney, QIWI, готівку через термінали. Зручна, коли потрібно надати максимум способів оплати. У Bitrix є готовий модуль Robokassa у Маркетплейсі, але часто потрібна користувацька реалізація з контролем параметрів та логікою.

Схема роботи

  1. Bitrix формує підписаний посилання на форму Robokassa
  2. Покупець оплачує (карта, гаманець, готівка)
  3. Robokassa відправляє POST-сповіщення на ResultURL магазину
  4. Магазин перевіряє підпис, підтверджує оплату
  5. Robokassa перенаправляє покупця на SuccessURL або FailURL

Параметри та формування підпису

Базові параметри запиту до Robokassa:

Параметр Значення Описання
MerchantLogin з ЛК Логін магазину
OutSum сума Сума оплати
InvId orderId Номер замовлення
Description текст Описання (до 100 символів)
SignatureValue MD5/SHA256 Підпис
IsTest 1 Тестовий режим
Encoding utf-8 Кодування

Підпис формується як MD5 або SHA256 (залежить від налаштувань магазину в ЛК Robokassa):

// MD5 підпис
$signature = md5("{$merchantLogin}:{$outSum}:{$invId}:{$password1}");

// SHA256 (рекомендується)
$signature = hash('sha256', "{$merchantLogin}:{$outSum}:{$invId}:{$password1}");

// URL платіжної форми
$payUrl = 'https://auth.robokassa.ru/Merchant/Index.aspx?'
    . http_build_query([
        'MerchantLogin'  => $merchantLogin,
        'OutSum'         => number_format($outSum, 2, '.', ''),
        'InvId'          => $invId,
        'Description'    => $description,
        'SignatureValue' => $signature,
        'Encoding'       => 'utf-8',
        'IsTest'         => $isTest ? 1 : 0,
    ]);

Обробка ResultURL

Robokassa відправляє POST з параметрами на ResultURL. Перевірка підпису обов'язкова — використовується Password2 (відрізняється від Password1):

$outSum    = $_POST['OutSum'];
$invId     = $_POST['InvId'];
$received  = strtolower($_POST['SignatureValue']);
$password2 = $this->getBusinessValue($payment, 'ROBOKASSA_PASSWORD2');

$expected = strtolower(hash('sha256', "{$outSum}:{$invId}:{$password2}"));

if ($received !== $expected) {
    echo 'bad sign';
    exit;
}

// Підпис правильний — підтверджуємо оплату
$order = \Bitrix\Sale\Order::loadByAccountNumber($invId);
// ... setPaid('Y'), save()

echo "OK{$invId}";  // Robokassa чекає саме цю відповідь

Критично: відповідь на ResultURL має бути строго OK{InvId}. Якщо Robokassa не отримує цю відповідь — вважає сповіщення невідправленим і спробує знову (до 8 разів).

Додаткові параметри (Shp_*)

Robokassa підтримує користувацькі параметри з префіксом Shp_. Вони включаються в підпис і повертаються в ResultURL. Використовуйте для передачі ідентифікатора замовлення в Bitrix, якщо InvId зайнято або потрібні додаткові дані:

$signature = hash('sha256',
    "{$merchantLogin}:{$outSum}:{$invId}:{$password1}:Shp_item={$itemId}&Shp_user={$userId}"
);
// Параметри Shp_ у підпис включаються в алфавітному порядку ключів

Фіскалізація

Robokassa підтримує ФЗ-54 через параметр Receipt у base64-encoded JSON:

$receipt = [
    'sno' => 'osn',  // система оподаткування
    'items' => array_map(function($basketItem) {
        return [
            'name'     => $basketItem->getField('NAME'),
            'quantity' => $basketItem->getQuantity(),
            'sum'      => $basketItem->getPrice() * $basketItem->getQuantity(),
            'payment_method'  => 'full_prepayment',
            'payment_object'  => 'commodity',
            'tax'      => 'vat20',
        ];
    }, iterator_to_array($order->getBasket())),
];

$receiptEncoded = base64_encode(json_encode($receipt, JSON_UNESCAPED_UNICODE));

Строки розробки

Задача Строк
Обробник: формування посилання + ResultURL 1–2 дні
Додаткові параметри Shp_* 0,5 дня
Фіскалізація +1–2 дні
Тестування повного циклу 0,5 дня