Integruj płatności z moją aplikacją
Użyj Proyecta SDK, aby tworzyć klientów, uruchamiać checkouty, blokować funkcje i anulować subskrypcje z poziomu kodu aplikacji.
Po podłączeniu Stripe i utworzeniu produktu, integrujesz płatności z aplikacją za pomocą zasobu SDK proyecta.commerce. Cztery najczęstsze operacje to: utworzenie klienta, uruchomienie checkoutu, sprawdzenie dostępu do funkcji i anulowanie subskrypcji.
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });1. Utwórz klienta
Dział zatytułowany „1. Utwórz klienta”Klient to podmiot rozliczeniowy w Twojej aplikacji — zazwyczaj użytkownik, organizacja lub projekt. Utwórz go od razu po tym, jak odpowiadający mu rekord pojawi się w Twojej bazie danych, a następnie zapisz zwrócone id, aby móc odwoływać się do klienta przy checkoutach i sprawdzaniu dostępu.
const customer = await proyecta.commerce.customers.create({ email: 'alice@example.com', name: 'Alice Liddell',});
await db.users.update({ id: userId, proyectaCustomerId: customer.id });Możesz też podać adres rozliczeniowy (line1, line2, city, state, postal_code, country) podczas tworzenia lub za pomocą customers.update().
2. Uruchom checkout
Dział zatytułowany „2. Uruchom checkout”commerce.checkout() tworzy sesję checkout hostowaną przez Stripe i zwraca URL, na który należy przekierować klienta. Po dokonaniu płatności Stripe przekierowuje klienta na podany 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);Obsługiwanych jest wiele elementów line_items. W przypadku subskrypcji quantity oznacza liczbę miejsc (seat count).
3. Sprawdź dostęp do funkcji
Dział zatytułowany „3. Sprawdź dostęp do funkcji”Zanim pozwolisz klientowi skorzystać z funkcji premium, wywołaj commerce.check(), aby zweryfikować, czy ma do niej dostęp:
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 });}To jest zalecany sposób blokowania treści premium. Zobacz Produkty i funkcje, aby zapoznać się z modelem funkcji i uprawnień.
4. Anuluj subskrypcję
Dział zatytułowany „4. Anuluj subskrypcję”await proyecta.commerce.cancel({ customer_id: customer.id, subscription_id: 'sub_123', cancellation_timing: 'at_billing_period_end', // lub 'immediate'});Domyślnie klient zachowuje dostęp do końca bieżącego okresu rozliczeniowego.
Pozwól AI wszystko połączyć
Dział zatytułowany „Pozwól AI wszystko połączyć”Nie musisz pisać tego samodzielnie. Przykładowe podpowiedzi (prompty):
"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."