Tüm yazılar

Online Ödeme Sistemleri ve Sanal POS: Güvenli Ödeme Altyapısı Nasıl Kurulur?

E-ticaret siteleri için sanal POS ve ödeme kuruluşu seçimi, 3D Secure, PCI DSS, taksit, iade ve iptal süreçleri ile ödeme entegrasyonunu güvenli yapmanın teknik ve operasyonel detaylarını anlatıyoruz.

Online Ödeme Sistemleri ve Sanal POS: Güvenli Ödeme Altyapısı Nasıl Kurulur?

Bir e-ticaret sitesinde müşterinin en fazla tereddüt ettiği an, kart bilgilerini girdiği andır. Ödeme adımı aynı zamanda sitenizin en kritik teknik parçasıdır: yanlış kurulmuş bir entegrasyon, ödemesi alınmış ama sisteme düşmemiş siparişlere, çift çekimlere veya daha kötüsü bir güvenlik ihlaline yol açabilir. Bu rehberde ödeme altyapısının temel kavramlarını, sağlayıcı seçim kriterlerini ve güvenli bir entegrasyonun teknik detaylarını ele alıyoruz.

Temel kavramlar

Ödeme dünyası kısaltmalarla doludur. En sık karşılaşacaklarınız:

  • Sanal POS: Bankanın, fiziksel POS cihazı olmadan internet üzerinden kartlı ödeme almanızı sağlayan hizmeti.
  • Ödeme kuruluşu / ödeme geçidi: Birden fazla bankayla çalışan, tek entegrasyonla kart, taksit ve alternatif ödeme yöntemleri sunan aracı şirketler.
  • 3D Secure: Kart sahibinin bankası tarafından SMS kodu veya mobil uygulama onayıyla ek doğrulama yapılması. Dolandırıcılık riskini ve itiraz (chargeback) durumlarını ciddi ölçüde azaltır.
  • PCI DSS: Kart verisini işleyen, ileten veya saklayan tüm işletmelerin uyması gereken uluslararası güvenlik standardı.
  • Chargeback (ters ibraz): Kart sahibinin, bankasına başvurarak bir işleme itiraz etmesi.
  • Tokenizasyon: Kart numarası yerine, sadece ödeme sağlayıcısının anlamlandırabildiği bir anahtarın (token) saklanması.

Banka sanal POS'u mu, ödeme kuruluşu mu?

Kriter Banka sanal POS Ödeme kuruluşu
Başvuru süreci Daha uzun, banka değerlendirmesi Genellikle hızlı ve dijital
Komisyon Hacme göre pazarlık şansı Genellikle sabit oranlar
Taksit Sadece o bankanın kartlarında Birçok bankanın kartında
Entegrasyon Her banka için ayrı Tek entegrasyon
Para aktarımı Bankaya göre değişir Sözleşmeye göre değişir
Uygun olduğu yer Yüksek hacimli, yerleşik işletmeler Yeni başlayan ve büyüyen işletmeler

Yeni başlayan bir mağaza için ödeme kuruluşları genellikle en hızlı ve pratik başlangıçtır. Hacim büyüdükçe, belirli bankalarla doğrudan sanal POS anlaşması yapmak komisyon maliyetini düşürebilir. Birçok büyük e-ticaret sitesi birden fazla ödeme altyapısını birlikte kullanır; biri sorun yaşadığında diğeri devreye girer.

Temassız kart okuyucuya kart yaklaştıran el
Müşteri için ödeme birkaç saniyelik bir işlemdir; arkasında ise banka, ödeme kuruluşu ve kart şemaları arasında hassas bir zincir çalışır.

Sağlayıcı seçerken sormanız gereken sorular

  • İşlem başına komisyon ve varsa sabit ücretler nelerdir? Taksitli işlemlerde maliyet nasıl değişir?
  • Satış tutarı hesabıma kaç gün sonra aktarılır?
  • 3D Secure zorunlu mu, isteğe bağlı mı? Hangi tutarlarda 3D'siz işlem yapılabilir?
  • Kartı saklama (tokenizasyon) ve tek tıkla ödeme destekleniyor mu?
  • İade ve kısmi iade API üzerinden yapılabiliyor mu?
  • Abonelik ve tekrarlayan ödeme desteği var mı?
  • Test ortamı (sandbox) ve dokümantasyon ne kadar iyi?
  • Teknik destek hangi kanallardan ve hangi saatlerde veriliyor?

