Вернуться к статьям

Telegram Stars vs Stripe vs YooKassa для Mini Apps: что выбрать и как собрать без боли

10 мая 2026
13 мин чтения
AI-research draft
Telegram Stars vs Stripe vs YooKassa для Mini Apps: что выбрать и как собрать без боли

Практичное сравнение Telegram Stars, Stripe и YooKassa для монетизации Mini Apps: архитектуры, комиссии, риски чарджбеков, iOS/Google правила, код и прод‑подводные камни.

Неправильный выбор платежной схемы для Telegram Mini App стоит не только комиссии. Это риски блокировки на iOS, чарджбеки, провал конверсии и месяцы переделок. Этот разбор — как принять реалистичное решение и собрать монетизацию, которая выдержит продакшен.

Если коротко: для цифровых товаров внутри Telegram Stars — самый быстрый и бесшовный путь без чарджбеков, Stripe — для международных фиатных платежей и подписок, YooKassa — для РФ и 54‑ФЗ. В реальности часто нужен гибрид: Stars для iOS/цифры, Stripe/YooKassa для альтернатив и офлайн‑чеков.

Картина поля: как сегодня платят в Mini Apps

Telegram дал три жизнеспособные траектории монетизации Mini Apps:

  • Telegram Stars (внутренняя валюта XTR) — покупаются пользователем в Telegram, расходуются в ботах/мини‑приложениях на цифровые блага. Для создателей это отсутствие чарджбеков, нативный UX и соответствие правилам платформ (iOS/Android). Вывод происходит через экосистему TON и сторонние площадки, с рыночным спредом и KYC.
  • Stripe — глобальные карты, Apple Pay/Google Pay, банковские методы для большинства стран (кроме РФ и ряда регионов). Прозрачные webhooks, удобные подписки, возвраты, диспуты, отличная аналитика. Требует комплаенса и юрлица в поддерживаемой юрисдикции.
  • YooKassa — локальный лидер для РФ: карты МИР/Visa/MC (где применимо), СБП, кошелек, рассрочки. Автоматические чеки по 54‑ФЗ, интеграция с ОФД, быстрый онбординг под российские юрлица/ИП. Недоступен за пределами РФ как основной провайдер.

Почему это важно: цифровые товары на iOS обязаны идти через нативные платежи. Telegram решает это Stars — «внутренняя валюта» покупается в Telegram и тратится на цифровые сервисы, не нарушая политику магазинов. Фиатные обходы внутри Mini App на iOS для цифрового контента — риск блокировки. Значит выбор часто определяется не желанием «подключить Stripe», а требованием не сломать доступ к аудитории iPhone.

Типовые архитектуры монетизации

Ниже — три рабочие схемы, которые мы регулярно видим и собираем. Каждая закрывает свой контекст и боль.

1) Stars‑только для цифровых товаров

Поток:

  • Клиент: Telegram Mini App (WebApp) инициирует покупку.
  • Бэкенд: создает счет в звездах (XTR) через Bot API, сохраняет метаданные заказа, ждет подтверждения.
  • Telegram: показывает нативный платежный экран Stars.
  • Бот/бэкенд: получает successful_payment/invoice‑статус, выдает доступ к контенту/фиче.

Плюсы: идеальный UX, ноль чарджбеков, нет карт, соответствует iOS/Android правилам. Минусы: вывод в TON, волатильность и спред; пока ограниченный набор бухгалтерских инструментов для юрлиц.

Схема данных (упрощенно):

  • orders — id, user_id, amount_xtr, status=pending|paid|expired, payload (что покупаем), platform=webapp|bot.
  • events — raw_updates (audit), source=telegram|backend.

2) Гибрид: Stars для iOS + Stripe для остального мира

Поток:

  • При старте Mini App определяем платформу/регион. Для iOS/цифры — показываем Stars. Для Android/Web/desktop — даем Stripe в качестве опции (или оба метода на выбор).
  • Бэкенд создает либо createInvoiceLink в XTR, либо Stripe Checkout Session/PaymentIntent.
  • Финализация заказа идет по webhook’ам (Stripe) или апдейтам бота (Stars).

