Geliştirici rehberi

Webhook & Callback Rehberi

Ödeme durumu değiştiğinde sonucu sunucunuza bildirimle alın: siparişi tarayıcıdan dönen yönlendirmeye değil, imzası doğrulanmış webhook bildirimine göre kapatın.

  • Ödeme sonucu sunucunuza iletilir
  • İmza doğrulamasıyla kaynak kontrolü
  • Tekrarlanan bildirime karşı tekilleştirme

Callback adresiniz, hesabınız açıldıktan sonra tanımlanır.

Bildirim alanları, imza yöntemi ve yeniden gönderim kuralları çalışılacak ödeme kuruluşunun çözümüne göre belirlenir.

Bildirim akışı

Ödeme sonucunu kendi sisteminize işleyin.

Kullanıcının tarayıcısına güvenmek yerine, sonucu sunucudan sunucuya gelen bildirimle doğrulayın ve siparişi ona göre kapatın.

Callback adresi

  • Herkese açık HTTPS adres
  • Oturum ya da giriş beklemez
  • Yanıtta 2xx döndürülür

Yanıtı geciktirmeyin; uzun işleri kuyruğa alın.

İmza doğrulama

  • Gövde ham haliyle alınır
  • İmza başlığıyla karşılaştırılır
  • Uyuşmazsa istek reddedilir

İmza yöntemi ve gizli anahtar, hesabınıza iletilen dokümantasyonda belirtilir.

Yeniden gönderim

  • Hatalı yanıtta tekrar denenir
  • Aynı olay birden çok gelebilir
  • Olay kimliğiyle tekilleştirilir

Deneme sayısı ve bekleme aralıkları seçilen çözüme göre değişebilir.

Callback adresi ve imza anahtarı, hesabınız açıldıktan sonra tanımlanır.

Ücretsiz Başvuru →Bildirim kayıtlarında kart bilgisi saklamayın. Ayrıntı için: KVKK Aydınlatma Metni.
İmza deneme alanı

İmzayı tarayıcınızda hesaplayın.

Örnek bildirim gövdesi ve test anahtarıyla HMAC-SHA256 imzasını hesaplayın; sunucunuzdaki kodun aynı sonucu verip vermediğini karşılaştırın.

Bu alan, imzanın ham gövdenin tamamından HMAC-SHA256 ile üretildiği yöntem içindir; bazı kuruluşlar imzayı belirli alanları birleştirerek üretir. Yöntem, başlık adı ve kodlama dokümantasyonunuzda yazar.

Gerçek gizli anahtarınızı yazmayın; test anahtarıyla deneyin. Hesaplama tarayıcınızda yapılır, girdiğiniz değerler hiçbir yere gönderilmez.

Kodlama

Sonuç burada görünür.

Test vektörü: sunucunuzdaki kod bu örnek gövde (boşluklar dahil, sonunda satır sonu olmadan; aşağıdaki gibi) ve test_gizli_anahtar_ornek anahtarıyla şu imzayı üretmelidir (hex): 029bb49b69f9e990905cb1ac5f1ceb5eb7103e3a10a84918a265ab49b5330019 · base64: Apu0m2n56ZCQXLGsXxzrXrcQPjoQqEkYomWrSbUzABk=

{"olay": "odeme.basarili", "islemNo": "TEST-000123", "siparisNo": "S-1001", "tutar": 150.00, "paraBirimi": "TRY"}

İmza eşleşmiyorsa:

  1. Gövdeyi ayrıştırıp yeniden yazdınız mı? İmza ham gövdeden hesaplanır.
  2. Kodlama (hex ya da base64) doğru mu; başlıktaki önek (ör. sha256=) çıkarıldı mı?
  3. Karakter kodlaması UTF-8 mi; satır sonu ya da boşluk değişti mi?
  4. Test ve canlı gizli anahtarı karışmadı mı?

Sunucunuzda doğrulama kodu (PHP · Node.js · Python): örnek kodlar →

Akışı uçtan uca denemek için: test ortamı · test senaryoları · POS hata kodları

Callback adresi ve imza anahtarı hesap açılışında tanımlanır. Ödemeyi kim alacak?

Sık sorulan sorular

Webhook ve callback hakkında.

Webhook ile callback arasındaki fark nedir?

Callback, ödeme sayfasından dönen kullanıcının tarayıcısıyla gelen yönlendirmedir; webhook ise sunucunuza doğrudan gönderilen bildirimdir. Siparişi kapatırken webhook bildirimini esas alın.

Callback adresimi nasıl tanımlarım?

Adres, hesabınız açıldıktan sonra tanımlanır. Adımların tamamı için başvuru süreci ve entegrasyon kılavuzu sayfalarına bakın.

Bildirimin doğru kaynaktan geldiğini nasıl anlarım?

İsteğin ham gövdesi ile paylaşılan gizli anahtardan üretilen imza, istek başlığındaki değerle karşılaştırılır. Kullanılan imza yöntemi ve başlık adı, hesabınıza iletilen API dokümantasyonu içinde belirtilir.

Aynı bildirim birden çok kez gelirse ne olur?

Yeniden gönderim nedeniyle aynı olay tekrar ulaşabilir. Olay kimliğini kaydedip daha önce işlenmişse yeniden işlemeyin; böylece sipariş iki kez kapanmaz.

Bildirimleri test ortamında deneyebilir miyim?

Evet. Ödeme senaryolarını test ortamı (sandbox) ve test kartları ile çalıştırıp bildirimin sunucunuza ulaşmasını izleyebilirsiniz.

Entegrasyona başlayın

Önce başvurunuzu tamamlayalım.

