БлогУслугиКарьера
Обсудить проект
БлогУслугиКарьераОбсудить проект
Разработка сайтов

Банк тихо забирает 25 000 рублей с вашего сайта каждый месяц. Это можно остановить

Система быстрых платежей — это не только переводы по номеру телефона. Подключаем СБП к сайту через ЮКассу и Т-Банк: сравнение, код, подводные камни.

Редакция Feature
Редакция Feature·
4 апр
·
10 мин
·
Банк тихо забирает 25 000 рублей с вашего сайта каждый месяц. Это можно остановить

Классический эквайринг — это 1,5–2,5% с каждой транзакции. При обороте в миллион рублей в месяц вы отдаёте банку 15 000–25 000 рублей просто за то, что клиент заплатил картой.

СБП (Система быстрых платежей) по закону обходится дешевле: максимальная комиссия для большинства категорий бизнеса — 0,4–0,7%. Разница ощутимая.

Но самое интересное другое: СБП через QR-код или платёжную ссылку — это полноценная замена эквайрингу на сайте. Без терминала, без дорогостоящей интеграции с платёжной системой, и в большинстве случаев дешевле.

Разберём, как это работает и как подключить.

Как СБП работает для бизнеса

Для физических лиц СБП — это перевод по номеру телефона. Для бизнеса всё интереснее.

Три сценария приёма оплаты через СБП:

  1. QR-код на кассе — покупатель сканирует, подтверждает в приложении банка, деньги приходят мгновенно. Для офлайна.

  2. QR-код на сайте — генерируется динамический QR под конкретный заказ. Клиент сканирует смартфоном, оплачивает.

  3. Платёжная ссылка — вместо QR генерируется ссылка. На мобильном устройстве открывает приложение банка напрямую. Идеальный UX для мобильного трафика.

Для сайта нужен второй или третий вариант — или оба одновременно (QR для десктопа, ссылка для мобильных).

Через кого подключать

Напрямую подключиться к СБП как юрлицо можно, но это долго: нужно договариваться с банком-участником, проходить интеграцию. Для большинства малого и среднего бизнеса проще через платёжный агрегатор.

ЮКасса (бывший Яндекс.Касса)

  • Комиссия СБП: 0,4% для большинства категорий
  • Подключение: онлайн за 1–3 дня
  • SDK: Python, PHP, Node.js, Java
  • Документация: хорошая, с примерами
  • Плюс: встроенная поддержка 54-ФЗ (чеки)

Т-Банк (Тинькофф) Эквайринг

  • Комиссия СБП: 0,4%
  • Подключение: 1–2 дня если уже клиент банка
  • SDK: Python, PHP, Node.js
  • Документация: средняя
  • Плюс: если уже работаете с Тинькофф — минимум бюрократии

CloudPayments

  • Комиссия СБП: 0,5%
  • Подключение: 2–5 дней
  • Плюс: хорошее API, много интеграций

Рекомендуем ЮКассу — у неё лучшая документация и минимальные комиссии.

Интеграция через ЮКассу: пошагово

Установка:

pip install yookassa

Конфигурация:

from yookassa import Configuration, Payment
import uuid

Configuration.account_id = "ВАШ_SHOP_ID"
Configuration.secret_key = "ВАШ_СЕКРЕТНЫЙ_КЛЮЧ"

Создание платежа с СБП

from yookassa import Payment
from yookassa.domain.models import Currency
import uuid
from decimal import Decimal

