Setting up payments via the Fast Payment System (FPS) in 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

FPS (Faster Payments System) Integration for 1C-Bitrix

FPS is an interbank instant payment system of the Central Bank of Russia. For an online store, this means payment via the buyer's mobile bank using a QR code or link. No fee for the buyer; the merchant rate is a fixed percentage (typically 0.4–0.7%, lower than standard acquiring). Since 2023, major banks are required to support FPS — audience coverage is close to 100% among Russian bank users.

Technical Integration Options for FPS

Via acquiring bank — if the store already has an acquiring contract with an FPS-participating bank, it is sufficient to enable FPS in the bank's personal account. The payment method appears in the payment form automatically or via API with the payment_method: sbp parameter.

Via a payment aggregator — YooKassa, Tinkoff, and Sber provide FPS as an additional method in their API.

Direct integration via NSPK — for banks and large payment platforms. Requires a licence and a partnership agreement with NSPK.

Integration via YooKassa

// Creating a payment via FPS
$payment = $yookassaClient->createPayment([
    'amount'              => ['value' => $amount, 'currency' => 'RUB'],
    'payment_method_data' => ['type' => 'sbp'],
    'capture'             => true,
    'description'         => 'Order #' . $orderId,
    'confirmation'        => [
        'type'       => 'redirect',
        'return_url' => $returnUrl,
    ],
], uniqid('', true));

// Redirect the buyer to the YooKassa page with bank selection
$confirmationUrl = $payment->getConfirmation()->getConfirmationUrl();
header('Location: ' . $confirmationUrl);

Or with a QR code instead of a redirect:

$payment = $yookassaClient->createPayment([
    'amount'              => ['value' => $amount, 'currency' => 'RUB'],
    'payment_method_data' => ['type' => 'sbp'],
    'capture'             => true,
    'confirmation'        => ['type' => 'qr'],  // QR instead of redirect
], uniqid('', true));

$qrData = $payment->getConfirmation()->getConfirmationData();
// $qrData — payload string for generating a QR image

Integration via Tinkoff

// Tinkoff: creating a payment with FPS
$response = $tinkoffClient->init([
    'Amount'      => (int)($amount * 100),  // kopecks
    'OrderId'     => 'BX_' . $orderId,
    'Description' => 'Order #' . $orderId,
    'PayType'     => 'O',     // O = single-stage
    'DATA'        => ['PaymentMethod' => 'SBP'],
    'NotificationURL' => $notifyUrl,
    'SuccessURL'      => $successUrl,
    'FailURL'         => $failUrl,
]);

// Get the FPS QR link
$qrResponse = $tinkoffClient->getSbpQr(['PaymentId' => $response['PaymentId']]);
$sbpPayload  = $qrResponse['QRURL'];  // string for QR code

Displaying FPS in the Payment Form

In the payment page template — the "Pay via FPS" button opens a dialog with a QR code or link:

// Detect mobile device
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);

if (isMobile) {
    // On mobile — deep link into the bank app
    window.location.href = sbpPayload; // string of the form https://qr.nspk.ru/...
} else {
    // On desktop — show QR for scanning with a phone
    document.getElementById('sbp-qr').src = '/bitrix/tools/generate_qr.php?data='
        + encodeURIComponent(sbpPayload);
    document.getElementById('sbp-qr-container').style.display = 'block';

    // Poll status while the buyer pays
    startStatusPolling(orderId);
}

Handling FPS Notifications

An FPS payment is confirmed via the same webhook mechanism as a card payment. There is no Bitrix handler-level difference — the aggregator normalises the notification:

// In the callback handler — the succeeded status is handled the same way
// regardless of the payment method (card, FPS, YooMoney)
if ($payment->getStatus() === 'succeeded') {
    $bitrixPayment->setPaid('Y');
    $bitrixPayment->save();
}

Payment Method Display Specifics

Recommended payment method order for online stores (2024–2025):

1. FPS (0% for buyer, fast)
2. VISA / Mastercard / Mir card
3. SberPay / Tinkoff Pay
4. Mir Pay
5. Cash / other

FPS is placed first — its conversion rate is higher due to the simplicity of confirmation via Face ID in the banking app.

Timeline

Task Duration
Connecting FPS via existing acquiring service 0.5 day
QR code on payment page + polling 1 day
Deep link for mobile devices 0.5 day