Плюсы: ловим максимум конверсии и международных платежей, подписки/купонка через Stripe. Минусы: усложнение UX, двойная бухгалтерия, синхронизация статусов и антидюбликаты.

3) РФ‑ориентированная модель: YooKassa + Stars как опционально

Поток:

  • Для РФ показываем YooKassa (СБП/карты/кошелек), автоматически пробиваем чеки по 54‑ФЗ.
  • Для пользователей на iOS, покупающих цифровые услуги — предлагаем Stars, чтобы не нарушать правила платформ.

Плюсы: высокий апрув рублевых платежей, чеки и ОФД «из коробки», СБП с низкой комиссией. Минусы: за пределами РФ — мало смысла; нужны локальные юрлица и документы.

Одна сухая шутка на дорожку: самый стабильный платежный метод — тот, куда пользователю не нужно вбивать цифры из пластика в 2026 году.

Конкретика: инструменты, потоки, код

Мы покажем базовые куски кода, которые действительно нужны в проде: валидация WebApp, создание инвойса в Stars, webhook Stripe, и идемпотентность.

Валидация Telegram WebApp initData

На входе фронт присылает window.Telegram.WebApp.initData. Бэкенд обязан проверить подпись HMAC‑SHA256 по токену бота.

import crypto from 'crypto';

export function validateInitData(initData: string, botToken: string): boolean {
  // Parse querystring-like initData
  const params = new URLSearchParams(initData);
  const hash = params.get('hash') || '';
  params.delete('hash');

  // Telegram requires fields sorted by key joined with '\n'
  const dataCheckString = [...params.entries()]
    .sort(([a], [b]) => a.localeCompare(b))
    .map(([k, v]) => `${k}=${v}`)
    .join('\n');

  const secret = crypto.createHmac('sha256', 'WebAppData').update(botToken).digest();
  const calc = crypto.createHmac('sha256', secret).update(dataCheckString).digest('hex');

  return calc === hash;
}

Храним user.id, auth_date и query_id для аудита. Не доверяем фронту ни цену, ни предмет покупки — только server‑side верификация.

Создание инвойса в Stars (XTR)

В Bot API для цифровых товаров можно выставлять счета в звездах. Сервер создает ссылку на инвойс и отдает ее фронту, который открывает платеж нативно.

// Пример на Node: createInvoiceLink для Stars
import fetch from 'node-fetch';

async function createStarsInvoice(botToken: string, payload: string, title: string, amountXTR: number) {
  const url = `https://api.telegram.org/bot${botToken}/createInvoiceLink`;
  const body = {
    title,
    description: title,
    payload, // ваш order_id / hash
    currency: 'XTR',
    prices: [{ label: title, amount: amountXTR }], // amount в минимальных единицах XTR
    // provider_token для Stars не требуется
  };
  const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
  const data = await res.json();
  if (!data.ok) throw new Error(JSON.stringify(data));
  return data.result as string; // invoice link
}

На фронте (Mini App) открываем ссылку через Telegram.WebApp.openInvoice(url, callback) и подписываемся на результат.

Stripe: Checkout + webhook

Для глобальных фиатных платежей и подписок — стандартный Checkout. Обязательно используйте идемпотентность и верификацию сигнатур.

import Stripe from 'stripe';
import express from 'express';

const stripe = new Stripe(process.env.STRIPE_KEY!, { apiVersion: '2023-10-16' });
const app = express();

app.post('/create-checkout', async (req, res) => {
  const { orderId, userId, priceCents, currency } = req.body;
  const session = await stripe.checkout.sessions.create({
    mode: 'payment',
    success_url: 'https://your.app/success?session_id={CHECKOUT_SESSION_ID}',
    cancel_url: 'https://your.app/cancel',
    line_items: [{ price_data: { unit_amount: priceCents, currency, product_data: { name: `Order ${orderId}` } }, quantity: 1 }],
    metadata: { orderId, userId },
  });
  res.json({ url: session.url });
});