def create_sbp_payment(
    amount: Decimal,
    order_id: str,
    description: str,
    return_url: str
) -> dict:
    """
    Создаём платёж через СБП.
    Возвращает confirmation_url для редиректа пользователя.
    """
    payment = Payment.create({
        "amount": {
            "value": str(amount),
            "currency": Currency.RUB
        },
        "payment_method_data": {
            "type": "sbp"
        },
        "confirmation": {
            "type": "redirect",
            "return_url": return_url
        },
        "capture": True,  # Автоматическое подтверждение
        "description": description,
        "metadata": {
            "order_id": order_id
        },
        "receipt": {
            "customer": {
                "phone": "+79001234567"  # Телефон покупателя для чека
            },
            "items": [
                {
                    "description": description,
                    "quantity": "1.00",
                    "amount": {
                        "value": str(amount),
                        "currency": Currency.RUB
                    },
                    "vat_code": 1,  # НДС не облагается
                    "payment_mode": "full_payment",
                    "payment_subject": "service"
                }
            ]
        }
    }, uuid.uuid4())
    
    return {
        "payment_id": payment.id,
        "status": payment.status,
        "confirmation_url": payment.confirmation.confirmation_url
    }

Нужна оплата на сайте?

Подключим СБП, карты или любой другой способ оплаты — быстро и с полной документацией

Подключить оплату на сайте

Обработка webhook-уведомлений

ЮКасса отправляет уведомление, когда платёж успешно проведён. Нужен эндпоинт для его обработки:

from fastapi import FastAPI, Request, HTTPException
from yookassa import Payment
import hmac
import hashlib
import json

app = FastAPI()

YOOKASSA_SECRET = "ВАШ_СЕКРЕТНЫЙ_КЛЮЧ"

@app.post("/webhook/yookassa")
async def yookassa_webhook(request: Request):
    body = await request.body()
    
    # Верификация подписи
    signature = request.headers.get("X-Request-Id", "")
    # ЮКасса не использует HMAC, но проверяйте IP-адрес отправителя
    # Список доверенных IP: 185.71.76.0/27, 185.71.77.0/27, 77.75.153.0/25
    
    data = json.loads(body)
    event = data.get("event")
    payment_object = data.get("object", {})
    
    if event == "payment.succeeded":
        payment_id = payment_object["id"]
        order_id = payment_object.get("metadata", {}).get("order_id")
        amount = payment_object["amount"]["value"]
        
        # Помечаем заказ как оплаченный в вашей БД
        await mark_order_paid(order_id, payment_id, amount)
        
    elif event == "payment.canceled":
        order_id = payment_object.get("metadata", {}).get("order_id")
        await mark_order_canceled(order_id)
    
    return {"status": "ok"}


async def mark_order_paid(order_id: str, payment_id: str, amount: str):
    # Ваша логика обновления заказа в БД
    pass

async def mark_order_canceled(order_id: str):
    # Ваша логика отмены заказа
    pass

Проверка статуса платежа

Для случаев, когда webhook не дошёл (у пользователя плохой интернет, закрыл вкладку):

def check_payment_status(payment_id: str) -> str:
    """Возвращает: pending, succeeded, canceled"""
    payment = Payment.find_one(payment_id)
    return payment.status

Фронтенд: QR и мобильная ссылка

// PaymentPage.tsx
import { useState } from 'react';

interface SBPPayment {
  payment_id: string;
  confirmation_url: string;
}

function PaymentPage({ orderId, amount }: { orderId: string; amount: number }) {
  const [payment, setPayment] = useState<SBPPayment | null>(null);
  const [loading, setLoading] = useState(false);

  const initPayment = async () => {
    setLoading(true);
    const res = await fetch('/api/payment/create', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ orderId, amount }),
    });
    const data = await res.json();
    setPayment(data);
    setLoading(false);
  };

  const isMobile = /iPhone|Android/i.test(navigator.userAgent);

  if (payment) {
    return (
      <div className="payment-block">
        {isMobile ? (
          // На мобильном — прямая ссылка, открывает приложение банка
          <a href={payment.confirmation_url} className="btn-sbp">
            Оплатить через СБП
          </a>
        ) : (
          // На десктопе — QR-код для сканирования телефоном
          <div>
            <p>Отсканируйте QR-код в приложении вашего банка</p>
            <img 
              src={`https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(payment.confirmation_url)}&size=250x250`}
              alt="QR-код для оплаты СБП"
            />
          </div>
        )}
      </div>
    );
  }

  return (
    <button onClick={initPayment} disabled={loading}>
      {loading ? 'Создаём платёж...' : `Оплатить ${amount} ₽ через СБП`}
    </button>
  );
}

