Wordpress İle Özel Bir Ödeme Entegrasyonu Nasıl Yapılır?

Wordpress İle Özel Bir Ödeme Entegrasyonu Nasıl Yapılır?
Wordpress İle Özel Bir Ödeme Entegrasyonu Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Özel bir ödeme entegrasyonuna başlamadan önce sisteminizin hazır olduğundan emin olmalısınız. WordPress, doğası gereği esnek bir yapıya sahip olsa da ödeme gibi kritik işlemlerde yüksek güvenlik standartları gerektirir.

  • PHP 8.2 veya üzeri: Modern sözdizimi ve güvenlik güncellemeleri için zorunludur.
  • SSL Sertifikası: Ödeme verilerinin şifrelenmesi için HTTPS protokolü şarttır.
  • cURL Kütüphanesi: Ödeme sağlayıcısının API'sine istek göndermek için gereklidir.
  • WordPress Geliştirme Ortamı: Yerel bir sunucuda (Localhost) test yapmanız önerilir.

Ödeme Yöntemi Sınıfını Oluşturma

WordPress'te özel bir ödeme yöntemi eklemek için en temiz yol, bir sınıf (class) yapısı kullanmaktır. Bu, kodunuzun modüler kalmasını ve ileride bakımının kolaylaşmasını sağlar. Aşağıdaki kod, özel ödeme yönteminizi WordPress'e kaydetmek için temel bir şablondur.


class Ozel_Odeme_Agidi extends WC_Payment_Gateway {
    public function __construct() {
        $this->id = 'ozel_odeme';
        $this->method_title = 'Özel Ödeme Yöntemi';
        $this->has_fields = true;
        $this->init_form_fields();
        $this->init_settings();
    }
}

Bu sınıf, WooCommerce'in WC_Payment_Gateway sınıfından miras alır. Eğer WooCommerce kullanmıyorsanız, WordPress'in add_action('init', ...) kancasını kullanarak kendi özel ödeme formunuzu oluşturmanız gerekecektir.

API İstekleri ve Güvenli İletişim

Ödeme sağlayıcınızla iletişim kurarken cURL kütüphanesini kullanmak en yaygın yöntemdir. API anahtarlarınızı asla doğrudan kodun içine yazmayın; bunları WordPress veritabanında güvenli bir şekilde saklayın.


function ozel_odeme_istek_gonder($endpoint, $data) {
    $ch = curl_init($endpoint);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}

Yukarıdaki kod, API'ye JSON formatında veri gönderir ve yanıtı dizi olarak döner. CURLOPT_POSTFIELDS kısmında veriyi şifreleyerek göndermek, verinin yolda ele geçirilmesini zorlaştırır.

Veritabanı Güvenliği ve İşlem Kayıtları

Ödeme işlemleri sırasında veritabanına veri yazarken SQL Injection saldırılarına karşı her zaman $wpdb->prepare() metodunu kullanmalısınız. Kullanıcıdan gelen veriye asla doğrudan güvenmeyin.


global $wpdb;
$table_name = $wpdb->prefix . 'odeme_kayitlari';

$wpdb->insert(
    $table_name,
    array(
        'siparis_id' => $siparis_id,
        'durum' => 'basarili',
        'tarih' => current_time('mysql')
    ),
    array('%d', '%s', '%s')
);

Bu örnek, veritabanına güvenli bir şekilde kayıt ekler. %d ve %s parametreleri, verinin türünü belirterek SQL enjeksiyon riskini ortadan kaldırır.

Ödeme Entegrasyon Yöntemleri Karşılaştırması

Yöntem Avantajı Dezavantajı
API Entegrasyonu (Direct) Tam kontrol, özelleştirilebilir tasarım. PCI-DSS uyumluluk sorumluluğu.
Redirect Yöntemi Güvenlik sorumluluğu sağlayıcıda. Kullanıcı siteden ayrılır.
Iframe/Modal Dengeli güvenlik ve deneyim. Tarayıcı kısıtlamalarına takılabilir.

Hata Yönetimi ve Loglama

Ödeme süreçlerinde hata yönetimi hayati önem taşır. Kullanıcıya net hatalar göstermeli, ancak sistemin arka planında teknik detayları loglamalısınız.


if (is_wp_error($response)) {
    error_log('Ödeme Hatası: ' . $response->get_error_message());
    wc_add_notice('Ödeme sırasında bir hata oluştu, lütfen tekrar deneyin.', 'error');
}

error_log fonksiyonu, hataları WordPress'in wp-content/debug.log dosyasına yazar. Bu, üretim ortamında (production) sorunları tespit etmenizi sağlar.

Kritik Güvenlik Uyarısı: Ödeme formlarında asla kredi kartı numarası, CVV veya son kullanma tarihi gibi hassas verileri kendi veritabanınızda saklamayın. PCI-DSS standartlarına aykırı olan bu durum, ciddi yasal yaptırımlara ve güvenlik açıklarına yol açar. Tokenizasyon yöntemini kullanın.

Sıkça Sorulan Sorular

