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.
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.