// Webhook: важна «сырость» тела для проверки подписи
app.post('/stripe-webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const sig = req.headers['stripe-signature'] as string;
  let event: Stripe.Event;
  try {
    event = stripe.webhooks.constructEvent(req.body, sig, process.env.STRIPE_WEBHOOK_SECRET!);
  } catch (err) {
    return res.status(400).send(`Webhook Error: ${(err as Error).message}`);
  }

  if (event.type === 'checkout.session.completed') {
    const session = event.data.object as Stripe.Checkout.Session;
    const orderId = session.metadata?.orderId!;
    // идемпотентно помечаем заказ оплаченным и выдаем доступ
  }
  res.json({ received: true });
});

Если бэкенд на Java/Spring — правила те же (сырой body, сигнатура, идемпотентность). Мы подробно обсуждали прод‑нюансы в материале про эксплуатацию Spring в проде — см. разбор о продакшене Spring.

YooKassa: платеж + чек по 54‑ФЗ

С YooKassa ключевая деталь — формирование чека (предметы расчета, НДС, признак способа). Пример на Node очень сжат:

import axios from 'axios';

async function createYooPayment(amountRub: number, orderId: string) {
  const res = await axios.post('https://api.yookassa.ru/v3/payments', {
    amount: { value: (amountRub / 100).toFixed(2), currency: 'RUB' },
    capture: true,
    confirmation: { type: 'redirect', return_url: 'https://your.app/return' },
    description: `Order ${orderId}`,
    receipt: {
      customer: { email: 'user@example.com' },
      items: [{ description: 'Digital item', quantity: '1.00', amount: { value: (amountRub / 100).toFixed(2), currency: 'RUB' }, vat_code: 1, payment_subject: 'service', payment_mode: 'full_payment' }]
    },
    metadata: { orderId }
  }, { auth: { username: process.env.YK_SHOP_ID!, password: process.env.YK_SECRET! } });
  return res.data.confirmation.confirmation_url;
}

Webhook YooKassa сообщает финальный статус. Не забываем о повторных нотификациях и идемпотентном апдейте заказов.

Сравнение по критериям, которые реально важны

КритерийTelegram Stars (XTR)StripeYooKassa
ГеографияМировая аудитория Telegram45+ стран, нет РФРФ (локальные методы)
Тип товаровЦифровые в Mini Apps/ботахЦифровые и физическиеЦифровые и физические, чеки 54‑ФЗ
Комиссии/издержкиПокупка Stars у Telegram (включает наценки магазинов), вывод через TON со спредомОбычно ~2.9% + фикс за транзакцию (зависит от страны и метода)2–6% в зависимости от метода, СБП дешевле
ЧарджбекиНет классических чарджбековЕсть, нужно обрабатывать диспутыЕсть, но реже при СБП
ПодпискиОграниченно, нативных рекуррентных XTR нетСильные подписки/dunningЕсть рекуррент, но не везде
ВозвратыЧерез бота/поддержку, вручную в балансе StarsПолноценные Refund/Partial RefundRefund, с учетом фискализации
ОнбордингБыстро, без эквайрингаТребует юрлица/комплаенсаЮрлицо/ИП РФ, договор
Риск блокировки iOSМинимальный для цифровых товаровВысокий для цифровых на iOS в Mini AppВысокий для цифровых на iOS
Вывод средствЧерез TON, KYC/AML, курсНа расчетный счетНа расчетный счет в РФ

Вывод по таблице: если ваш основной продукт — цифровой контент/функции внутри Mini App и вам критичен iOS, Stars — базовый слой. Stripe дополняет глобальным фиатом и подписками, YooKassa — когда ваш core‑рынок РФ и нужны чеки.

