recurr.

PayTR'de abonelik yok mu? recurr senin için halleder.

Install with AI
You are installing **recurr** — a PayTR subscription layer for Next.js.## Important: When to ask the user
Manuel
$ npm install @vinenastudio/recurr
$ npm install @vinenastudio/recurr-nextjs
01

Sıfır Bağımlılık

Çekirdek paket hiçbir şey getirmez. Geçişli bağımlılık yok. Gerçekten sıfır.

02

Veritabanı Bağımsız

Prisma mı, Drizzle mı, Mongoose mı — fark etmez. Tek bir arayüzü uygula, gerisi recurr'a kalmış.

03

PayTR Uyumlu

PayTR Direct API için tasarlandı. utoken, ctoken ve HMAC-SHA256 imzalarını yönetir.

04

Esnek Planlar

Trial, haftalık, aylık, yıllık — istediğin planı tanımla. recurr faturalamayı senin kurallarına göre çalıştırır.

Entegrasyon

Tek route.
Her şey hazır.

Tek bir catch-all route; planları, ödeme akışını, webhook'ları, cron faturalamayı ve yönetim panelini karşılar. Bir kez yaz, unut.

GET /plansTüm planları JSON olarak döndürür
POST /checkoutPayTR form alanlarını hazırlar
POST /webhookPayTR olaylarını doğrular ve işler
GET /cronVadesi gelen aboneleri tahsil eder
GET /subscriberAbonelik durumunu sorgular
POST /cancelAboneliği iptal eder
import { PayTRClient, SubscriptionManager } from "@vinenastudio/recurr"import { Management, createBillingApp } from "@vinenastudio/recurr-nextjs"import { adapter } from "./adapter"export const management = new Management({  username: process.env.ADMIN_USER ?? "admin",  password: process.env.ADMIN_PASS ?? "changeme",})export const paytrClient = new PayTRClient({  merchantId:   process.env.PAYTR_MERCHANT_ID!,  merchantKey:  process.env.PAYTR_MERCHANT_KEY!,  merchantSalt: process.env.PAYTR_MERCHANT_SALT!,})export const subscriptionManager = new SubscriptionManager(  paytrClient,  adapter,  {    appUrl: process.env.NEXT_PUBLIC_APP_URL!,    onPaymentFailed: async (subscriber, attempt, max) => {},    onSubscriptionCancelled: async (subscriber) => {},  })export const billingApp = createBillingApp({  client: paytrClient,  adapter,  subscriptionManager,  management,  secret:      process.env.CRON_SECRET!,  appUrl:      process.env.NEXT_PUBLIC_APP_URL!,  successPath: "/billing/success",})
import { billingApp } from "@/lib/recurr"export const { GET, POST } = billingApp
import { billingApp } from "@/lib/recurr"export default billingApp.page
Mimari

Veritabanını seç.
Biz karışmayız.

Tek bir arayüz uygula. Prisma da çalışır, ham SQL de, Drizzle de.

Your Application
Next.js
@vinenastudio/recurr-nextjs
Router · Portal UI · Management
@vinenastudio/recurr
PayTRClient · SubscriptionManager
Your Adapter
Prisma · Drizzle · Mongoose · …
Karmaşıklığı biz taşıyalım

Daha az kod.
Daha fazla abonelik.

Dokümantasyonu Oku →
recurr@vinenastudio