diff --git a/app/page.tsx b/app/page.tsx index 226b778..cb38194 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -144,8 +144,8 @@ export default function Home() { } }; const shareReferralLink = async () => { - // Генерируем реферальную ссылку (TODO: заменить на реальный user ID после авторизации) - const userId = subscriptionToken?.split('_')[0] || 'DEMO'; + // Генерируем реферальную ссылку — используем полный subscriptionToken (= Marzban username) + const userId = subscriptionToken || 'DEMO'; const botUsername = process.env.NEXT_PUBLIC_TELEGRAM_BOT_USERNAME || 'Dorod_vps_bot'; const referralUrl = `https://t.me/${botUsername}?start=ref_${userId}`; const shareText = `🚀 Попробуй Umbrix VPN - быстрый и безопасный VPN!\n\n✨ Получи 7 дней бесплатно по моей ссылке:\n${referralUrl}`; @@ -175,9 +175,19 @@ export default function Home() { const handleActivateTrial = async () => { setIsLoading(true); try { - // Получаем referrerId из URL (если есть) + // Получаем referrerId из URL query ИЛИ из Telegram start_param const urlParams = new URLSearchParams(window.location.search); - const referrerId = urlParams.get('ref'); + let referrerId = urlParams.get('ref'); + + // Также проверяем Telegram start_param (приоритетнее) + const telegramWebApp = (window as any).Telegram?.WebApp; + const startParam = telegramWebApp?.initDataUnsafe?.start_param; + if (startParam && startParam.startsWith('ref_')) { + referrerId = startParam.replace('ref_', ''); + } + + // Получаем реальные данные Telegram + const tgUser = telegramWebApp?.initDataUnsafe?.user; // Создаем trial подписку через API const response = await fetch('/api/create-user', { @@ -185,9 +195,9 @@ export default function Home() { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ planType: 'trial', - telegramId: Date.now(), // Временно, пока нет настоящего Telegram ID - telegramUsername: 'demo_user', - firstName: 'Demo', + telegramId: tgUser?.id || Date.now(), + telegramUsername: tgUser?.username || undefined, + firstName: tgUser?.first_name || undefined, referrerId: referrerId || undefined, }), }); @@ -520,13 +530,13 @@ export default function Home() { setIsReferralOpen(false)} - referralUrl={`https://t.me/${process.env.NEXT_PUBLIC_TELEGRAM_BOT_USERNAME || 'Dorod_vps_bot'}?start=ref_${subscriptionToken?.split('_')[0] || 'DEMO'}`} + referralUrl={`https://t.me/${process.env.NEXT_PUBLIC_TELEGRAM_BOT_USERNAME || 'Dorod_vps_bot'}?start=ref_${subscriptionToken || 'DEMO'}`} onShare={() => { shareReferralLink(); setIsReferralOpen(false); }} onCopy={() => { - const userId = subscriptionToken?.split('_')[0] || 'DEMO'; + const userId = subscriptionToken || 'DEMO'; const botUsername = process.env.NEXT_PUBLIC_TELEGRAM_BOT_USERNAME || 'Dorod_vps_bot'; const referralUrl = `https://t.me/${botUsername}?start=ref_${userId}`; copyToClipboard(referralUrl); diff --git a/app/plans/page.tsx b/app/plans/page.tsx index e4d395d..f5c3aa1 100644 --- a/app/plans/page.tsx +++ b/app/plans/page.tsx @@ -45,10 +45,10 @@ const PLANS: Record = { maxLocations: 1, dataLimit: '50 ГБ', prices: { - '1month': 149, - '3months': 399, // -11% (133₽/мес) - '6months': 719, // -20% (119₽/мес) - '1year': 1349, // -25% (112₽/мес) + '1month': 99, + '3months': 269, // -9% (89₽/мес) + '6months': 499, // -16% (83₽/мес) + '1year': 949, // -20% (79₽/мес) }, }, plus: { diff --git a/app/referral/page.tsx b/app/referral/page.tsx index 4936cbf..f10b243 100644 --- a/app/referral/page.tsx +++ b/app/referral/page.tsx @@ -50,7 +50,8 @@ export default function ReferralPage() { return; } - const userId = token.split('_')[0]; + // subscriptionToken = Marzban username (полное имя, НЕ split по _) + const userId = token; setUsername(userId); // Generate referral URL diff --git a/components/OnboardingFlow.tsx b/components/OnboardingFlow.tsx index 07b4b34..48a481c 100644 --- a/components/OnboardingFlow.tsx +++ b/components/OnboardingFlow.tsx @@ -27,7 +27,7 @@ const PLANS: Plan[] = [ { id: 'basic', name: 'Старт', - price: 149, + price: 99, features: ['Безлимитный трафик', 'До 3 устройств', 'Стандартная скорость', 'Email поддержка'], icon: Shield, },