Интеграция коммерции в приложение
Используйте Proyecta SDK для создания клиентов, запуска оформления заказов, ограничения доступа к функциям и отмены подписок из кода приложения.
После подключения Stripe и создания продукта вы интегрируете коммерцию в приложение через ресурс SDK proyecta.commerce. Четыре наиболее распространённых операции: создать клиента, запустить оформление заказа, проверить доступ к функции и отменить подписку.
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });1. Создание клиента
Заголовок раздела «1. Создание клиента»Клиент — это оплачиваемая сущность в вашем приложении: как правило, пользователь, организация или проект. Создавайте клиента сразу после того, как соответствующая сущность появляется в базе данных, и сохраняйте возвращаемый id, чтобы ссылаться на клиента при оформлении заказов и проверке доступа.
const customer = await proyecta.commerce.customers.create({ email: 'alice@example.com', name: 'Alice Liddell',});
await db.users.update({ id: userId, proyectaCustomerId: customer.id });Также можно передать адрес для выставления счёта (line1, line2, city, state, postal_code, country) при создании или через customers.update().
2. Запуск оформления заказа
Заголовок раздела «2. Запуск оформления заказа»commerce.checkout() создаёт сессию оформления заказа, размещённую на стороне Stripe, и возвращает URL для перенаправления клиента. После оплаты Stripe перенаправляет клиента на ваш success_url.
const { url } = await proyecta.commerce.checkout({ customer_id: customer.id, line_items: [{ variant_id: 'var_pro_monthly', quantity: 1 }], success_url: 'https://myapp.com/welcome', cancel_url: 'https://myapp.com/pricing',});
return Response.redirect(url);Поддерживается несколько line_items. Для подписок quantity означает количество мест.
3. Проверка доступа к функции
Заголовок раздела «3. Проверка доступа к функции»Прежде чем разрешить клиенту воспользоваться премиальной функцией, вызовите commerce.check() для проверки наличия доступа:
const { has_access } = await proyecta.commerce.check({ customer_id: customer.id, resource_id: 'feat_pro_features',});
if (!has_access) { return Response.json({ error: 'Upgrade required' }, { status: 402 });}Это рекомендуемый способ ограничения доступа к премиальному контенту. Подробнее о модели функций и прав доступа читайте в разделе Продукты и функции.
4. Отмена подписки
Заголовок раздела «4. Отмена подписки»await proyecta.commerce.cancel({ customer_id: customer.id, subscription_id: 'sub_123', cancellation_timing: 'at_billing_period_end', // или 'immediate'});По умолчанию клиент сохраняет доступ до конца текущего расчётного периода.
Доверьте интеграцию ИИ
Заголовок раздела «Доверьте интеграцию ИИ»Писать этот код вручную не обязательно. Примеры готовых запросов:
"Create a Proyecta customer when a user signs up. Store the proyecta_customer_id on the user record.""Build a /pricing page that shows my Proyecta products and starts a checkout when a button is clicked.""Gate the /admin route — only allow users whose Proyecta customer has access to feat_admin.""When a user clicks Cancel Subscription, call proyecta.commerce.cancel with at_billing_period_end."