From 18613eee7723a94346d81b7325501e82da1476bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=20=28Claude=29?= Date: Thu, 11 Jun 2026 18:45:32 +0300 Subject: [PATCH] feat: YuKassa checkout button on /plans + API route MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /plans: кнопка Подключить → fetch /api/billing/checkout → redirect to ЮKassa app/api/billing/checkout/route.js — прокси к engine --- app/api/billing/checkout/route.js | 15 +++++++++++++++ app/plans/page.js | 12 +++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 app/api/billing/checkout/route.js diff --git a/app/api/billing/checkout/route.js b/app/api/billing/checkout/route.js new file mode 100644 index 0000000..1d650f2 --- /dev/null +++ b/app/api/billing/checkout/route.js @@ -0,0 +1,15 @@ +import { NextResponse } from 'next/server'; +import { requireUser } from '@/lib/session'; +import { engine } from '@/lib/engine'; + +export async function POST(req) { + const user = await requireUser(); + if (!user) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); + try { + const { plan_code } = await req.json(); + const data = await engine.call('/api/billing/checkout', { + userId: user.id, method: 'POST', body: { plan_code }, + }); + return NextResponse.json(data); + } catch (err) { return NextResponse.json({ error: err.message }, { status: 500 }); } +} diff --git a/app/plans/page.js b/app/plans/page.js index 30b73f4..c57cf74 100644 --- a/app/plans/page.js +++ b/app/plans/page.js @@ -96,7 +96,17 @@ export default function PlansPage() { Начать бесплатно ) : ( )}