Callback adresi ve imza anahtarı hesap açılışıyla tanımlanır. Ön değerlendirme için başvuru formunu doldurun.

Başvuru ücretsizdir. Teklifi inceleyip karar verin.

Başvuru nasıl ilerler? →

Teknik sorularınız için:0212 909 00 87ya da WhatsApp’tan yazın

Ayrıntılar

Webhook ile Callback Arasındaki Fark

Callback, ödeme sayfasında işlemi bitiren kullanıcının tarayıcısıyla sitenize geri dönmesidir. Kullanıcı sayfayı kapatırsa, bağlantısı koparsa ya da yönlendirme tamamlanmazsa bu dönüş hiç gerçekleşmeyebilir. Bu yüzden callback, kullanıcıya sonuç ekranı göstermek için uygundur; siparişin gerçekten ödendiğine karar vermek için tek başına yeterli değildir.

Webhook ise ödeme tarafındaki sunucunun, kullanıcıdan bağımsız olarak sizin sunucunuza gönderdiği bir HTTP isteğidir. Genellikle POST yöntemiyle, gövdesinde JSON taşıyan bir istek gelir; içinde işlem kimliği, sipariş numarası, tutar ve sonuç durumu gibi alanlar bulunur. Alan adları ve olay tipleri, hesabınız açıldığında iletilen dokümantasyonda belirtilir. Pratikte iki mekanizma birlikte kullanılır: kullanıcı callback ile karşılanır, kayıt webhook ile kesinleştirilir.

Bildirim Almak ve İmzayı Doğrulamak

Bildirimi karşılayacak adres herkese açık bir HTTPS adresi olmalı ve oturum çerezi ya da kullanıcı girişi beklememelidir; isteği gönderen taraf sizin oturumunuza sahip değildir. Adresin kendisi de bir sır değildir; bu nedenle güvenlik adresin gizliliğine değil, imza doğrulamasına dayanır.

Doğrulamanın genel mantığı şudur: gelen isteğin gövdesi ham haliyle, ayrıştırılmadan ve yeniden serileştirilmeden alınır; paylaşılan gizli anahtarla bu gövdeden bir imza üretilir ve istek başlığında gelen imzayla karşılaştırılır. İki değer eşleşmiyorsa istek işlenmeden reddedilir. Karşılaştırmayı sabit süreli bir fonksiyonla yapmak iyi bir alışkanlıktır. Kullanılan imza yöntemi, başlık adı ve gizli anahtarın nasıl iletildiği seçilen ödeme kuruluşunun çözümüne göre değişir; ayrıntısı hesabınıza verilen API dokümantasyonu içinde belirtilir.

İmza geçerliyse bildirimi hemen baştan sona işlemek yerine kaydedip 2xx yanıtı döndürmek genellikle daha sağlıklıdır. Fatura kesme, e-posta gönderme, stok düşme gibi işleri kuyruğa alın; yanıtı geciktiren uzun işlemler, karşı tarafın teslimatı başarısız sayıp yeniden denemesine yol açabilir.

Yeniden Gönderim ve Idempotency

Sunucunuz yanıt veremezse veya hata döndürürse aynı olay bir süre sonra tekrar gönderilir. Deneme sayısı ve bekleme aralıkları seçilen çözüme göre değişir; tasarım açısından önemli olan nokta, aynı bildirimin birden fazla kez ulaşabileceğini varsaymanızdır.

Bunun çözümü idempotency'dir: aynı olay kaç kez işlenirse işlensin sonuç değişmemelidir. Uygulamada bildirimdeki olay ya da işlem kimliği benzersiz bir sütunda saklanır; her gelen bildirimde önce bu kayıt aranır. Kayıt varsa iş tekrarlanmadan 2xx dönülür, yoksa sipariş güncellenir ve kimlik yazılır. Sipariş durumunu güncellerken geriye dönüşü de engelleyin: başarıyla kapanmış bir sipariş, sonradan ulaşan eski bir bildirimle geri açılmamalıdır.

Bildirimleri ham gövde, başlıklar ve alınma zamanıyla birlikte günlüğe yazmak sorun çözmeyi kolaylaştırır. Dönen sonuç kodlarının karşılığı için POS hata kodları sayfasına bakabilirsiniz. Günlüklerde kart numarası, CVV ve benzeri veriler tutulmamalıdır.

Test Ortamında Deneme ve Canlıya Geçiş

Bildirim akışını canlıya almadan önce test ortamında uçtan uca çalıştırın. Ödeme senaryolarını test ortamı (sandbox) ve test kartları ile deneyip başarılı, başarısız ve doğrulama adımında kalan işlemlerde sunucunuza hangi bildirimlerin ulaştığını izleyebilirsiniz. Geliştirme sırasında yerel makineniz dışarıdan erişilebilir olmadığı için, isteği dışarıya açan bir tünel aracıyla ya da sunucuya konulan basit bir alıcı uçla çalışmak pratiktir.

Denemeye değer senaryolar: imzayı bilerek bozup isteğin reddedildiğini görmek, aynı bildirimi iki kez işleyip siparişin tek kez kapandığını doğrulamak ve yanıt vermeyen bir uç bırakıp yeniden gönderimin geldiğini gözlemlemek.

Canlıya geçerken test anahtarları yerine canlı anahtarlar ve canlı callback adresi kullanılır. Entegrasyonun tamamı için entegrasyon kılavuzu, hazır örnekler için örnek kodlar ve PHP, Node.js, Python SDK sayfalarına bakabilirsiniz. API tarafının genel görünümü için API ve SDK entegrasyonu sayfası da yardımcı olur.

Ara WhatsApp Ücretsiz Başvur →