Ödeme entegrasyonu yaparken PCI-DSS uyumluluğu nedir?

PCI-DSS, kredi kartı verilerini işleyen, depolayan veya ileten şirketlerin uyması gereken bir dizi güvenlik standardıdır. Kendi ödeme sayfanızı yapıyorsanız bu uyumluluğu sağlamanız gerekir.

Neden doğrudan veritabanına ödeme verisi kaydetmemeliyim?

Kredi kartı verilerini kaydetmek, sitenizin hacklenmesi durumunda tüm müşteri bilgilerinin çalınmasına neden olur. Bunun yerine ödeme kuruluşu tarafından verilen "transaction ID" (işlem kimliği) saklanmalıdır.

Ödeme testlerini nasıl yapmalıyım?

Her ödeme kuruluşu bir "Sandbox" (Test) ortamı sunar. Canlıya geçmeden önce tüm senaryoları (başarılı ödeme, reddedilen ödeme, yetersiz bakiye) bu ortamda test etmelisiniz.

WordPress'te ödeme için neden eklenti yerine özel kod yazmalıyım?

Hazır eklentiler her zaman özel iş mantığınızı desteklemeyebilir veya gereksiz kod yükü oluşturabilir. Özel kod, performans ve tam kontrol sağlar.

Ödeme sonrası kullanıcıyı nasıl yönlendiririm?

Ödeme başarılı olduğunda WordPress'in wp_redirect() fonksiyonunu kullanarak kullanıcıyı "Teşekkürler" sayfasına güvenli bir şekilde yönlendirebilirsiniz.

Ödeme Entegrasyonlarında Performans Optimizasyonu

Özel bir ödeme entegrasyonu geliştirirken, kullanıcı deneyimini doğrudan etkileyen en önemli faktörlerden biri işlem hızıdır. WordPress sitenizde API istekleri sırasında oluşan gecikmeler, sepet terk oranlarını artırabilir. Performansı optimize etmek için şu stratejileri uygulayabilirsiniz:

  • Asenkron İşlemler: Ödeme sonrası veritabanı güncellemeleri veya e-posta gönderimi gibi süreçleri wp_remote_post yerine Action Scheduler kütüphanesi ile arka planda çalıştırın.
  • API Yanıtlarını Önbelleğe Alma: Ödeme kuruluşu tarafından sağlanan statik verileri (örneğin kur bilgileri veya taksit seçenekleri) transient API kullanarak belirli sürelerle önbelleğe alın.
  • Gereksiz Yüklemelerden Kaçınma: Ödeme sınıfınızı sadece ödeme sayfasında yüklenecek şekilde kısıtlayın.
// Ödeme sınıfını sadece ödeme sayfasında yükle
add_action('wp_enqueue_scripts', 'load_payment_gateway_assets');
function load_payment_gateway_assets() {
    if (is_checkout()) {
        wp_enqueue_script('custom-payment-js', plugin_dir_url(__FILE__) . 'assets/payment.js', array('jquery'), '1.0', true);
    }
}

Canlı Ortama Geçiş (Deployment) ve İzleme

Test ortamında başarıyla çalışan bir entegrasyonun canlıya alınması, dikkatli bir planlama gerektirir. Deployment sürecinde verilerin güvenliğini sağlamak ve olası hataları anında tespit etmek için aşağıdaki adımları izleyin:

1. Ortam Değişkenlerinin Yönetimi

API anahtarlarınızı (Secret Key, Merchant ID) asla kod içerisinde hard-coded olarak bırakmayın. Bunun yerine wp-config.php dosyasını veya güvenli bir çevre değişkeni yönetimi kullanın.

// wp-config.php içerisinde güvenli tanımlama
define('MY_PAYMENT_API_KEY', 'canli_api_anahtariniz_buraya');

// Kod içerisinde kullanımı
$api_key = defined('MY_PAYMENT_API_KEY') ? MY_PAYMENT_API_KEY : '';

2. Hata Ayıklama (Debugging) ve İzleme

Canlı ortamda oluşabilecek hataları takip etmek için özel bir log dosyası tutmak hayati önem taşır. WordPress'in varsayılan WP_DEBUG_LOG özelliğini kullanarak ödeme hatalarını izole edin.

function log_payment_error($message) {
    if (defined('WP_DEBUG') && WP_DEBUG) {
        error_log('[Ödeme Entegrasyonu Hatası]: ' . $message);
    }
}

// Kullanım örneği
if (is_wp_error($response)) {
    log_payment_error($response->get_error_message());
}

3. Deployment Kontrol Listesi

Canlıya geçmeden önce şu tabloyu bir kontrol listesi olarak kullanın:

Kontrol Noktası Durum
SSL Sertifikası (HTTPS) aktif mi? Zorunlu
Test anahtarları canlı anahtarlarla değiştirildi mi? Zorunlu
Hata loglama mekanizması aktif mi? Önerilen
Webhook URL'leri canlı sistemle güncellendi mi? Zorunlu