Ödeme akışı nasıl çalışır?

3D Secure'lu tipik bir kart ödemesi şu adımlardan oluşur:

  1. Müşteri siparişi onaylar; sunucunuz siparişi "ödeme bekleniyor" durumunda oluşturur.
  2. Sunucunuz, ödeme sağlayıcısına tutar, sipariş numarası ve dönüş adresiyle bir ödeme başlatma isteği gönderir.
  3. Müşteri, kart bilgilerini sağlayıcının güvenli formuna girer ve bankasının 3D doğrulama ekranına yönlendirilir.
  4. Doğrulama sonrası müşteri sizin dönüş (callback) adresinize yönlendirilir.
  5. Sunucunuz, sonucu sağlayıcıdan doğrudan sorgulayarak doğrular ve siparişi "ödendi" durumuna geçirir.
  6. Sağlayıcı ayrıca bir webhook ile ödeme sonucunu arka planda bildirir.

En kritik nokta 5. adımdır: tarayıcıdan gelen dönüş parametrelerine asla tek başına güvenmeyin. Kötü niyetli bir kullanıcı bu parametreleri değiştirerek ödenmemiş bir siparişi ödenmiş gibi gösterebilir.

Güvenli entegrasyon için teknik kurallar

Kart verisine dokunmayın

Kart numarasını kendi sunucunuzdan geçirmek, sizi PCI DSS'in en ağır gereksinimlerine tabi kılar. Bunun yerine ödeme sağlayıcısının barındırdığı ödeme sayfasını (hosted payment page) veya kart alanlarını kendi alan adında barındıran iframe/SDK çözümlerini kullanın. Böylece kart bilgisi hiçbir zaman sizin sunucunuza ulaşmaz.

Tutarı sunucuda hesaplayın

Ödeme tutarı her zaman sunucuda, veritabanındaki fiyatlardan hesaplanmalıdır. Tarayıcıdan gelen tutar bilgisi değiştirilebilir.

İmza doğrulaması yapın

Ödeme sağlayıcıları, dönüş ve webhook isteklerini gizli bir anahtarla imzalar. Bu imzayı doğrulamadan hiçbir isteğe güvenmeyin. ASP.NET Core'da basit bir HMAC doğrulaması:

public static bool IsValidSignature(string payload, string signature, string secret)
{
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
    var expected = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(payload)));
    // Zamanlama saldırılarına karşı sabit süreli karşılaştırma
    return CryptographicOperations.FixedTimeEquals(
        Encoding.UTF8.GetBytes(expected), Encoding.UTF8.GetBytes(signature));
}

Her sağlayıcının imza formatı farklıdır; dokümantasyonda belirtilen alanları ve sırayı birebir uygulayın.

İdempotency: aynı ödemeyi iki kez işlemeyin

Webhook'lar ağ sorunları nedeniyle birden fazla kez gelebilir; kullanıcı dönüş sayfasını yenileyebilir. Ödeme sonucunu işleyen kod, aynı bildirimi ikinci kez aldığında siparişi tekrar onaylamamalı, stoğu tekrar düşmemelidir:

var order = await db.Orders.FirstAsync(o => o.Number == notification.OrderNumber, ct);
if (order.Status == OrderStatus.Paid) return Ok(); // daha önce işlendi

order.MarkAsPaid(notification.TransactionId, notification.Amount);
await db.SaveChangesAsync(ct);

Sağlayıcının işlem kimliğini (transaction id) veritabanında benzersiz (unique) indeksle saklamak, eşzamanlı gelen iki bildirimin aynı ödemeyi iki kez kaydetmesini de engeller.

Her şeyi kaydedin

Ödeme başlatma isteğini, sağlayıcıdan gelen yanıtları ve webhook'ları (kart verisi olmadan) zaman damgasıyla saklayın. Bir müşteri "param çekildi ama siparişim görünmüyor" dediğinde, bu kayıtlar sorunu dakikalar içinde çözmenizi sağlar.

