Elysia
Better Payment handler'ını Bun veya Node.js üzerindeki bir Elysia uygulamasına bağlayın.
better-payment/elysia, ödeme handler'ını bir Elysia route'una bağlar. Elysia Bun için tasarlanmıştır, Node.js'te de çalışır.
1. Ödeme örneğini oluşturun
// payment.ts
import { betterPayment, iyzico } from 'better-payment';
export const payment = betterPayment({
mode: process.env.NODE_ENV === 'production' ? 'production' : 'sandbox',
providers: {
iyzico: iyzico({
apiKey: process.env.IYZICO_API_KEY!,
secretKey: process.env.IYZICO_SECRET_KEY!,
}),
},
handler: {
onCallback: async (result) => markOrder(result.paymentId, result.status),
callbackRedirect: (result) => `/orders/${result.paymentId}?payment=${result.status}`,
},
});Tüm seçenekler için yapılandırma, allowedActions, transformRequest ve diğer handler kancaları için handler sayfasına bakın.
2. Handler'ı bağlayın
// server.ts
import { Elysia } from 'elysia';
import { toElysiaHandler } from 'better-payment/elysia';
import { payment } from './payment';
new Elysia()
.all('/api/pay/*', toElysiaHandler(payment), { parse: 'none' })
.listen(3000);{ parse: 'none' } handler'a ham gövdeyi bırakır: banka callback'leri form-urlencoded gelir ve imzaları orijinal alanlarla doğrulanır. Bu ayar olmadan body okuyan herhangi bir hook (onTransform, derive, onBeforeHandle ya da bir plugin) Elysia'nın isteği önce tüketmesine yol açar.
3. Ödeme başlatın
Route'lar /api/pay altında sunulur, frontend onları doğrudan çağırır:
const res = await fetch('/api/pay/iyzico/payment/init-3ds', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(paymentRequest),
});Tipli istemci (better-payment/client) aynı route'ları sarmalar.
4. Callback adresleri
callbackUrl'i https://siteniz.com/api/pay/<provider>/payment/complete-3ds olarak ayarlayın. Handler callback'i doğrular, onCallback'i çağırır ve müşteriyi callbackRedirect ile yönlendirir.
PayTR için PayTR panelindeki bildirim URL'ini https://siteniz.com/api/pay/paytr/callback olarak ayarlayın.