IHS Strategic
Tüm Blog Yazıları
HowTo09 Eylül 2026•3 dk okuma

Stripe, PayTR ve İyzico ile Güvenli Online Ödeme Altyapısı Entegrasyonu

Modern web projeleri için Stripe, PayTR ve İyzico ödeme geçidi entegrasyonu adımları, PCI-DSS uyumluluğu, 3D Secure ve webhook mimarisi teknik rehberi.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Modern Web Projelerinde Güvenli Ödeme Mimarisi

Dijital ajans standartlarında modern web uygulaması için ödeme altyapısı kritik bileşendir. Yanlış mimari veri sızıntısına, finansal kayba ve regülasyon cezalarına yol açar. Bu rehber, Stripe, PayTR ve İyzico sağlayıcılarını tek çatı altında güvenli bağlama adımlarını içerir.

1. Temel Güvenlik Standartları (PCI-DSS & Tokenization)

Kredi kartı verisi asla uygulama veritabanına kaydedilmez. Kart verisi doğrudan ödeme sağlayıcısının sunucularına iletilir ve dönen token işlenir.

  • TLS 1.3: Tüm HTTP trafiği şifreli olmalıdır.
  • Tokenization: Kart bilgisi yerine sağlayıcıdan dönen tek kullanımlık token saklanır.
  • 3D Secure 2.0: Dolandırıcılık riskini azaltır, yasal sorumluluğu bankaya aktarır.

2. Stripe Entegrasyonu (Payment Intents API)

Global pazara yönelik projelerde Stripe standarttır. Güvenli akış için PaymentIntent kullanılır.

Adım 1: Backend Sunucusunda PaymentIntent Oluşturma

İstemci doğrudan tutar belirleyemez. Tutar sunucu tarafında doğrulanır ve oturum başlatılır.

// Node.js Örneği
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

async function createPayment(amount, currency = 'usd') {
  return await stripe.paymentIntents.create({
    amount: amount,
    currency: currency,
    automatic_payment_methods: { enabled: true },
  });
}

Adım 2: Frontend Stripe Elements ile Ödeme Alma

Kart formunu Stripe render eder. Hassas veri uygulamanın sunucusuna uğramaz.

3. İyzico Entegrasyonu (Checkout Form / REST API)

Türkiye regülasyonlarına (BDDK/TCMB) tam uyumludur. En hızlı ve güvenli yöntem Checkout Form yapısıdır.

Adım 1: Ödeme Formu Başlatma

Sepet tutarı, kullanıcı kimlik bilgileri ve callback URL sunucudan İyzico API'sine imzalı istek olarak gönderilir.

// Sunucu tarafı imza doğrulamalı istek
const Iyzipay = require('iyzipay');
const iyzipay = new Iyzipay({
  apiKey: process.env.IYZICO_API_KEY,
  secretKey: process.env.IYZICO_SECRET_KEY,
  uri: 'https://api.iyzipay.com'
});

// CheckoutFormInitialize çağrısı yapılır, dönen checkoutFormContent HTML sayfaya basılır.

4. PayTR Entegrasyonu (iFrame API & Hash Doğrulama)

PayTR iFrame modeli, token tabanlı güvenli bir token hash mekanizması kullanır.

Adım 1: HMAC-SHA256 Token Oluşturma

PayTR parametreleri sunucu tarafında gizli anahtarla hash'lenir:

// HMAC-SHA256 Hash Üretimi (Node.js)
const crypto = require('crypto');

function generatePaytrToken(params, merchant_salt, merchant_key) {
  const hashStr = params.merchant_id + params.user_ip + params.merchant_oid + params.email + params.payment_amount + params.payment_type + merchant_salt;
  return crypto.createHmac('sha256', merchant_key).update(hashStr).digest('base64');
}

5. Webhook Yönetimi ve Idempotency

Kullanıcı ödeme anında tarayıcıyı kapatabilir. İşlem sonucu sadece Webhook ile doğrulanmalıdır.

  • İmza Doğrulama: Webhook header'ındaki signature bilgisi sağlayıcı secret anahtarıyla test edilmelidir. Sahte istekler engellenir.
  • Idempotency: Aynı webhook bildirimi birden fazla gelirse mükerrer işlem yapılmamalıdır. Benzersiz sipariş ID veritabanında kontrol edilir.
  • 200 OK Yanıtı: Webhook işlemi tamamlandığında sağlayıcıya hemen 200 yanıtı verilmelidir; aksi halde sağlayıcı isteği tekrarlar.
Güvenlik Uyarısı: Webhook endpoint'lerinde CSRF korumasını devre dışı bırakın ancak ham body (raw body) üzerinden imza doğrulamasını kesinlikle zorunlu tutun.

Modern Web Trendleri ve Dijital Ajans Yaklaşımları

Güncel trendler, ödeme arayüzlerinde mikro servisler veya headless mimariler kullanmayı gerektirir. Profesyonel bir dijital ajans, tek bir sağlayıcıya bağımlı kalmamak adına soyutlama katmanı (Payment Gateway Adapter Pattern) inşa eder. Bu sayede Stripe, PayTR ve İyzico arasında dinamik yönlendirme yapılabilir.