Что ломается в продакшене

  • Гонки между webhook’ом и апдейтом бота. Stripe прислал paid, а Telegram‑инвойс еще «в пути» — или наоборот. Решаем через конечный автомат состояний заказа + идемпотентные транзакции в БД.
  • Двойное списание/двойная доставка. Пользователь дернул openInvoice дважды или сделал повторный клик в Stripe Checkout. Сохраняем orderId и payment_intent/invoice_payload, ставим уникальные ключи в deliveries(order_id).
  • Корректное определение платформы. iOS WebApp/встроенный браузер может вести себя иначе с редиректами. Для Stars используем openInvoice — без внешних переходов.
  • Валютные округления. Stripe работает в минимальных единицах (центах), Stars — в минимальных долях XTR. Не смешивать типы: отдельные поля amount_cents и amount_xtr.
  • Возвраты и доступы. Ревок фичи после рефанда должен быть идемпотентным и атомарным. Лучше «фичи по времени» (подписка) хранить в таблице прав, а не в произвольных полях профиля.
  • Антифрод. Для фиата — скорость роста чарджбеков, тестовые карты, «плата за подписку через прокси‑почты». Включите 3DS/обязательные SCA, velocity‑лимиты, проверку страны BIN.
  • Вывод Stars → TON. Риски: волатильность, задержки бирж, лимиты на KYC. Продумайте «внутреннюю отчетность» в XTR и фиатном эквиваленте на дату операции (аудит/налоги).
  • SLA нотификаций. В Stripe/YooKassa возможны задержки/повторы вебхуков. Telegram update’ы тоже не гарантируют немедленность. Ставьте TTL на заказы и фоновые reconcile‑таски (cron/queue).

Архитектура обработки платежей в очередях:

  • Очередь payments_incoming (source=stripe/yookassa/telegram), задача — валидация и нормализация в унифицированное событие PaymentSettled.
  • Сервис order_fsm: меняет состояния pending→paid→delivered с идемпотентными upsert’ами.
  • Сервис reconcile: раз в N минут сверяет заказы «paid, но не delivered» и добивает доставку/расследование.

UX и конверсия: детали, которые влияют на деньги

  • Показ цены в «звездах» и в локальной валюте. Пользователь должен понимать, сколько это «в рублях/долларах сегодня». Показываем подсказку, но сервер хранит «официальную» цену в XTR.
  • One‑tap платеж на iOS. Для Stars — это естественно; для Stripe внутри Telegram WebView — может потребоваться Payment Request API/Apple Pay (поддержка ограничена). Тестируйте реальные устройства.
  • Paywall до онбординга. В Mini Apps лучше сначала собрать профиль (телега уже отдала user_id), показать value, и только затем просить оплату. Конверсия выше.
  • Failover методов. Если Stripe не доступен стране — не показываем его вовсе. Аналогично для YooKassa за пределами РФ. Меньше лишних кнопок — выше CTR на оплату.

Право, налоги и совместимость с магазинами

  • Цифровые товары на iOS. Внутри Mini Apps нельзя проводить внешние фиатные платежи за цифровой контент без риска для приложения. Stars здесь — безопасный путь.
  • Физические товары и услуги офлайн. Можно брать фиат (Stripe/YooKassa) без Stars — и это нормально для политик магазинов.
  • 54‑ФЗ в РФ. Для расчетов с физлицами в РФ нужен чек. YooKassa формирует чеки автоматически (через ОФД). С Stars понадобится отдельная логика (агентский договор/самостоятельная фискализация при продаже услуг в РФ — консультируйтесь с бухгалтером).
  • НДС/НПД/самозанятые. Stripe/YooKassa дают данные для учета; по Stars потребуется своя модель признания дохода в момент расходования XTR/конвертации в фиат.

Сколько это стоит и когда окупается

  • Интеграция Stars: 3–7 рабочих дней на MVP (инвойсы, статусы, выдача доступа, базовый биллинг), 2–3 недели на прод‑уровень (рефанды, отчеты, reconcile, антидюбликаты). Себестоимость разработки — от 3–6k$ на базовый контур при готовом бэкенде.
  • Stripe: 1–2 недели на одноплатежный флоу (Checkout, webhook, статусы), 3–5 недель на подписки, купоны, прайс‑планирование, отчеты и disput‑воркфлоу. Плюс онбординг/комплаенс.
  • YooKassa: 1–2 недели на оплату + чеки, кастомная фискализация — добавляет время. На стороне бизнеса — договор, KYC, согласование витрины.
  • Операционные издержки: Stars — спред/волатильность + кассовый разрыв до вывода; Stripe — чарджбеки и fee; YooKassa — чек, ОФД, комиссия по методу.
  • ROI: гибрид Stars+Stripe почти всегда бьет «только Stripe» по выручке за счет iOS‑аудитории. Для РФ — YooKassa дает прирост апрува и доверия пользователю СБП.

