Express, Fastify, Hono
Ödeme handler'ını Express, Fastify, Hono veya düz bir Node.js sunucusuna bağlayın.
Her adapter ayrı bir import'tur ve hiç bağımlılığı yoktur; yalnızca kullandığınız yüklenir. Next.js için Next.js rehberine, Workers, Deno ve Bun için edge ortamlarına bakın.
Tüm adapter'lar:
- JSON ve form-urlencoded gövdeleri (banka callback'leri) handler'a geçirir
- PayTR'nin
OKyanıtını düz metin olarak gönderir - yönlendirmelerin (
callbackRedirect)Locationbaşlığını korur
Onları handler'ın basePath'i altına bağlayın (varsayılan /api/pay).
Express
import express from 'express';
import { toExpressHandler } from 'better-payment/express';
import { payment } from './payment';
const app = express();
app.all('/api/pay/*path', toExpressHandler(payment)); // Express 4: '/api/pay/*'Adapter ham gövdeyi kendisi okuduğu için ödeme route'larında express.json() ya da express.urlencoded() kullanmanız gerekmez. Önce bir body parser çalışmışsa onun sonucu kullanılır. Beklenmeyen hatalar next(error)'a iletilir.
Fastify
import Fastify from 'fastify';
import { toFastifyPlugin } from 'better-payment/fastify';
const app = Fastify();
await app.register(toFastifyPlugin(payment), { prefix: '/api/pay' });Fastify, application/x-www-form-urlencoded gövdeleri varsayılan olarak reddeder (415); oysa iyzico, Param, Akbank ve PayTR callback'lerini bu formatta gönderir. Plugin bu formatı yalnızca kendi route'ları için kabul eder; diğer route'larınız Fastify'ın varsayılanlarıyla kalır.
Hono
import { Hono } from 'hono';
import { toHonoHandler } from 'better-payment/hono';
const app = new Hono();
app.all('/api/pay/*', toHonoHandler(payment));Hono, better-payment gibi Node.js, Bun, Deno ve Cloudflare Workers'da çalışır.
Elysia
import { Elysia } from 'elysia';
import { toElysiaHandler } from 'better-payment/elysia';
const app = new Elysia();
app.all('/api/pay/*', toElysiaHandler(payment), { parse: 'none' });{ 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. Elysia Bun için tasarlanmıştır, Node.js'te de çalışır.
Düz Node.js
import { createServer } from 'node:http';
import { toNodeHandler } from 'better-payment/express';
createServer(toNodeHandler(payment)).listen(3000);Tembel başlatma
Tüm adapter'lar ödeme nesnesini (ya da handler'ını) döndüren bir fonksiyonu da kabul eder. Fonksiyon her istekte çağrılır, böylece örneği ilk kullanımda oluşturabilirsiniz:
const createPayment = () => betterPayment({ /* ... */ });
let instance: ReturnType<typeof createPayment> | undefined;
const getPayment = () => (instance ??= createPayment());
app.all('/api/pay/*path', toExpressHandler(getPayment));