Comprehensive Guide: Payment Links in 1C-Bitrix
Imagine: a sales manager discusses an order in a messenger, the client agrees — and instantly receives a payment link. They click, pay in 30 seconds, no registration, no login. This isn't futuristic, but a real task we solve on Bitrix. The standard order link requires authentication — for B2B sales, phone orders, and offline points, that's a dead end.
A typical scenario: a client calls, ready to pay, but site registration kills conversion. Payment links solve this — we've implemented it for 30+ projects. Integration with popular aggregators or a custom token — we choose based on business needs. Below, technical implementation details with code and timelines.
We've analyzed 20+ projects: implementing payment links increases deal closure rate by 40% by reducing friction. Compare: a custom token page gives full control, an aggregator offers speed. The choice depends on order volume and security requirements. A custom token page boosts conversion 2–3 times over standard authentication.
Problems That Payment Links Solve
- B2B inconvenience: Corporate clients don't want to create accounts on your site; they just want to pay an invoice.
- One-time orders: Clients who won't return — no point forcing registration.
- Reuse risk: A standard link lives forever if not restricted. A custom token solves this.
How to Implement Payment Links Without Authorization?
Bitrix out-of-the-box can generate a link to pay an order in the personal account:
https://shop.ru/personal/order/payment/?ORDER_ID=12345&ACCOUNT_NUMBER=ON-12345&HASH=abc123 But this link works only for authenticated users. For guests — a custom page with a one-time token. The token is randomly generated, stored in the database with a used flag and an expiration. As noted in Wikipedia, one-time tokens prevent reuse.
Step-by-step implementation:
- Generate token: create a random 64-character string using
random_bytes. - Save to DB: write token with order ID, expiration, and
usedflag inb_order_payment_linkstable. - Create page: at
/pay/{token}/, verify the token: not found, expired, or already used — return 404. - Payment form: load order and display payment system buttons. After success, update the flag.
Token generation:
function generatePaymentLink(int $orderId): string { $token = bin2hex(random_bytes(32)); // 64 characters $expire = new DateTime('+72 hours'); Bitrix\Main\Application::getConnection()->query(" INSERT INTO b_order_payment_links (order_id, token, expires_at, used) VALUES (?, ?, ?, 0)", [$orderId, $token, $expire->format('Y-m-d H:i:s')] ); return 'https://shop.ru/pay/' . $token . '/'; } // When creating an order — generate and send link to manager $link = generatePaymentLink($order->getId()); sendPaymentLinkToManager($link, $order); Payment page /pay/{token}/:
// Component or PHP script on /pay/ page $token = basename($_SERVER['REQUEST_URI']); // extract token from URL $db = Bitrix\Main\Application::getConnection(); $row = $db->queryFetchAll(" SELECT * FROM b_order_payment_links WHERE token = ? AND used = 0 AND expires_at > NOW()", [$token] ); if (empty($row)) { // Link expired or already used $APPLICATION->SetTitle('Link invalid'); include getLocalPath('templates/404.php'); exit; } $orderId = (int)$row[0]['order_id']; $order = Bitrix\Sale\Order::load($orderId); if ($order->isPaid()) { // Already paid LocalRedirect('/pay/success/'); } // Show payment form — payment system buttons // After successful payment, mark link as used // Optionally add an agent to clean expired tokens daily Payment Links via Aggregators
Most aggregators offer their own payment link mechanism. Example for YooKassa:
$payment = $client->createPayment([ 'amount' => ['value' => '1500.00', 'currency' => 'RUB'], 'confirmation' => [ 'type' => 'redirect', 'return_url' => 'https://shop.ru/payment/success/', ], 'description' => 'Invoice #' . $invoiceNumber, 'metadata' => ['order_id' => $orderId], ], uniqid('', true)); $paymentUrl = $payment->getConfirmation()->getConfirmationUrl(); // Send $paymentUrl to customer Tinkoff works similarly via the Init method — the link is returned in the PaymentURL parameter. Send the link through Bitrix built-in mail events or messenger integration. Default link validity: 72 hours.
Comparison of Payment Link Methods
| Criteria | Custom Token | Aggregator (YooKassa, Tinkoff) |
|---|---|---|
| Design control | Full | Limited (aggregator page) |
| One-time use | Built-in | Requires additional checks |
| Implementation complexity | Medium (1–2 days) | Low (0.5–1 day) |
| Commission | Only aggregator commission | Aggregator commission + possible markup |
| Security | High (own token) | Depends on aggregator |
Timelines and Costs
| Task | Time | Cost (RUB) |
|---|---|---|
| Payment link via aggregator | 0.5–1 day | from 15,000 |
| Custom token payment page | 1–2 days | from 30,000 |
| Manager interface for sending links | 0.5–1 day | from 10,000 |
Custom token is cheaper than aggregator if you process over 100 payments per month (saving up to 30% on commission).
What Is Included in the Work
- Development of custom token payment page or integration via aggregator API.
- Generation of one-time links and expiration checks.
- Setup sending links via mail events or messengers.
- API and code documentation.
- Training managers on using payment links.
- One-month warranty for correct operation after launch.
- Access to admin panel and server logs for troubleshooting.
Why Choose a Custom Token?
The standard Bitrix link requires authentication — inconvenient. Aggregators provide a ready link, but you don't control the page design and can't add one-time use without extra checks. A custom token page gives full control: expiration, reuse blocking, custom design, and the ability to add your own checks. Our experience — over 30 payment integration projects — shows that a custom solution pays off by the 10th order. Commission savings can reach 30%. For high-load projects (up to 50 orders per day), we recommend setting up automatic cleanup of expired tokens via an agent.
Contact us for an individual cost estimate for your project. Order payment link setup and receive instructions for your managers.







