Entegrasyonlar
ASP.NET Core

ASP.NET Core

Lunixi.Sdk 0.1.1 NuGet’te yayımlandı (opens in a new tab). Herkese açık paketin içeriği, kaynak commit’i ve NuGet katalog SHA-512 özeti 31 Ekim 2026’da doğrulandı.

0.1.1 sürümü mağaza sitesi için somut bir sunum örneği içerir. Varsayılan gömülü ödemedir: yalnız resmi Lunixi bundle yüklenir ve mevcut form mount edilir; yöntem ve çoklu kart seçenekleri Lunixi panelinde kalır. İsteğe bağlı yönlendirme yalnız backend paymentPageUrl adresini, tam HTTPS pay.lunixi.com/payment/ doğrulamasından sonra kullanır. Adresin token’ı gömülü token’dan farklı olabilir. Eksik adres gömülü ödemeyi engellemez; yönlendirme aynı deneme/anahtarla inceleme veya uzlaştırmada kalır. Tarayıcı token’ından adres üretmeyin. Formdan önce müşteri/sipariş sahipliğini ve yerel tarayıcı CSRF’yi doğrulayın; Cache-Control: private, no-store gönderin, mağazanın CSP nonce değerini koruyun; token, HTML ve yönlendirme adreslerini loglamayın. Genel yanıt verisi paymentPageUrl alanını korur; yeni tipli ürün eşitliği iddiası yoktur.

.NET / C# SDK reposunda samples/AspNetCore (opens in a new tab) altında çalışan ASP.NET Core 8 backend bulunur. Minimal API, ortak SDK ve yerel SQLite; sunucu fiyatlı ödeme başlatma, kalıcı idempotency anahtarı ve atomik webhook/sipariş güncellemesini gösterir. Ayrı NuGet framework paketi değildir.

Örnek, açıkça tanımlanan bearer token ile korunan güvenilir backend API'sidir. Müşteri girişi veya müşteri bazlı sipariş sahipliği sistemi sunmaz. Backend tokenını tarayıcı/mobil uygulamaya vermeyin; kendi yerel kimlik ve sipariş yetkilerinizi bağlayın. Çerezli tarayıcı kimliği eklerseniz durum değiştiren müşteri/yönetici rotalarında uygun ASP.NET Core antiforgery politikasını uygulayın.

SDK’yı ASP.NET Core projenize ekleme

dotnet add package Lunixi.Sdk --version 0.1.1 --source https://api.nuget.org/v3/index.json

Yayımlanan SDK, uygulamanıza bağımlılık olarak eklenir. Aşağıdaki çalışan örnek ise SDK reposundaki kaynak uygulamadır; kendi SQLite/backend yetkilendirme ayarlarını kullanır.

Kaynaktan çalıştırma

Projenin belirttiği net8.0 hedefiyle uyumlu SDK/runtime kullanın. Mevcut proje, aynı checkout içindeki SDK'yı project reference ile kullanır. Bu kaynak akışı yayımlanmış NuGet paketine ek bir geliştirme seçeneğidir.

git clone https://github.com/Lunixi-Payment/lunixi-dotnet.git
cd lunixi-dotnet
dotnet restore samples/AspNetCore/AspNetCore.csproj --locked-mode
dotnet run --project samples/AspNetCore/AspNetCore.csproj --urls http://127.0.0.1:5080

Başlatmadan önce sunucu sır sağlayıcısı veya kabukta şu değişkenleri tanımlayın:

DeğişkenDeğer
LUNIXI_BASE_URLhttps://api-gateway.lunixi.com
LUNIXI_MERCHANT_IDDoğrulanmış ödeme kaydında beklenen üye işyeri kimliği
LUNIXI_KEY_IDKayıtlı üye işyeri TEST gizli anahtar kimliği
LUNIXI_PRIVATE_KEY_PEMGerçek satır sonlarıyla Ed25519 PKCS#8 özel PEM
LUNIXI_WEBHOOK_SECRETBildirim imzalama sırrı
DEMO_API_TOKENBağımsız rastgele backend erişim tokenı; en az 32 karakter
LUNIXI_DATABASE_PATHKalıcı depoda mutlak, özel ve yazılabilir SQLite yolu
MERCHANT_CALLBACK_URLHerkese açık HTTPS /payments/return adresiniz

Geliştirme dinleyicisi loopback HTTP'dir. Gerçek TEST akışında HTTPS/TLS ve Lunixi'ye kayıtlı https://adresiniz/webhooks/lunixi gerekir. Sır, token ve veritabanını Git dışında tutun. Örnek başlangıçta SQLite şemasını ve bir DEMO-1001 siparişini oluşturur; yayında deneme kurulumunu gözden geçirilmiş uygulama migration'larıyla değiştirin.

Rotalar ve akış

RotaDavranış
GET /healthYalnız hazır olma bilgisi
POST /checkout/DEMO-1001Backend bearer token; SQLite'tan 10050 TRY alt birim okur, ağdan önce deneme anahtarı saklar
GET /orders/DEMO-1001Aynı backend yetkisiyle yerel durum
GET/POST /payments/returnYalnız bilgi; ödeme durumunu değiştirme yetkisi yoktur
POST /webhooks/lunixiSınırlı asıl ham bayt, v2 imza ve kimliği doğrulanmış ödeme GET'i

