OpenCart 4
Doğrulanmış public mağaza ZIP’i 0.1.2: lunixi.ocmod.zip (opens in a new tab) · SHA256SUMS (opens in a new tab) · Yayın v0.1.2 (opens in a new tab). CI’da üretilen kurulum paketi 2026-10-31 tarihinde indirilerek doğrulandı. GitHub’ın otomatik kaynak arşivi yerine bu dosyayı kullanın.
Public CI ZIP SHA256: 09c0b905a20d9f39676cb57e55b6ea3dc7cc5d1cf575df108bce5d9c4e694175.
Lunixi Payments 0.1.2, özgün OpenCart 4.1.0.4 sipariş yaşam döngüsüne bağlanır. Kurulum ZIP'i, ad alanı ayrılmış PHP SDK 0.29.5 içerir; mağazada Composer gerekmez.
Varsayılan gömülü form mağaza içinde açılır; isteğe bağlı yönlendirme backend'in doğrulanmış paymentPageUrl adresini kullanır. Uygun yemek kartları, alışveriş kredisi, taksit, sigorta ve çoklu kart gibi yöntemler Lunixi panelindeki form ayarlarından gelir; eklentide yeniden yöntem seçimi yapılmaz. Kart numarası/CVV mağaza sunucusuna alınmaz.
Kaynak ve kurulum paketi (opens in a new tab) · Türkçe ayrıntılı kılavuz (opens in a new tab)
Gereksinimler
- Özgün sipariş modeliyle OpenCart 4.1.0.4; farklı sürüm için yeniden uyumluluk incelemesi.
- Platformun desteklediği aralıkta 64 bit PHP 8.3+; BCMath, cURL, JSON, Sodium, MySQLi.
- MySQL/MariaDB üzerinde mağaza/eklenti tablolarının tamamında InnoDB ve HTTPS mağaza/webhook.
- Lunixi merchant, Ed25519 anahtarı, webhook secret ve bağımsız yedeklenmiş 32 bayt sunucu şifreleme anahtarı.
OpenCart 4 varsayılan InnoDB kullanır; üçüncü taraf tablolar da aynı gereksinimi karşılamalıdır. Değiştirilmiş sipariş modeli veya denetlenmemiş aktif sipariş/history, total ve fraud hook'ları ön kontrolde reddedilir. Yerel denetlenmiş iş/fraud event'leri ve teslim blokeleri korunur. Her tema/eklenti kombinasyonunun uyumlu olduğu iddia edilmez. Tekrarlayan abonelik sepetleri bu sürümde kapalıdır.
Kurulum ve ayarlar
- Yedek alın, önce staging ortamında deneyin ve InnoDB/uyumluluk ön kontrolünü tamamlayın.
- Ayrı sunucu anahtarını yerelde oluşturun:
php -r 'echo base64_encode(random_bytes(32)), PHP_EOL;'LUNIXI_OPENCART_ENCRYPTION_KEY değişkenini web PHP ve CLI görevine verin; web kökü/veritabanı dışında saklayıp ayrıca yedekleyin. Anahtar kaybolursa şifreli eski profiller çözülemez.
lunixi.ocmod.zipdosyasını Eklentiler → Yükleyici üzerinden yükleyip Ödemeler → Lunixi Payments kurulumunu yapın. ZIP adını değiştirmeyin; extension/lunixi klasörü bu addan oluşur.- Yöneticiye Lunixi eklentisi görme/değiştirme izni verin. Tahsilat/iade/iptal için ayrıca
sale/orderdeğiştirme izni gerekir. - Ayarlarda mağazayı seçip Merchant ID, Key ID, Ed25519 özel anahtarı ve webhook secret girin. Alanlar tekrar açıldığında boş kalır; boş bırakmak kayıtlı şifreli profili korur. Her mağazayı ayrı yapılandırın.
- Varsayılan gömülü formu veya isteğe bağlı yönlendirmeyi seçin; ön provizyon ayrıca ayarlanabilir. Modül ayrı bekleyen/ön provizyon/inceleme durumları oluşturur. Yalnız ödenmiş durumunu yerel işleme/tamamlandı kümelerine; diğer durumları bu kümelerin dışına eşleyin.
- Ekrandaki HTTPS webhook adresini Lunixi paneline kaydedin:
https://magaza.example/index.php?route=extension/lunixi/payment/lunixi.webhookProxy ham gövdeyi ve X-Lunixi-* başlıklarını korumalıdır. Form yöntemleri Lunixi panelinden yönetilir.
- Görevi kurup staging doğrulamasından sonra modülü etkinleştirin.
Görev, tahsilat ve iade
Aynı sunucu anahtarı/PHP eklentileriyle her mağaza için her dakika çalıştırın:
php /absolute/shop/extension/lunixi/system/library/lunixi4/cli.php --root=/absolute/shop --store-id=0Web cron adresi kapalıdır. Yönetim ekranındaki tahsilat/iade/iptal isteği kalıcı işlem kimliğiyle kuyruğa alınır; gerçek sipariş/stok kodunu katalog bağlamındaki görev çalıştırır. Sonra işlem durumunu yenileyin. Bekleyen/belirsiz başarılı değildir; aynı kimlik ve tutarla takip/tekrar yapılır. Sonuç çözülmeden farklı işlem açılamaz. Başarı, istenen hareketi kimlik doğrulamalı bakiye sorgusu kanıtladığında gösterilir. İade tahsil edilmiş bakiyeyi aşamaz; çoklu kart iadeleri ortak üst ödeme API'sinden yürür.
Görev eksik webhook'ları uzlaştırır, commit sonrası yerel bildirimleri gönderir. E-posta sending/uncertain kayıtları otomatik yeniden gönderilmez; operatör incelemesi gerekir. Kaldırma finansal geçmişi, profilleri, işlem kimliklerini, olay/bildirim kuyruklarını ve özel durumları korur.
Ödeme kanıtı ve güvenlik
Tarayıcı dönüşü/query parametresi/form olayı siparişi ödendi yapmaz. Token öncesinde oturum, müşteri, mağaza ve sipariş sahipliği doğrulanır. Ham gövde v2 HMAC, zaman ve imzalı olay kimliği; ardından kimlik doğrulamalı ödeme sorgusuyla merchant/ödeme/sipariş/para birimi ve sabit tam sayı tutar kontrol edilir. Kalıcı kilitler, olay tüketimi ve yerel stok/history tek transaction içindedir. Eşzamanlı/tekrarlanan olay bir kez uygulanır; hata halinde birlikte geri alınır.
Kısmi tahsilat ve eksik çoklu kart üst ödemesi teslimi başlatmaz. Müşteri taksit vade farkı sabit sipariş iziyle doğrulanıp sepetten ayrı kaydedilir. Sipariş tutarı/para birimi değişirse eski ödeme onu tamamlayamaz. Yanıtı kaybolan ödeme oluşturma isteği yalnız imzalı webhook ve özgün rezervasyon izini kanıtlayan kimlik doğrulamalı sorguyla toparlanabilir; bağlı ödeme kimliği değiştirilemez. Tahsil edilmiş olsa bile yerel fraud/manual teslim blokesi korunur.
Gömülü form yalnız https://cdn.lunixi.com/lunixi-checkout.min.js resmî paketiyle açılır. Özel/webhook anahtarları sunucuda kalır. Nonce kullanan CSP için güvenilir sunucu entegrasyonu yanıtın lunixi_csp_nonce native config değerini belirleyebilir. Varsayılan gateway https://api-gateway.lunixi.com; alternatif origin yalnız operatörün tam HTTPS ortam allowlist ayarıyla seçilebilir.
Eski profilleri ve ayrı sunucu anahtarını iade/uzlaştırma saklama süresince tutun; gateway anahtar iptalini buna göre planlayın. Ham gövde/token/anahtar loglamayın. Güvenlik ve operasyon (opens in a new tab).
Doğrulama
Testler resmî OpenCart 4.1.0.4 kurulumu, gerçek modeller/event'ler, yerel yöneticiler ve MariaDB üzerinde üretilmiş ZIP'i çalıştırır. Tam ondalık FX/ISO hassasiyeti, MyISAM engeli, rollback/stok/history, fraud blokesi, imza bozulması/tekrar/çakışma/eşzamanlı süreç, tahsilat/iade/iptal, gecikmeli teyit ve kayıp yanıt toparlama sınanır. PHPStan seviye 5 yerel katmanı, ortak SDK kendi bağımsız testlerini denetler. Ayrı yerel yönetici süreci form/anahtar/CSRF/yetki/kaldırma geçmiş korumasını doğrular.
GitHub kaynak/modül yayını Marketplace onayı değildir. Çevrimdışı kabulde sentetik gateway transport kullanılır; canlı tahsilat iddiası yoktur. Test ve derleme yönergesi (opens in a new tab). Eklenti GPL-3.0-or-later, paketlenen SDK MIT lisanslıdır.
Finansal sonucu belirsiz işlemler incelemede tutulur. FAILED tek başına yeni denemeye izin vermez; herkese açık ödeme sorgusu kesin sağlayıcı sonuç kanıtını döndürmez. Sonuçlanmamış finansal tekrarlar 23 saat sonra durur; kimliği doğrulanmış GET mutabakatı devam eder. Zaman aşımı, form token süresi veya tarayıcı dönüşü yeni finansal anahtar üretmez.
Sağlayıcı tarayıcı dönüşü
Lunixi yönlendirmeli, çoklu kart ve 3DS akışları üretilen returned adresine POST ile döner. Yalnız bu bilgilendirici dönüş ucu oturum/CSRF token olmadan POST kabul eder: form gövdesinin tamamını yok sayıp özgün dönüş URL'sindeki sayısal order_id ile aynı sitedeki göreli GET adresine 303 döner. Ödeme sorgulamaz, sipariş verisi göstermez ve finansal kayıt değiştirmez. GET aşamasında yerel oturum/müşteri/mağaza/sipariş sahipliği ve kimlik doğrulamalı ödeme sorgusu korunur. Checkout/yönetici POST korumaları devam eder; tarayıcının başarı alanları ödeme kanıtı değildir.
Uygulama dönüşün bildirilen gövdesi 64 KiB üzerindeyse reddeder. HTTPS proxy'de bu uç için chunked istekleri de kapsayan aynı ağ gövdesi sınırını uygulayın; imzalı webhook'un ayrı 1 MiB sınırını koruyun. Dönüşü checkout/confirm POST adresine çevirmeyin, GET sahiplik kontrolünü kaldırmayın.
Form modu ve mevcut ödeme denemeleri
Varsayılan, mağaza içinde açılan gömülü Lunixi formudur. İsteğe bağlı yönlendirme, backend'in döndürdüğü doğrulanmış paymentPageUrl adresini birebir kullanır. İki mod da aynı formu açar; açık yöntemler, çoklu kart, taksit ve sigorta Lunixi panelinden yönetilir ve yönlendirme gerektirmez. Tarayıcı token'ından ödeme sayfası adresi üretilmez.
Önceden açıkça seçilmiş yönlendirme ayarları korunur. Form modu, dönüş adresi, ön provizyon ve dil özgün ödeme isteğine bağlıdır; değiştirmek denemenin hash veya idempotency anahtarını sıfırlayamaz. Eski bir denemede backend ödeme adresi kayıtlı değilse yönlendirme güvenli biçimde durur; adres üretmek, geçmişi silmek veya yeni anahtar açmak yerine mevcut denemeyi uzlaştırın. Gömülü form korumalı tarayıcı yapılandırmasını kullanır. İmzalı webhook, doğrulanmış tahsilat kontrolleri ve bilgilendirici 3DS/çoklu kart dönüşleri korunur.