Next.js
createBillingRouter
Tüm billing endpoint'lerini tek bir Next.js route handler ile yönetin
Kullanım
import { createBillingRouter } from '@vinenastudio/recurr/nextjs'
import { adapter, subscriptionManager, paytrClient, management } from '@/lib/subscriptions'
const router = createBillingRouter({
client: paytrClient,
adapter,
subscriptionManager,
secret: process.env.CRON_SECRET!,
appUrl: process.env.NEXT_PUBLIC_APP_URL!,
successPath: '/billing/success',
management, // opsiyonel — yönetim panelini korumak için
onPaymentSuccess: async ({ subscriber, payment }) => {
await sendWelcomeEmail(subscriber.email)
},
onPaymentFailure: async ({ subscriber, payment, reason }) => {
await sendPaymentFailedEmail(subscriber?.email, reason)
},
onSubscriptionCancelled: async ({ subscriber }) => {
await revokeAccess(subscriber.email)
},
})
export const GET = router.GET
export const POST = router.POSTEndpoint Referansı
| Method | Segment | Auth | Açıklama |
|---|---|---|---|
| GET | /plans | — | Tüm planları JSON olarak döner |
| POST | /plans | Cookie | Yeni plan oluşturur (yönetim) |
| POST | /checkout | — | { planId, email } → Direct API form alanları |
| POST | /webhook | — | PayTR webhook handler (daima "OK" döner) |
| GET | /cron | Bearer | Vadesi gelen ödemeleri işler |
| GET | /subscriber | — | ?email= → abone durumu |
| POST | /cancel | — | { email } → aboneliği iptal et |
| GET | /subscribers | Cookie | Tüm aboneler (yönetim) |
| GET | /payments | Cookie | Tüm ödemeler (yönetim) |
| POST | /management-login | — | { username, password } → bp_mgmt cookie |
| POST | /management-logout | — | bp_mgmt cookie'yi temizler |
Callbacks
| Callback | Ne Zaman Tetiklenir |
|---|---|
onPaymentSuccess | Webhook ile başarılı ödeme onaylandığında |
onPaymentFailure | Ödeme başarısız olduğunda (senkron veya webhook) |
onSubscriptionCancelled | Maksimum yeniden deneme aşıldığında otomatik iptal |
Webhook handler her zaman "OK" plain text döndürmek zorundadır. PayTR bu yanıtı almazsa webhook'u yeniden gönderir.