Django
Python SDK kaynağı, Django 6.1.2 / Python 3.12+ için gerçek native testleri olan çalışan uygulama içerir. Ayrı framework paket kaydı değildir. Mevcut mağazanın kimlik/sipariş/teslim modeli aynı transaction sözleşmesine uyarlanmalıdır.
Kaynak ve tam kılavuz (opens in a new tab) · Sunucu kurulumu (opens in a new tab)
SDK 0.2.1 PyPI’da yayımlandı (opens in a new tab); mevcut uygulamanıza pip install lunixi-sdk==0.2.1 ile kurabilirsiniz. Bu örnek uygulama için v0.2.1 kaynak etiketini (opens in a new tab) ve ortak kurulumdaki kilitli ortamı kullanın; ayrı bir framework paketi yayımlanmamıştır.
Kurulum ve ayarlar
Eşleşen örnek kaynak etiketini alın ve kilitli ortamı kurun:
git clone --branch v0.2.1 --depth 1 https://github.com/Lunixi-Payment/lunixi-python.git
cd lunixi-python
python3.12 -m venv .venv
.venv/bin/pip install -r requirements-dev.lock
.venv/bin/pip install --no-deps -e .Korunan sunucu ortamına LUNIXI_PUBLIC_ORIGIN (güvenilen HTTPS origin), LUNIXI_MERCHANT_ID, LUNIXI_KEY_ID, LUNIXI_PRIVATE_KEY, ayrı LUNIXI_WEBHOOK_SECRET (16+ karakter), ayrı LUNIXI_SESSION_SECRET (32+ karakter), LUNIXI_ENCRYPTION_KEY (bağımsız rastgele 32 baytın base64'ü) ve LUNIXI_DATABASE (web kökü dışında kalıcı SQLite dosyası, üst klasörü mevcut) girilir. Anahtarları ayrı üretip yedekleyin; gerçek değerleri Git'e koymayın.
LUNIXI_CHECKOUT_MODE=embedded|hosted (varsayılan: embedded), LUNIXI_PREAUTH=true|false, LUNIXI_LOCALE=en|tr seçilebilir. Varsayılan gateway https://api-gateway.lunixi.com; alternatif yalnız operatör ayarıdır. Lunixi paneline <LUNIXI_PUBLIC_ORIGIN>/webhook kaydedilir, proxy ham baytları/başlıkları korur. Aşağıdaki public origin/port ve TLS sertifikasını operatör ayarlar.
python -m integrations.django_app.manage migrate
python -m integrations.django_app.manage createsuperuser
python -m integrations.django_app.manage seed_checkout --username YOUR_USER --amount 19.90 --currency TRY
uvicorn integrations.django_app.asgi:application --host 127.0.0.1 --port 8000 --ssl-keyfile /secure/tls/key.pem --ssl-certfile /secure/tls/cert.pemGerçek Django auth giriş formuyla oturum açıp oluşturulan sipariş adresine gidin. Sipariş gerçek kullanıcıya aittir; checkout native CSRF middleware ile korunur. Yalnız bilgilendirici dönüş ve imzalı webhook CSRF dışındadır. Migration örnek sipariş/stok ile korunan deneme/inbox/outbox tablolarını kurar. transaction.atomic(durable=True) native ORM transaction yapısını paylaşır; SQLite IMMEDIATE ayarı eşzamanlılık garantisi için korunmalıdır.
Ödeme, görev ve toparlama
Uzlaştırma her dakika çalışır. Tahsilat/iade/iptal sunucu operatörü komutlarıdır ve mevcut kalıcı işlem kimliği ister:
python -m integrations.django_app.manage lunixi_reconcile
python -m integrations.django_app.manage lunixi_operation refund --order-id ORDER_ID --operation-id PERSISTED_REFUND_ID --amount 1.00Pending/uncertain başarı değildir. Aynı ID/tutar takip edilir; yeni ID çözülmemiş işlemi atlayamaz.23 saatten eski teyitsiz finansal POST engellenir, kimlik doğrulamalı GET açıktır. Kesinliği bilinmeyen FAILED incelemede kalır. Tahsilat/iade/iptal yalnız doğrulanan bakiye/serbest bırakma kanıtıyla kesinleşir.
Webhook HMAC/zaman/imzalı kimlik, kimlik doğrulamalı merchant/sipariş/para birimi/tutar/çoklu kart/vade farkı kanıtı ve native sipariş/stok/inbox/outbox atomik commit edilir. Tarayıcı dönüşü ödendi yapmaz. Kısmi tahsilat/eksik çoklu kart bekler; native teslim blokesi ve değişmiş sipariş izi korunur. Outbox mevcut uygulamanın commit sonrası bildirim işçisine aittir; örnek dış e-posta veya sevkiyat başlatmaz.
Arayüz özgün Lunixi logosu, en/tr metin ve CSP nonce kullanır. Form yalnız resmî Lunixi bundle'ıyla açılır. Ödeme yöntemleri Lunixi panelinden gelir; kart numarası/CVV sunucuda alınmaz.
Native doğrulama
pytest -q tests/frameworks, gerçek framework istemcisi, oturum/kullanıcı/CSRF ve veritabanıyla yanlış sahiplik/Host, ham gövde bozulması/tekrar, native yazımdan sonra rollback, eşzamanlılık, teslim blokesi ve değişen sipariş reddini sınar. SDK kanonik/HTTPS testleri, Ruff, Mypy, Bandit ve bağımlılık denetimi de vardır. Gateway sentetiktir; canlı tahsilat veya marketplace onayı iddiası yoktur. Test ve derleme (opens in a new tab).
Sağlayıcı tarayıcı dönüşü
Lunixi yönlendirmeli, çoklu kart ve 3DS akışları /return/<sipariş-anahtarı> adresine POST gönderir. Siteler arası POST, SameSite=Lax çerezini taşımayabilir. Bu bilgilendirici uç gövdenin tamamını yok sayıp oturum, sipariş, veritabanı veya gateway'e erişmeden aynı göreli /return/<sipariş-anahtarı> GET adresine 303 döner. Sonraki GET, normal müşteri sahipliğini ve kimlik doğrulamalı ödeme sorgusunu uygulayıp korumalı checkout sayfasına geçer. Gönderilen durum, ödeme kimliği ve yönlendirme URL'si yetki sağlamaz.
Dönüş POST'u bildirilen gövdede 64 KiB sınırı uygular; HTTPS proxy'de chunked istekler dahil aynı ağ sınırını koyun. İmzalı webhook'un ayrı 1 MiB sınırı korunur. Yalnız bilgilendirici dönüş ve imzalı webhook checkout CSRF kontrolü dışındadır; finansal müşteri istekleri CSRF ve sahiplik ister. Gerçek WSGI/Uvicorn HTTP testleri oturumsuz303, sahte alanların yok sayılması ve bu aşamada sıfır veritabanı/gateway erişimini doğrular.
Varsayılan gömülü form ve isteğe bağlı backend ödeme sayfası
Framework örneklerinde varsayılan LUNIXI_CHECKOUT_MODE=embedded değeridir. Mevcut form yalnız https://cdn.lunixi.com/lunixi-checkout.min.js ve resmi object/token/mount API'siyle mağaza içinde açılır. Açıkça seçilen hosted modu da korunur. IntentResult.payment_page_url, backend'in isteğe bağlı paymentPageUrl alanını alır; hosted_url doğrulayıp bu adresi birebir döndürür. Sayfanın opak token'ı gömülü form token'ından farklı olabilir. Eksik/geçersiz adreste yönlendirme durur; tarayıcı token'ından adres üretilmez.
İki mod aynı formu kullanır; açık yöntemler, çoklu kart, taksit ve sigorta yönlendirme gerektirmez. Token ve sayfa adresi ayrı authenticated bağlamlarla şifrelenir. Kayıtlı dönüş adresi/mod/gövde/hash/anahtar değişmez; ayar değişikliği yeni tahsilat başlatamaz. Eski yönlendirmeli denemede backend adresi yoksa mutabakat gerekir. Ham webhook, sahiplik/oturum/CSRF, doğrulanmış tahsilat ve bilgilendirici 3DS/çoklu kart dönüşleri korunur.
0.2.1 kaynak sürümü için 27 odaklı SDK/native Django/FastAPI/Flask kontrolü geçti; önceki tam 0.2.0 doğrulaması temel kanıt olarak korunur. Canlı tahsilat veya yeni geniş merchant kabulü yapılmadı.
Checkout sayfasının CSP’si form POST’u için yalnız 'self' ve yapılandırılan gateway origin’ine (varsayılan https://api-gateway.lunixi.com) izin verir. Böylece tarayıcı SDK’sının desteklediği cüzdan/sağlayıcı ve eski POST geçişleri korunur. İncelenmiş başka bir sağlayıcı gerekiyorsa yalnız sunucuda LUNIXI_FORM_ACTION_ORIGINS tanımlayın: virgülle ayrılmış tam HTTPS origin’leri; boşluk, yol, sondaki slash, kullanıcı bilgisi, sorgu, fragment ve wildcard kabul edilmez. Geçersiz ayar reddedilir; gateway yanıtı veya tarayıcı alanı listeyi genişletemez. Script nonce, frame/connect sınırları ve bilgilendirici dönüş güvenliği korunur.