Налаштування оплати за посиланням 1С-Бітрікс

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

Налаштування оплати за посиланням на 1С-Бітрікс

Оплата за посиланням — менеджер формує посилання і надсилає його покупцеві в месенджер, листом або SMS. Покупець переходить за посиланням і оплачує без авторизації на сайті. Затребувано для телефонних замовлень, B2B-продажів, персональних пропозицій. Технічно це спеціальний URL з токеном, який веде на сторінку оплати конкретного замовлення або довільної суми.

Два сценарії оплати за посиланням

Посилання на існуюче замовлення — замовлення вже створене в системі, менеджер надсилає посилання для оплати. Покупець не бачить форму оформлення, лише форму оплати.

Посилання на довільний платіж — менеджер вказує суму та опис, замовлення в Бітрікс створюється в момент переходу за посиланням або підтвердження оплати.

Генерація платіжного посилання

class PaymentLinkService
{
    public function generateForOrder(int $orderId, int $expiresInHours = 24): string
    {
        $order = \Bitrix\Sale\Order::load($orderId);
        if (!$order || $order->isPaid()) {
            throw new \InvalidArgumentException('Замовлення не знайдено або вже оплачено');
        }

        // Генеруємо одноразовий токен
        $token = bin2hex(random_bytes(32));
        $expires = (new \DateTime())->modify('+' . $expiresInHours . ' hours');

        PaymentLinkTable::add([
            'ORDER_ID'   => $orderId,
            'TOKEN'      => $token,
            'EXPIRES_AT' => \Bitrix\Main\Type\DateTime::createFromPhp($expires),
            'USED'       => 'N',
            'CREATED_BY' => $GLOBALS['USER']->GetID(),
        ]);

        return 'https://' . $_SERVER['HTTP_HOST'] . '/pay/' . $token . '/';
    }

    public function generateCustom(float $amount, string $description): string
    {
        $token = bin2hex(random_bytes(32));

        PaymentLinkTable::add([
            'ORDER_ID'    => null,
            'AMOUNT'      => $amount,
            'DESCRIPTION' => $description,
            'TOKEN'       => $token,
            'EXPIRES_AT'  => \Bitrix\Main\Type\DateTime::createFromPhp(
                (new \DateTime())->modify('+24 hours')
            ),
            'USED' => 'N',
        ]);

        return 'https://' . $_SERVER['HTTP_HOST'] . '/pay/' . $token . '/';
    }
}

Сторінка оплати за посиланням

// Компонент /local/components/my/payment.link/class.php
class PaymentLinkComponent extends \CBitrixComponent
{
    public function executeComponent(): void
    {
        $token = $this->arParams['TOKEN'] ?? $GLOBALS['APPLICATION']->GetCurDir();
        $token = trim($token, '/');

        // Шукаємо посилання за токеном
        $link = PaymentLinkTable::getList([
            'filter' => [
                'TOKEN'  => $token,
                'USED'   => 'N',
                '>EXPIRES_AT' => new \Bitrix\Main\Type\DateTime(),
            ],
        ])->fetch();

        if (!$link) {
            $this->arResult['ERROR'] = 'Посилання недійсне або прострочене';
            $this->includeComponentTemplate();
            return;
        }

        // Якщо посилання на замовлення — показуємо форму оплати існуючого замовлення
        if ($link['ORDER_ID']) {
            $order = \Bitrix\Sale\Order::load($link['ORDER_ID']);
            $this->arResult['ORDER']  = $order;
            $this->arResult['AMOUNT'] = $order->getPrice();
        } else {
            // Довільний платіж — створюємо замовлення «на льоту»
            $order = $this->createOrderFromLink($link);
            $this->arResult['ORDER']  = $order;
            $this->arResult['AMOUNT'] = $link['AMOUNT'];
        }

        // Ініціюємо платіж
        $paySystem = \Bitrix\Sale\PaySystem\Manager::getObjectById(DEFAULT_PAY_SYSTEM_ID);
        $payment   = $order->getPaymentCollection()->current();
        $response  = $paySystem->initiatePay($payment, null);

        if ($response->isSuccess()) {
            // Позначити посилання використаним лише після успішного платежу
            // (через callback)
            $this->arResult['PAYMENT_URL'] = $response->getPaymentUrl();
        }

        $this->includeComponentTemplate();
    }
}

Управління посиланнями з адміністративної частини

В адміністративному розділі CRM або замовлень додаємо кнопку «Надіслати посилання на оплату»:

// На адмін-сторінці замовлення — додаємо кнопку
$adminPage->AddAdminContextMenuItem([
    'TEXT' => 'Створити посилання на оплату',
    'LINK' => '/bitrix/admin/payment_link_create.php?ORDER_ID=' . $orderId,
    'ICON' => 'btn_pay',
]);

Сторінка /bitrix/admin/payment_link_create.php показує створене посилання, яке менеджер копіює та надсилає покупцеві.

Обмеження кількості використань

Посилання можна зробити одноразовим або багаторазовим:

// У callback після успішної оплати
if ($payment->isPaid()) {
    PaymentLinkTable::update($linkId, [
        'USED' => 'Y',
        'PAID_AT' => new \Bitrix\Main\Type\DateTime(),
    ]);
}

Терміни

Завдання Термін
Генерація токенів + таблиця посилань 0.5 дня
Сторінка оплати за посиланням 1 день
Інтерфейс створення в адміністративній частині 0.5 дня