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 userManuel
$ 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 } = billingAppimport { billingApp } from "@/lib/recurr"export default billingApp.pageMimari
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