Ir al contenido

Integrar Comercio en Mi App

Usa el SDK de Proyecta para crear clientes, iniciar checkouts, restringir funciones y cancelar suscripciones desde el código de tu app.

Una vez que hayas conectado Stripe y creado un producto, integras el comercio en tu app mediante el recurso SDK proyecta.commerce. Las cuatro operaciones más comunes son: crear un cliente, iniciar un checkout, verificar acceso a funciones y cancelar una suscripción.

import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });

Un cliente es la entidad facturable en tu app — generalmente un usuario, una organización o un proyecto. Créalo en cuanto se cree la entidad correspondiente en tu base de datos y guarda el id devuelto para poder hacer referencia al cliente en checkouts y verificaciones de acceso.

const customer = await proyecta.commerce.customers.create({
email: 'alice@example.com',
name: 'Alice Liddell',
});
await db.users.update({ id: userId, proyectaCustomerId: customer.id });

También puedes pasar una dirección de facturación (line1, line2, city, state, postal_code, country) al momento de la creación o mediante customers.update().

commerce.checkout() crea una sesión de checkout hospedada en Stripe y devuelve una URL a la que redirigir al cliente. Después del pago, Stripe redirige al cliente a tu 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);

Se admiten múltiples line_items. Para suscripciones, quantity representa la cantidad de asientos.

Antes de permitir que un cliente use una función premium, llama a commerce.check() para verificar que tenga acceso:

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 });
}

Esta es la forma recomendada de restringir contenido premium. Consulta Productos y Funciones para conocer el modelo de funciones y permisos.

await proyecta.commerce.cancel({
customer_id: customer.id,
subscription_id: 'sub_123',
cancellation_timing: 'at_billing_period_end', // or 'immediate'
});

Por defecto, el cliente mantiene el acceso hasta el final del período de facturación.

No necesitas escribir esto a mano. Algunos prompts comunes:

  • "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."