Подводные камни

Чеки по 54-ФЗ. СБП — это полноценный способ оплаты, и если вы работаете с физлицами, чек обязателен. ЮКасса умеет это из коробки, если передать данные о товарах при создании платежа (пример выше).

Возвраты. СБП поддерживает возвраты через API — деньги возвращаются на счёт покупателя в течение 5 дней. ЮКасса предоставляет метод Payment.cancel() для отмены и Refund.create() для возврата по уже прошедшему платежу.

Лимиты. По умолчанию СБП позволяет переводить до 100 000 рублей за одну операцию. Для крупных платежей нужно уточнять у банка-партнёра.

Тестирование. ЮКасса предоставляет тестовую среду с sandbox-режимом. Обязательно протестируйте полный цикл: создание → оплата → webhook → статус.

Обсудим ваш проект?

Оставьте контакты — перезвоним и обсудим задачу

Сравнение: СБП vs карты

Параметр СБП Карты (эквайринг)
Комиссия 0,4–0,7% 1,5–2,5%
Скорость зачисления Мгновенно 1–3 рабочих дня
Терминал Не нужен Нужен для офлайна
Конверсия (десктоп) Чуть ниже Выше
Конверсия (мобайл) Сравнимо Сравнимо
Чарджбэк Нет Есть (риск)

Вывод: для мобильного трафика и небольших сумм СБП выгоднее. Для крупных покупок с десктопа — стоит предложить оба варианта.

Итог

СБП — это реальная альтернатива эквайрингу, особенно для мобильного e-commerce. Экономия на комиссии может быть значительной при хорошем обороте.

Технически интеграция несложная: агрегатор (ЮКасса), создание платежа, webhook для подтверждения. На готовом Next.js или FastAPI проекте это занимает 1–2 дня.

Если хотите подключить СБП на вашем сайте — обсудим детали. Расскажем, что подойдёт в вашем случае и сколько это стоит.


Читайте также

  • Интеграция 1С с сайтом через API: полный гайд
  • Лендинг под ключ: этапы разработки и реальные сроки
  • Автоматизация бизнес-процессов: реальные кейсы и цифры

Обсудим ваш проект?

Оставьте контакты — перезвоним и обсудим задачу

Содержание
  • Как СБП работает для бизнеса
  • Через кого подключать
  • Интеграция через ЮКассу: пошагово
  • Подводные камни
  • Сравнение: СБП vs карты
  • Итог
  • Читайте также
Поделиться:

Похожие статьи

За одну галочку на сайте штраф 18 миллионов рублей. Есть ли она у вас?
Разработка сайтов

За одну галочку на сайте штраф 18 миллионов рублей. Есть ли она у вас?

10 мин
Headless CMS для Next.js: Contentful vs Strapi vs Sanity
Разработка сайтов

Headless CMS для Next.js: Contentful vs Strapi vs Sanity

14 мин
Адаптивный дизайн с Tailwind CSS: best practices 2026
Разработка сайтов

Адаптивный дизайн с Tailwind CSS: best practices 2026

12 мин
Feature IT

Feature IT — платформа по обучению программированию и разработке цифровых продуктов. Мы создаём современные веб-решения для бизнеса и обучаем этому других!

Политика конфиденциальностиПользовательское соглашение

О компании

  • Блог
  • Карьера

Услуги разработки

  • Разработка сайтов под ключ
  • Веб-приложения на React/Next.js
  • Telegram-боты для бизнеса
  • Mini Apps (Telegram, VK)
  • SEO-оптимизированные сайты
  • Автоматизация бизнес-процессов
  • Поддержка и развитие IT-продуктов

Обучение

  • Курс Python с нуля
  • Алгоритмы и структуры данных
  • Паттерны проектирования
  • Подготовка к собеседованиям в IT
  • Практика на реальных проектах

Инструменты

  • Генератор UTM-меток
  • Счётчик символов