İçeriğe geç
Better Payment
Entegrasyonlar

Deno

Better Payment'i Deno ve Deno Deploy'da Deno.serve ile sunun.

Better Payment'in runtime bağımlılığı yoktur; bu yüzden Deno onu npm: belirteciyle doğrudan npm'den yükler. toFetchHandler, handler'ı Deno.serve'ün beklediği (request: Request) => Promise<Response> fonksiyonuna çevirir.

1. Sunucuyu oluşturun

// main.ts
import { betterPayment, iyzico, toFetchHandler } from 'npm:better-payment';

const payment = betterPayment({
  mode: Deno.env.get('DENO_DEPLOYMENT_ID') ? 'production' : 'sandbox',
  providers: {
    iyzico: iyzico({
      apiKey: Deno.env.get('IYZICO_API_KEY')!,
      secretKey: Deno.env.get('IYZICO_SECRET_KEY')!,
    }),
  },
});

const pay = toFetchHandler(payment);

Deno.serve((request) => {
  if (new URL(request.url).pathname.startsWith('/api/pay/')) return pay(request);
  return new Response('Not found', { status: 404 });
});

Handler'ın basePath'i (varsayılan /api/pay) dışındaki istekler uygulamanızın geri kalanına gider. Deno'da Hono kullanıyorsanız onun adapter'ını kullanın.

2. Çalıştırın

deno run --allow-net --allow-env main.ts

Handler, sağlayıcı API'lerini çağırmak için --allow-net, anahtarları okumak için --allow-env izni ister. Deno Deploy'da anahtarları projenin ortam değişkenlerine ekleyin.

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.

Idempotency

Varsayılan idempotency deposu, tekrar eden callback ve Idempotency-Key kayıtlarını bellekte tutar ve her isolate'in kendi belleği vardır. Canlı ortamda paylaşımlı bir depo verin. Seçenekler için edge ortamları sayfasına bakın.