Налаштування поділу платежів (split-payments) 1С-Бітрікс

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

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

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

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

  • 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

Налаштування розділення платежів (Split Payments) на 1С-Бітрікс

Split payment — автоматичний розподіл суми платежу між кількома отримувачами в момент транзакції. Актуально для маркетплейсів: покупець платить одну суму, платформа автоматично переказує частки продавцям та утримує комісію. В 1С-Бітрікс це нестандартний функціонал — реалізується через платіжний агрегатор з підтримкою splits.

Коли потрібен split payment

  • Маркетплейс — замовлення містить товари від кількох продавців, кожному потрібно перевести свою частку
  • Партнерська модель — відсоток від платежу йде реферралу або агенту
  • Холдингова структура — кілька юридичних осіб, один сайт

Без split payment альтернатива — ручні перекази за підсумками періоду (раз на тиждень/місяць). Це погано масштабується та створює касові розриви.

ЮКаса: Split через Marketplace API

ЮКаса підтримує split через параметр transfers при створенні платежу:

$payment = $yookassaClient->createPayment([
    'amount'      => ['value' => '10000.00', 'currency' => 'RUB'],
    'capture'     => true,
    'description' => 'Замовлення з кількома продавцями',
    'transfers'   => [
        [
            // Переказ продавцю 1 (7000 грн.)
            'account_id'  => 'seller_yookassa_account_id_1',
            'amount'      => ['value' => '7000.00', 'currency' => 'RUB'],
            'platform_fee_amount' => ['value' => '700.00', 'currency' => 'RUB'], // комісія платформи
            'description' => 'Замовлення ' . $orderId . ': товари продавця 1',
            'metadata'    => ['seller_id' => $sellerId1],
        ],
        [
            // Переказ продавцю 2 (2000 грн., залишок 1000 грн. — комісія платформи)
            'account_id'  => 'seller_yookassa_account_id_2',
            'amount'      => ['value' => '2000.00', 'currency' => 'RUB'],
            'platform_fee_amount' => ['value' => '200.00', 'currency' => 'RUB'],
            'description' => 'Замовлення ' . $orderId . ': товари продавця 2',
            'metadata'    => ['seller_id' => $sellerId2],
        ],
    ],
    'metadata'    => ['order_id' => $orderId],
], uniqid('', true));

Сума всіх transfers.amount не повинна перевищувати загальну суму платежу. Різниця осідає на рахунку платформи.

Розрахунок часток в 1С-Бітрікс

class SplitPaymentCalculator
{
    public function calculate(\Bitrix\Sale\Order $order): array
    {
        $transfers = [];
        $platformFeeRate = 0.10; // 10% комісія платформи

        foreach ($order->getBasket()->getOrderableItems() as $item) {
            $sellerId = $item->getField('SELLER_ID');
            $itemTotal = $item->getFinalPrice();
            $sellerAmount = $itemTotal * (1 - $platformFeeRate);
            $platformFee  = $itemTotal * $platformFeeRate;

            $transfers[$sellerId]['amount'] = ($transfers[$sellerId]['amount'] ?? 0) + $sellerAmount;
            $transfers[$sellerId]['fee']    = ($transfers[$sellerId]['fee'] ?? 0) + $platformFee;
        }

        // Приводимо до формату ЮКаси
        $result = [];
        foreach ($transfers as $sellerId => $data) {
            $seller = SellerTable::getById($sellerId)->fetch();
            $result[] = [
                'account_id'          => $seller['YOOKASSA_ACCOUNT_ID'],
                'amount'              => ['value' => number_format($data['amount'], 2, '.', ''), 'currency' => 'RUB'],
                'platform_fee_amount' => ['value' => number_format($data['fee'], 2, '.', ''), 'currency' => 'RUB'],
            ];
        }

        return $result;
    }
}

Повернення при split payment

Повернення split-платежу вимагає вказати, з чийого рахунку здійснюється повернення:

$refund = $yookassaClient->createRefund([
    'payment_id' => $paymentId,
    'amount'     => ['value' => $refundAmount, 'currency' => 'RUB'],
    'sources'    => [
        [
            'account_id' => $sellerAccountId,
            'amount'     => ['value' => $refundAmount, 'currency' => 'RUB'],
            'platform_fee_amount' => ['value' => $platformFeeToRefund, 'currency' => 'RUB'],
        ],
    ],
], uniqid('', true));

Терміни

Завдання Термін
Розрахунок часток + інтеграція з ЮКаса transfers 2–3 дні
Таблиця акаунтів продавців + прив'язка 1 день
Логіка повернення при split 1 день