Рекомендованные сценарии выбора

  • Вы продаете цифровые фичи (скины, уровни, подписка на контент): Stars по умолчанию для всего iOS/Android; Stripe как опция в десктопе/вебе и для подписок, где допустимо.
  • Вы продаете физические товары: Stripe/YooKassa (по гео) — основной метод; Stars не нужны.
  • Вы проектируете глобальный стартап с русскоязычной базой: гибрид Stars + YooKassa для РФ + Stripe для остального.
  • B2B/высокие чеки: дополнительно добавляйте инвойс‑платежи (банковские переводы/SEPA/SWIFT в Stripe или прямые реквизиты) — Mini App только генерирует счет и отслеживает статус.

FAQ

Поддерживают ли Stars рекуррентные платежи/подписки?

Пока нативного рекуррентного биллинга в Stars нет. Подписки реализуют как «доступ до даты N» с продлением вручную или через напоминания. Для классических автосписаний — используйте Stripe (или YooKassa, если гео РФ).

Можно ли продавать цифровые товары через Stripe на iOS внутри Mini App?

Формально это конфликтует с правилами магазинов. На практике безопаснее: для iOS показывать Stars для цифрового контента; Stripe/ЮKassa — только для физики/офлайна или за пределами iOS‑клиента (например, десктоп/веб‑линк вне приложения).

Как обрабатывать возвраты в Stars?

Денег «из банка» нет, есть учет в XTR. Возвраты делают как обратные операции в вашем боте/саппорте (вернуть XTR пользователю или компенсировать доступом). В отчетности фиксируем корректировки и держим аудит событий.

Как выводить доход из Stars и считать налоги?

Вывод через TON/площадки, дальше — конвертация в фиат. Налоги зависят от вашей юрисдикции. Часто доход признают на момент получения XTR или конвертации в фиат — консультуйтесь с бухгалтером в своей стране.

Что выбрать для РФ, если нужны чеки по 54‑ФЗ?

YooKassa. Она формирует чеки, интегрирована с ОФД и поддерживает популярные методы (СБП). Stars для цифровых покупок на iOS — как дополнительный метод, но вопрос фискализации решайте отдельно.

Как бороться с дублирующимися платежами и багами вебхуков?

Идемпотентные операции в БД, уникальные ключи на order_id, защита повторных доставок. Все внешние события (Stripe/YooKassa/Telegram) пишем в журнал и агрегируем в единый PaymentSettled с проверкой текущего состояния заказа.

Key takeaways

  • Stars — базовый метод для цифровых товаров в Mini Apps, особенно на iOS: высокий UX и отсутствие чарджбеков.
  • Stripe — универсальный фиат с подписками и глобальным покрытием; не подходит для РФ и рискован на iOS для цифрового контента.
  • YooKassa — лучший выбор для РФ с 54‑ФЗ и СБП; разумно сочетать со Stars для iOS‑покупок.
  • В продакшене спасают идемпотентность, конечные автоматы заказов и reconcile‑таски.
  • Не смешивайте учет: храните суммы отдельно в XTR и фиате, делайте аудит событий.
  • Часто выигрывает гибрид: Stars для iOS/цифры + Stripe/YooKassa для остального.

Если вы строите Mini App с оплатами и хотите не только «чтобы работало», но и чтобы не горело в проде — напишите нам. MTBYTE спроектирует и соберет гибридную платежную архитектуру, подключим Stars/Stripe/YooKassa и доведем до релиза без сюрпризов. Связаться: /contact