trkit
Menü

Paketler

@trkit-app-pack/pay

iyzico, PayTR ve mock ödeme sağlayıcıları için ortak arayüz.

.mdChatGPT'de açClaude'da aç
npm install @trkit-app-pack/pay

Akışın tamamı için: Ödeme akışı.

İstemci

lib/pay.ts
import "server-only";
import { createPay, createPayFromEnv } from "@trkit-app-pack/pay";

export const pay = createPay({ provider: "iyzico", apiKey: "...", secretKey: "...", sandbox: true });
// veya
export const pay = createPay({ provider: "paytr", merchantId: "...", merchantKey: "...", merchantSalt: "...", testMode: true });
// veya ortam değişkenlerinden (TRKIT_PAY_PROVIDER, IYZICO_*, PAYTR_*)
export const pay = createPayFromEnv();

Arayüz

interface PaymentProvider {
  name: string;
  createCheckout(input: CheckoutInput): Promise<CheckoutSession>;
  verifyCallback(payload: Record<string, string>): Promise<PaymentResult>;
  callbackResponse(result: PaymentResult): Response;
  refund(input: { paymentId: string; amount: number; ip?: string }): Promise<RefundResult>;
}

CheckoutInput: orderId, amount (kuruş), currency?, buyer (id, name, surname, email, phone, identityNumber?, ip, address), items (id, name, category, unitPrice (kuruş), quantity?, type?), callbackUrl, successUrl?, failUrl?, installments?, locale?.

CheckoutSession: token, paymentPageUrl? (iyzico), html? (iyzico checkout form), iframeUrl? (PayTR).

PaymentResult: status (success | failure | pending), orderId, paymentId?, paidAmount? (kuruş, taksit farkı dahil), installment?, errorCode?, errorMessage?, raw.

Sağlayıcı farkları

iyzicoPayTR
Ödeme sayfasıCheckout Form (yönlendirme veya gömülü)iFrame
CallbackKullanıcının tarayıcısı POST eder, sonuç API'den sorgulanırSunucudan sunucuya, hash ile imzalı
Callback yanıtı303 yönlendirme (redirectTo ile özelleştirilir)Düz metin OK
Sipariş noSerbestYalnızca harf ve rakam
successUrl / failUrlKullanılmazZorunlu
TCKNidentityNumber (yoksa 11111111111)Kullanılmaz

Hatalar

Tüm hatalar PaymentError türündedir (code, provider, raw). Örnek kodlar: BASKET_MISMATCH, EMPTY_BASKET, INVALID_ORDER_ID, BAD_HASH, MISSING_TOKEN, CLIENT_SIDE_USAGE.

Yardımcılar

toKurus("129,50");       // 12950
kurusToDecimal(12950);   // "129.5"
basketTotal(items);

Teknik notlar

  • İmzalar Web Crypto ile atılır; Node.js ve Edge runtime'da çalışır.
  • Paket tarayıcıda çalıştırılırsa CLIENT_SIDE_USAGE hatası fırlatır.
  • fetch seçeneğiyle istekleri test için taklit edebilirsiniz.