Bu süreçleri takip ederek, WordPress üzerinde geliştirdiğiniz özel ödeme modülünün hem güvenli hem de yüksek performanslı çalışmasını sağlayabilirsiniz. Unutmayın, finansal sistemlerde "hata payı" yoktur; bu nedenle her güncellemeyi önce bir staging (hazırlık) ortamında test etmeyi alışkanlık haline getirin.

Sonuç

WordPress ile özel bir ödeme entegrasyonu yapmak, teknik bilgi ve güvenlik bilinci gerektiren bir süreçtir. Bu rehberde öğrendiğiniz sınıf yapısı, API yönetimi ve güvenlik pratikleri, profesyonel bir ödeme modülü geliştirmenin temel taşlarıdır. Bir sonraki adımınız, ödeme kuruluşu tarafından sağlanan dokümantasyonu detaylıca incelemek ve test ortamında kapsamlı senaryolar oluşturmak olmalıdır. Güvenli kodlama prensiplerinden ödün vermediğiniz sürece, WordPress üzerinde her türlü ödeme senaryosunu başarıyla yönetebilirsiniz.

Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Ödeme sistemleri finansal risk içerir; canlı ortama almadan önce mutlaka profesyonel bir güvenlik denetiminden geçirilmelidir. Yazılımcı, kodun yanlış kullanımından doğabilecek finansal kayıplardan sorumlu tutulamaz.
Bu yazıya tepkinizi paylaşın:
Kerem Tekin

Teknoloji ve yazılım kullanımı üzerine pratik kılavuzlar hazırlıyorum. Karmaşık dijital araçları, herkesin hızlıca öğrenebileceği sade rehberler haline getirmekte uzmanım.

Yorumlar (16)

16
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Oğuzhan B.
Oğuzhan B. 23 Temmuz 2026

Bu yöntemle ödeme yaparken veriler sunucuya nasıl gidiyor tam anlamadım ama kodlar çalışıyor, teşekkürler.

Kerem Tekin
Kerem Tekin 24 Temmuz 2026

Oğuzhan bey, cURL kütüphanesi ile API isteği atıyoruz, veriler şifreli şekilde gidiyor. İsterseniz bir ara detaylıca konuşabiliriz.

Ebru
Ebru 26 Temmuz 2026

Çok açıklayıcı olmuş gerçekten. Özellikle teknik terimlerin bu kadar sade anlatılması çok iyi.

Ali Rıza
Ali Rıza 28 Temmuz 2026

Harika özetlemişsin, tam aradığım şeydi. Hemen denemelere başlıyorum.

Fatih Demir
Fatih Demir 29 Temmuz 2026

Kod bloklarını kopyalarken tırnak işaretlerinde sorun yaşıyorum, acaba karakter kodlamasından mı kaynaklanıyor?

Deniz Çelik
Deniz Çelik 30 Temmuz 2026

Fatih bey aynı sorunu yaşadım, editöre yapıştırırken düz metin olarak yapıştırırsanız düzeliyor.

Derya Y.
Derya Y. 30 Temmuz 2026

Iyzico entegrasyonu için de bir yazı hazırlayacak mısınız? Onu çok bekliyoruz.

Kerem Tekin
Kerem Tekin 31 Temmuz 2026

Derya hanım, planlarım arasında var, kısa süre içinde onu da detaylıca yazacağım.

Hakan Şahin
Hakan Şahin 31 Temmuz 2026

Yazı güzel ama biraz daha görsel destekli olsaydı tadından yenmezdi. Yine de elinize sağlık.

Zeynep K.
Zeynep K. 01 Ağustos 2026

Veritabanı güvenliği hakkında biraz daha detay verebilir miydiniz? SQL injection için ekstra bir önlem almamız gerekiyomu?

Kerem Tekin
Kerem Tekin 02 Ağustos 2026

Zeynep hanım, hazırladığım kodlarda $wpdb->prepare() kullandım, bu çoğu riski önlüyor ama yine de input sanitization işlemlerini ihmal etmeyin.

Mert Arı
Mert Arı 02 Ağustos 2026

Woocommerce kullanmadan yapmak isteyenler için harika bir rehber olmuş. Teşekkürler paylaşım için.

Selin_G
Selin_G 03 Ağustos 2026

Ya ben bu kodları ekledim ama checkout sayfasında hata alıyom. Acaba SSL sertifikasıyla mı alakalı bi durum bu?

Burak Ekinci
Burak Ekinci 04 Ağustos 2026

Selin hanım, SSL'den ziyade API anahtarlarını kontrol ettiniz mi? Ben de benzer sorun yaşamıştım, anahtarı yanlış kopyalamışım.

Caner Yılmaz
Caner Yılmaz 05 Ağustos 2026

Emeğine sağlık Kerem hocam, çok temiz bir anlatım olmuş. Özellikle API tarafındaki güvenlik önlemleri kısmını çok beğendim, çoğu kişi orayı es geçiyor.

Kerem Tekin
Kerem Tekin 06 Ağustos 2026

Teşekkür ederim Caner, güvenlik gerçekten bu işin en kritik noktası, ihmale gelmiyor.

Yorum Yaz