Python uygulamanıza ödeme akışını bağlarken kullanılan araçlar dilin alışıldık araçlarıdır: bir HTTP istemcisi, JSON ve kendi framework'ünüzün yönlendirme katmanı. Ödeme kuruluşunun arayüzü REST tabanlı olduğu için istekler JSON gövdeyle gönderilir, yanıtlar aynı biçimde okunur. Aşağıdaki bölümler Python tarafında izlenen sırayı, örnek bir çağrıyı ve framework seçiminin akışa etkisini anlatır. Uç nokta adresleri, alan adları ve paket bilgileri hesabınız açıldığında iletilen dokümantasyonda yer alır.
API anahtarları ve paket erişimi, hesabınız açıldıktan sonra tanımlanır.
iEntegrasyon araçları ve API, hesabınızın açıldığı ödeme kuruluşunun çözümüne aittir; sanalpos.com başvuruyu koordine eder.
Python entegrasyonunda neredesiniz?
Kod hazır olsa da anahtarlar hesapla gelir: test ve canlı anahtarlar, paket adı ve dokümantasyon hesabınız açılınca tanımlanır. Sıra: başvuru → test anahtarlarıyla kurulum → canlıya geçiş. Çatınızı (Django, Flask, FastAPI…) ön görüşmede belirtin.
Başvuruyu ödemeyi alacak işletme yapar; hesap ve anahtarlar onun adına tanımlanır. Müşterinize iletin:
Müşterinize gönderin
Merhaba, sitede ya da uygulamada kartla ödeme alabilmek için sanal POS başvurusunun işletme adına yapılması gerekiyor. Başvuru ücretsiz, ilk adım kısa bir form; belgeler sonraki aşamada istenir: https://www.sanalpos.com/sanal-pos-basvuru?utm_source=gelistirici&utm_medium=mesaj&utm_campaign=py#basvuru-formu — Hesap açılınca test ve canlı anahtarlar tanımlanıyor; entegrasyonu oradan tamamlayabilirim.
En sık neden imzayı ayrıştırılmış veriden hesaplamak. Ham gövdeyi alın: Django’da request.body, Flask’ta request.get_data(), FastAPI/Starlette’te await request.body(); imzayı bundan hesaplayıp hmac.compare_digest ile karşılaştırın. Ayrıştırılmış JSON’u yeniden dizgiye çevirmek imzayı güvenilir biçimde tutturmaz. Genel anlatım: webhook imza doğrulaması.
Bankadan dönüş çoğu akışta başka siteden gelen bir POST isteğidir: Django’da dönüş görünümünü @csrf_exempt ile CSRF korumasından muaf tutun (yoksa 403 döner). Oturum çereziniz SameSite=Lax ise bu POST’ta gönderilmez; siparişi oturumdan değil sipariş numarasından bulun. Durum değerleri: mdStatus kodları.
Gelmiyorsa adres HTTPS ve dışarıdan erişilebilir mi, güvenlik duvarı ya da bakım kipi engelliyor mu bakın. İki kez gelebilir: çoğu altyapı 200 almazsa yeniden gönderir; kural dokümantasyonunuzda yazar. Kaydı olay kimliğiyle bir kez işleyin.
Şirketiniz yoksa: bankalar bireysel sanal POS başvurusunu genellikle kabul etmez; ticari faaliyet belgesi (vergi levhası) istenir. Serbest meslek erbabı da başvurabilir: serbest meslek makbuzu kesiyorsanız «Değiştir»e basıp «Kendi işletmemin sitesi için kuruyorum»u seçin. Vergi kaydınız yoksa mükellefiyet için mali müşavirinize danışın.
Önce başvuru formunu doldurursunuz; ön değerlendirmenin ardından hesabınız ilgili ödeme kuruluşunda açılır. Test ve canlı API anahtarlarınız ile dokümantasyon erişiminiz bu aşamada tanımlanır.
02
Paketin kurulumu
Python tarafında entegrasyon, sağlanan SDK paketiyle ya da doğrudan REST çağrılarıyla kurulabilir. Paketin adı, kurulum komutu ve desteklenen Python sürümleri hesabınız açıldığında iletilen dokümantasyonda belirtilir.
03
Ödeme akışı ve ayarlar
Anahtarlarınızı ortam değişkenlerine girer, ödeme başlatma isteğini sunucudan gönderir, 3D Secure yönlendirmesini ve dönüş adresini tanımlarsınız. Sonuç bildirimi için callback veya webhook uç noktanızı ayarlarsınız.
04
Test ve canlıya geçiş
Akışı test anahtarlarıyla uçtan uca çalıştırır, başarılı ve başarısız senaryoları denersiniz. Doğruladıktan sonra yalnız ortam ve anahtar değerlerini canlıya çevirirsiniz; kod yapısı aynı kalır.
Entegrasyon süresi kendi yazılımınızın yapısına, kullandığınız framework'e ve seçilen ödeme kuruluşunun çözümüne göre değişir.
Başvuru ücretsizdir. Teklifi inceleyip karar verin.
Python tarafında
Entegrasyonun öne çıkan başlıkları.
Python projelerinde ödeme akışı üç parçadan oluşur: paketin ya da HTTP istemcisinin kurulumu, ödeme isteğinin sunucudan gönderilmesi ve sonucun bildirimle kesinleştirilmesi. Aşağıdaki başlıklar bu parçaları özetler.
Paket ve REST çağrısı
pip ile bağımlılık kurulumu
requests ile doğrudan REST isteği
JSON istek ve yanıt yapısı
Paket adı ve kurulum komutu, hesabınız açıldığında iletilen dokümantasyonda belirtilir.
Framework uyumu
Django, Flask ve FastAPI projeleri
Saf Python arka uçlar
Senkron ya da asenkron istemci
Kütüphane REST üzerinden çalıştığı için framework seçimi akışın yapısını değiştirmez.
3D Secure ve bildirim
Doğrulama adımına yönlendirme
Callback ve webhook uç noktası
İmza doğrulama ve idempotent kayıt
iÖdeme sonucunu tarayıcıdan dönen yanıtla değil, sunucunuza gelen bildirimle kesinleştirin.
Desteklenen sürümler, metot adları ve alan yapısı seçilen ödeme kuruluşunun çözümüne göre değişir.
Süre kendi yazılımınızın yapısına, ödeme akışınızın karmaşıklığına ve seçilen ödeme kuruluşunun çözümüne göre değişir. Hazır paket kullanan ekipler genellikle daha az kod yazar. Adım adım sıra için entegrasyon kılavuzu sayfasına bakabilirsiniz.
Django ve Flask ile uyumlu mu?
Ödeme arayüzü REST üzerinden çalıştığı için framework bağımsızdır; Django, Flask, FastAPI ya da saf Python projelerinde aynı çağrılar kullanılır. Hazır paketin kapsamı ve örnekleri için Python SDK sayfasına bakın.
Asenkron (async) desteği var mı?
REST çağrıları asyncio ile çalışan bir HTTP istemcisinden de gönderilebilir; bu yönüyle FastAPI ve aiohttp gibi asenkron yapılarla kullanılabilir. Sağlanan paketin asenkron kapsamı, hesabınız açıldığında iletilen dokümantasyonda belirtilir.
Python 2 desteği var mı?
Python 2 güvenlik güncellemesi almadığı için yeni entegrasyonlarda önerilmez. Desteklenen Python sürümlerinin kesin listesi seçilen çözüme göre değişir ve dokümantasyonunuzda yer alır.
Entegrasyona başlayın
Önce başvurunuzu tamamlayalım.
API anahtarları, paket erişimi ve dokümantasyon hesap açılışıyla tanımlanır. Ön değerlendirme için başvuru formunu doldurun.
Python, okunabilir sözdizimi ve geniş kütüphane desteği sayesinde ödeme entegrasyonunu anlaşılır bir işe dönüştürür. Web tarafında Django, Flask ve FastAPI gibi olgun framework'ler bulunur ve üçü de ödeme akışının ihtiyaç duyduğu parçalara sahiptir: sunucudan istek göndermek, kart sahibini doğrulama adımına yönlendirmek, dönen bildirimi karşılayıp kendi kaydınıza işlemek.
Entegrasyonun büyük bölümü birkaç REST çağrısından oluşur. requests gibi bir HTTP istemcisiyle ödeme başlatma isteği birkaç satır kodla yazılır; dönen yanıt sözlük yapısına çevrilip doğrudan kullanılabilir. Bu yalınlık, Django ile kurulmuş kapsamlı bir e-ticaret projesinde de, Flask ile yazılmış hafif bir mikroserviste de akışın aynı kalmasını sağlar.
Python'un veri tarafındaki ekosistemi, ödeme kayıtlarınızı sonradan incelemek istediğinizde işe yarar. Panelden ya da raporlama çağrılarından aldığınız işlem kayıtlarını pandas ile filtreleyebilir, matplotlib veya seaborn ile görselleştirebilirsiniz. Hangi raporlama çağrılarının hesabınıza tanımlı olduğu ve dışa aktarım biçimleri seçilen çözüme göre değişir.
Asenkron çalışan projeler için de engel yoktur. asyncio ile çalışan bir HTTP istemcisi kullanıldığında ödeme çağrıları FastAPI veya aiohttp tabanlı bir uygulamanın içinden de gönderilebilir. Hazır paketin senkron ve asenkron kapsamı ile desteklenen Python sürümleri dokümantasyonunuzda belirtilir.
Kod Örneği
Aşağıdaki örnek, Python ve requests kütüphanesi ile REST üzerinden bir ödeme isteğinin nasıl gönderildiğini gösterir. Hazır paket kullanacaksanız kurulum bağımlılık yöneticisiyle yapılır; aşağıdaki paket adı yer tutucudur, gerçek ad ve komut hesabınız açıldığında iletilen dokümantasyonda belirtilir.
bash
# Paket adı hesabınız açıldığında iletilen dokümantasyonda yazılıdır.
# Tahmin ettiğiniz bir adla kurulum yapmayın (sahte paket riski).
pip install <dokumantasyondaki-paket-adi>
Paket kullanmak zorunlu değildir. Aynı işlem yalnızca bir HTTP istemcisiyle de yapılabilir; bu durumda imzalama ve hata yönetimini kendi tarafınızda kurarsınız. Aşağıdaki çağrıda adres ve alan adları örnektir.
Kart numarasını kendi formunuzla alıp sunucunuzdan gönderirseniz kart verisi işleyen taraf olursunuz ve PCI DSS yükümlülüğünüz büyür; ödeme kuruluşunun ödeme sayfası ya da iframe’i kullanıldığında kart bilgisi sunucunuza ulaşmaz.
python
import os
import requests
# Anahtarı kod deposuna yazmayın; sunucu ortam değişkeninde tutun
API_KEY = os.environ['SANALPOS_API_KEY']
# adres ve alan adları dokümantasyonunuzda
BASE_URL = 'https://API_ADRESI/v1'
def odeme_baslat(siparis):
# Kart bilgisi bu isteğe eklenmez; müşteri kartını ödeme kuruluşunun
# sayfasında ya da iframe'inde girer. Tutarı kendi kaydınızdan alın.
response = requests.post(
f'{BASE_URL}/payments',
headers={'Authorization': f'Bearer {API_KEY}'},
json={
'amount': siparis['tutar'], # tutar biçimi (TL / kuruş) dokümantasyonunuzda
'currency': 'TRY',
'orderId': siparis['no'],
'callbackUrl': 'https://siteadresiniz.com/odeme-sonuc',
},
timeout=15,
)
response.raise_for_status()
return response.json() # 3D Secure / ödeme sayfası yönlendirme adresini içerir
Bu örnek temel bir REST çağrısını gösterir; metot adları, zorunlu alanlar ve dönen durum kodları seçilen çözüme göre değişir. Tutar, para birimi ve sipariş numarası her zaman sunucuda belirlenir, tarayıcıdan gelen değere güvenilmez. Uç nokta ve alan referansı için API dokümantasyonu, Python'a özgü örnekler için Python SDK sayfasına bakın.
Framework Seçimi ve Ödeme Akışı
Akış hangi framework'te olursa olsun aynı sırayı izler. Ödeme isteği sunucudan oluşturulur, kart sahibi 3D Secure doğrulamasına yönlendirilir ve dönüşte sonuç sunucu tarafında doğrulanır. Django'da bu adımlar birer view ile, Flask'ta birer route ile, FastAPI'de birer endpoint ile karşılanır; değişen yalnızca yazım biçimidir.
Bildirim uç noktası ayrı bir adres olarak tanımlanır. Ödeme sonucu değiştiğinde sunucunuza bir istek gönderilir; siz önce imzayı doğrular, sonra sipariş durumunu güncelleyip 200 yanıtı dönersiniz. Aynı bildirim iki kez gelebileceği için kaydın idempotent güncellenmesi, yani ikinci gelişte çift kayıt oluşturmaması beklenir. Alan yapısı ve yeniden deneme davranışı webhook ve callback sayfasında açıklanır.
Anahtarlar kod dosyalarına ya da sürüm deposuna yazılmaz; sunucu ortam değişkenlerinde tutulur. Test ve canlı anahtarlar ayrı tutulur, canlı anahtarla test yapılmaz. Günlük kayıtlarında kart numarası, CVV ve API anahtarı bulunmamalıdır. Test senaryolarının nasıl çalıştırılacağı test ortamı (sandbox) sayfasında, dönen kodların karşılığı POS hata kodları sayfasında yer alır.
Akış test anahtarlarıyla doğrulandıktan sonra yalnız ortam ve anahtar değerleri canlıya çevrilir; kod yapısı aynı kalır. Entegrasyona başlamak için önce başvuru formunu doldurmanız yeterlidir; anahtarlar ve dokümantasyon erişimi hesap açılışıyla tanımlanır.
Teknik gereksinimler
Python entegrasyonu için teknik gereksinimler
Gereksinim
Detay
Python
Destek süren bir sürüm (python.org destek takvimi)
pip
Paket yöneticisi
requests kütüphanesi
Örnekteki doğrudan çağrı için (pip install requests)
SSL Sertifikası
Gerekli (HTTPS)
Ödeme kuruluşu hesabı
Başvuru sonrası açılır (başvuru ücretsizdir)
Sürüm bilgileri genel çerçevedir; kesin gereksinimler ve desteklenen sürümler, hesabınız açıldığında iletilen dokümantasyonda belirtilir.