Güvenilir backend'den Authorization: Bearer <DEMO_API_TOKEN> ile checkout çağrılır. İstek gövdesindeki fiyat kullanılmaz. Gerçek gateway zarfında data.paymentId ve data.token bulunur; tokenı mevcut Lunixi formu ile ilgili yetkili checkout'a verin. Örnek kart formu oluşturmaz ve ham kart verisi saklamaz. Yanıt gövdesini günlüğe, backend erişim tokenını checkout'a göndermeyin.

Aynı sipariş, yeniden başlatma sonrasında da ilk veritabanı deneme/anahtarını kullanır. 23 saatten sonra olası süresi dolmuş anahtarla POST yerine uzlaştırma ister. Bekleyen yanıt tahsilat kanıtı değildir; belirsiz anahtarı yenisiyle değiştirmeyin.

Webhook ve kalıcılık

Webhook en fazla 1 MiB okur, imza başlık değerlerini korur, ham bildirimi doğrular ve yalnız yerel siparişe önceden bağlanmış ödemeyi bulur. Ardından kimliği doğrulanmış GET ile ödeme, yapılandırılmış üye işyeri, sipariş referansı, tam tutar, para birimi ve tam tahsilat/iade bakiyesini eşleştirir.

Yalnız sıfır iadeli tam tahsilat ödenmiş yapar; provizyon bekler. Olay/tarayıcı durumu teslimat nedeni değildir. Sonraki eski GET, kayıtlı iadeyi geri alamaz. Olay kimliği ve ham içerik özeti kalıcıdır: aynı commit edilmiş teslim kabul edilir, aynı kimlikte farklı içerik reddedilir. Olay kaydı ve sipariş aynı SQLite transaction içinde commit olur. Geçersiz imza 400; eksik/uyuşmayan tahsilat uzlaştırma için 503 döner.

Açık sınırlar

  • Sabit backend tokenı ve deneme siparişi bağlantıyı gösterir; üretim müşteri yetkisi, sipariş fiyatlandırması veya izin sistemi değildir.
  • Normal tahsilat/provizyon/iade okumaları kapsanır. Çoklu kart ana/alt ödeme ve senet tahsilatı uygulamanın ray bazlı politikasını bekleyerek kapalı kalır.
  • Son tahsilat kayıtlı sipariş toplamına eşit olmalıdır. Taksit ek bedeli, sigorta primi, kısmi tahsilat veya değişen tutarı açmadan önce onaylı tutarı saklayıp doğrulayın; teslimatı sağlayıcı/sigorta durumundan ayırın.
  • Eksik webhook/arka plan uzlaştırma, eski deneme incelemesi, olay saklama/izleme, iade/itiraz akışlarını üretimden önce ekleyin. Harici teslimat/e-posta kuralları örnekte uydurulmaz.
  • SQLite çalışan tek mağaza örneğidir. Dağıtık üretim işçileri, kalıcı depoda test edilmiş yerel kilit/izolasyon ve atomik olay/sipariş işlemi ister.

Diğer SDK istemcileri ve alt seviye mali operasyonlar .NET SDK rehberindedir. Bu sayfa kodu tekrar etmez ve SDK'nın bütün yüzeylerinin bu örneğe bağlandığını iddia etmez.

Doğrulama

dotnet test tests/Lunixi.Sdk.Tests/Lunixi.Sdk.Tests.csproj -c Release --filter "FullyQualifiedName~AspNetCore"

Repo TestServer testleri gerçek framework rotası ve yerel SQLite, kontrollü gateway taşıması kullanır. Backend yetkisi, sunucu tutarı, sabit anahtar, bozuk ilk yanıt kimlikleri, imzalı/tekrar/çakışan olay, sahte tarayıcı dönüşü, tutar uyuşmazlığı ve kalıcı tahsilat durumu test edilir. Canlı gateway tahsilatı yapılmaz. Gerçek ödemeden önce herkese açık HTTPS uygulamanızda kayıtlı TEST üye işyeriyle ödeme ve gerçek webhook kabulünü tamamlayın.

Kaynaklar: Microsoft Minimal API (opens in a new tab), entegrasyon testi (opens in a new tab), antiforgery (opens in a new tab), örnek kaynak ve kurulum (opens in a new tab).

Mağaza içi entegrasyon örneği

Çalışan ASP.NET Core örneğinde yetkili POST /checkout/{orderId}/form varsayılan olarak gömülü HTML üretir; ?mode=hosted doğrulanmış backend adresini kullanır. Mevcut /checkout/{orderId} JSON sözleşmesi korunur. Renderer ve adres doğrulayıcısı Lunixi.AspNetCoreSample.CheckoutPresentation içindedir. DEMO_API_TOKEN yalnız sunucudan sunucuya kullanılır; tarayıcı JavaScript’ine vermeyin. Mağaza checkout controller’ı bu yanıtı sunmadan önce müşteri oturumunu, sipariş sahipliğini ve yerel CSRF’yi doğrulamalıdır. Örnek müşteri girişi veya üretim tenant yetkilendirmesi uygulamaz.