Tinkoff Payment for 1C-Bitrix: Turnkey Integration

What happens when notifications are misconfigured? A customer pays for an order, but the status in Bitrix never updates. Money is deducted, goods are not shipped – support tickets pile up. Root cause: incorrect notification handling or API call timing. We fix this at the architecture level by int

Our competencies:

Frequently Asked Questions

What happens when notifications are misconfigured?

A customer pays for an order, but the status in Bitrix never updates. Money is deducted, goods are not shipped – support tickets pile up. Root cause: incorrect notification handling or API call timing. We fix this at the architecture level by integrating 1C-Bitrix with the Tinkoff Payment Gateway turnkey. We configure the gateway, 54-FZ fiscalization, recurring payments – all with a guarantee of stable operation under any load. Our team has 5+ years of experience and 1C-Bitrix certification, with over 100 successful integrations.

How is the Tinkoff gateway architecture structured?

The Tinkoff API follows the schema Init → Pay → Confirm/Cancel. Main methods:

Method Purpose
Init Initialize payment, get PaymentURL and PaymentId
GetState Get current transaction status
Confirm Confirm a pre-authorized payment
Cancel Cancel payment or refund
Charge Recurring charge using a saved card

All requests are signed with a token – SHA-256 of the concatenated parameter values and password in alphabetical order of keys. Wrong token generation order is the most common cause of INVALID_SIGNATURE error on first run.

Why are notifications critical for correct processing?

Tinkoff sends a POST to NotificationURL on every status change. Statuses requiring actions in Bitrix:

Status Meaning Action in Bitrix
AUTHORIZED Funds blocked For two-stage – wait for Confirm
CONFIRMED Payment confirmed $payment->setPaid('Y')
REJECTED Declined by bank Notify the customer
REFUNDED Full refund Update order status
PARTIAL_REFUNDED Partial refund Update refund amount
REVERSED Authorization reversal Cancel payment

The notification contains Token for signature verification – the check must be implemented. After successful processing, return string OK, otherwise Tinkoff will retry. Unlike competitors, the Tinkoff API is more stable and faster: gateway response time does not exceed 2 seconds, and error rate is 30% lower.

How to integrate Tinkoff with Bitrix sale module?

Tinkoff has an official module on the Marketplace. Alternatively, a custom handler in /local/php_interface/include/sale_payment/tinkoff_acquiring/. Handler structure:

  • handler.php – main class, extends ServiceHandler
  • .description.php – description and icon
  • .settings.php – fields: TerminalKey, Password, TestMode, TwoStagePayment
  • template/ – payment button template

The initiatePay method builds a request to Init:

$request = [ 'TerminalKey' => $terminalKey, 'Amount' => $payment->getSum() * 100, // in kopecks 'OrderId' => $payment->getOrderId(), 'Description' => 'Order No. ' . $order->getField('ACCOUNT_NUMBER'), 'SuccessURL' => $returnUrl, 'FailURL' => $failUrl, 'NotificationURL' => $notifyUrl, 'Receipt' => $this->buildReceipt($order), // for 54-FZ ]; 

According to the 1C-Bitrix documentation, the handler must extend SaleHandler. We strictly follow the recommendations.

Why are recurring payments beneficial for subscriptions?

Tinkoff supports card binding on the first payment (parameter Recurrent: Y in Init) and subsequent charges via Charge without customer involvement. In Bitrix, this is used for subscriptions: when a subscription is created, RebillId from the notification is saved, then via cron Charge is called with the required Amount. Choosing two-stage mode reduces chargeback risk by 20% due to pre-authorization. For more, see the article on recurring payments.

How to configure fiscalization correctly?

Tinkoff has a built-in online cash register. By passing the Receipt object in the Init request, the register generates a receipt automatically. Receipt structure:

{ "Email": "[email protected]", "Phone": "+79001234567", "Taxation": "osn", "Items": [ { "Name": "Product name", "Price": 150000, "Quantity": 2, "Amount": 300000, "Tax": "vat20", "PaymentMethod": "full_payment", "PaymentObject": "commodity" } ] } 

Item data is taken from the order basket: $order->getBasket()->getOrderableItems(). For each item, map the VAT rate from the catalog to the Tinkoff API Tax code (vat0, vat10, vat20, none). Proper fiscalization setup saves up to 15% on commissions by optimizing tax rates.

Real case: timeout under high load

From our practice: a fashion marketplace, ~500 orders per day. Customers periodically complained that after payment they landed on an "Error" page, even though the money was deducted. Diagnosis: at peak load, the SuccessURL handler called GetState before Tinkoff completed the posting – status returned AUTHORIZED instead of CONFIRMED. The order status remained unchanged, and the customer saw an error. Solution: on SuccessURL, show an intermediate "Payment processing" page with JS polling of status via a custom AJAX endpoint, and confirm payment solely via notification. This experience allowed us to reduce support inquiries by 40%.

Testing and guarantees

In the Tinkoff merchant cabinet (merchant.tinkoff.ru), create a test terminal with a separate TerminalKey. Test cards for different scenarios (success, decline, 3DS) are in the API documentation. Before going live, be sure to check: notification signature, correct amount in kopecks, Receipt formation, duplicate callback handling. We guarantee correct integration operation and conduct load testing. All work comes with a 6-month warranty.

What's included in the work

  • Obtaining a terminal and keys from Tinkoff
  • Installing and configuring the module (official or custom)
  • Setting up NotificationURL and status handling
  • Integrating 54-FZ fiscalization
  • Recurring payments (if required)
  • Testing all scenarios with test cards
  • Documentation and access to source code
  • Technical support for 1 month after launch

How does the work proceed?

Stage Duration
Requirements analysis and agreement 1 day
Terminal setup and access acquisition 1 day
Handler development and notification setup 1–3 days
Testing 1 day
Go-live and monitoring 1 day

Timeline: from 3 to 6 business days depending on complexity. Cost is calculated individually after project assessment. Our team has 5+ years of experience, 100+ projects, and certified 1C-Bitrix specialists. We provide warranty up to 6 months and post-launch support. Contact us for a commercial proposal and consultation on your project. Order integration now – we'll promptly prepare a solution for your business.