Mutabakat yapın

Gün sonunda sisteminizdeki ödenmiş siparişlerle sağlayıcının raporundaki işlemleri karşılaştıran otomatik bir mutabakat süreci kurun. "Ödendi ama sistemde bekliyor" veya tam tersi durumlar bu sayede kaybolmaz.

Tezgahta tablet tabanlı ödeme terminalini kullanan kişi
Güvenli bir ödeme deneyimi, müşterinin "bu siteye kart bilgimi verebilirim" demesini sağlar.

İade, iptal ve kısmi iade

Ödeme altyapısı sadece para almak değil, gerektiğinde geri ödemek demektir:

  • İptal (void): Gün sonu kapanmadan önce işlemin tamamen iptal edilmesi. Müşterinin ekstresine genellikle hiç yansımaz.
  • İade (refund): Gün sonu sonrası, tutarın tamamının veya bir kısmının karta geri gönderilmesi.
  • Kısmi iade: Çok ürünlü siparişte sadece iade edilen ürünlerin tutarının geri ödenmesi.

İade işlemlerini panelden elle yapmak yerine API ile sipariş yönetim sisteminize bağlamak, hem operasyonel yükü hem de hata riskini azaltır. Taksitli işlemlerde iadenin müşteriye nasıl yansıyacağını da müşteri hizmetleri ekibinizin bilmesi gerekir.

Dönüşümü artıran ödeme detayları

  • Kart numarası alanında otomatik boşluk ve kart tipi logosu.
  • Taksit seçeneklerinin aylık tutarla birlikte net gösterimi.
  • Kayıtlı kartla tek tıkla ödeme (tokenizasyon ile).
  • Hata mesajlarının anlaşılır olması: "İşlem başarısız" yerine "Kartınızın internet alışverişi kapalı olabilir, bankanızla iletişime geçin."
  • 3D doğrulama sonrası kullanıcının sepetinin korunması; başarısız ödemede baştan başlamak zorunda kalmaması.

Dolandırıcılığa karşı önlemler

  • Yüksek tutarlı ve riskli işlemlerde 3D Secure'u zorunlu tutun.
  • Kısa sürede çok sayıda başarısız deneme yapan IP ve kartları sınırlayın (rate limiting).
  • Teslimat ve fatura adresi uyumsuzluğu, olağandışı sipariş tutarı gibi sinyalleri izleyin.
  • Yüksek riskli siparişleri kargoya vermeden önce manuel kontrolden geçirin.

Sonuç

Güvenli bir ödeme altyapısı; doğru sağlayıcı seçimi, kart verisine hiç dokunmayan bir entegrasyon, sunucu tarafında doğrulanan ödeme sonuçları ve tekrar eden bildirimlere dayanıklı bir sipariş mantığının toplamıdır. Bu temeli doğru kurduğunuzda hem müşterinizin güvenini kazanırsınız hem de ödeme kaynaklı operasyonel sorunların büyük kısmını daha oluşmadan önlersiniz.

Sık sorulan sorular

Kart bilgilerini kendi veritabanımda saklayabilir miyim?
Pratikte hayır. Kart verisini saklamak ağır PCI DSS gereksinimleri doğurur. Tekrarlayan ödemeler için ödeme sağlayıcısının tokenizasyon hizmetini kullanın.

3D Secure dönüşümü düşürür mü?
Ek bir adım olduğu için bazı müşteriler vazgeçebilir; ancak dolandırıcılık ve itiraz risklerini azalttığı için çoğu işletme için gereklidir. Modern 3D Secure versiyonları, düşük riskli işlemlerde kullanıcıyı daha az rahatsız edecek şekilde tasarlanmıştır.

Ödeme alındı ama sipariş oluşmadıysa ne yapmalıyım?
Önce sağlayıcı panelinden işlemi ve webhook kayıtlarını kontrol edin. Sistemde webhook işleme ve gün sonu mutabakatı varsa bu durum genellikle otomatik olarak yakalanır ve düzeltilir.

↑↓ gezEnter seç