Merhaba,

Uzun süredir üzerinde çalıştığım Paketora adlı dijital paket/hizmet satış sistemini
tanıtmak istiyorum. Sosyal medya hizmetleri, lisans satışı, e-pin, ajans hizmetleri ve
kurumsal paketler gibi dijital ürünleri tek panelden satmak için yazıldı.

Hazır framework kullanılmadı; kendi MVC altyapısı üzerine kuruldu. Composer bağımlılığı yok.

En belirgin özelliği: gerçek modüler yapı

Piyasadaki çoğu scriptte "modül kapatma" sadece menüden link gizler; içerik hâlâ Google'da
indekslenir, adres elle yazılınca sayfa açılır. Burada öyle değil:

Bir modül kapatıldığında sistemin tamamı buna uyar:
  • Header, mega menü, mobil menü
  • Ana sayfa blokları, slider, banner, kampanya
  • Kategori ve paket sorguları (her public sorguya modül filtresi girer)
  • Arama ve arama önerileri
  • sitemap.xml
  • Public rotalar → 404 döner (301 yönlendirme yapılmaz)
  • Footer, sepet, ödeme adımı
  • Yönetim paneli menüsü ve dashboard istatistikleri

Ve en önemlisi: veriler SİLİNMEZ. Modül tekrar açıldığında her şey geri gelir.
Eski siparişler, kayıtlar, loglar korunur.

Modüller arası bağımlılık zinciri var: gereksinimi kapalı olan modül, kendi bayrağı
açık olsa bile etkin sayılmaz. Panelden kapatmaya çalışırsanız hangi modüllerin bağlı
olduğunu söyleyip engeller.

Teslimat sistemi - 3 MOD

Teslimat tipi modüle değil, pakete bağlıdır. Aynı sitede üç tip bir arada çalışır.

1) Manuel teslimat
Sipariş kuyruğa düşer, yöneticiye bildirim gider. Panelden İşleme Al / Tamamla /
İptal / dahili not.

2) API ile otomatik teslimat (SMM panelleri)
Bayi panellerinin neredeyse tamamı aynı sözleşmeyi kullanıyor (Perfect Panel şeması —
JustAnotherPanel, Peakerr vb.). Sistem bu sözleşmenin tamamını uyguluyor:
  • add — 10+ servis tipi (özel yorum, mention, hashtag, anket, abonelik, web trafiği) + dripfeed
  • status — tek sipariş durumu (charge, start_count, remains)
  • status&orderstoplu durum sorgusu, tek istekte 100 siparişe kadar (cron bunu kullanır)
  • refill / refill_status — düşen sayılar için telafi talebi
  • cancel — sipariş iptali
  • services — servis kataloğu senkronu
  • balance — bakiye + düşük bakiye bildirimi

Yeni panel eklemek için kod yazmanıza gerek yok. API adresi ve anahtarı girmek yeterli.
Panel farklılıkları ayardan yönetiliyor: sadece GET kabul edenler, anahtarı header'da
bekleyenler, toplu sorgu desteklemeyenler, farklı para birimi kullananlar.

Fallback zinciri: bir pakete birden fazla sağlayıcı tanımlayabilirsiniz. İlki hata
verirse sıradaki denenir, hepsi başarısızsa ayara göre manuel teslimata düşer.
Sipariş asla kaybolmaz.

Servis kataloğu ve eşleme ekranı: "Katalogu Senkronla" deyip sağlayıcının binlerce
servisini çekiyorsunuz; arama/filtre ile bulup paketinize eşliyorsunuz. Servis ID'si elle
yazılmıyor. Ad, ücret ve min/max sınırları katalogdan kopyalanıyor. Her satırda
telafi/iptal/dripfeed yetenek rozetleri var.

Kâr takibi: sağlayıcının döndürdüğü maliyet ile satış tutarından net kâr ve marj
otomatik hesaplanıyor, dashboard'da ciro/maliyet/net kâr olarak görünüyor.

3) Dijital kod / stoktan otomatik teslimat
  • Satır satır veya CSV/TXT ile kod yükleme, "KOD|ek bilgi" formatı
  • Tekilleştirme: aynı kod iki kez yüklenemez (benzersiz indeks)
  • Kodlar AES-256-GCM ile şifreli saklanır, listede maskeli görünür (TEST••••••1111)
  • Tam görüntüleme yetki ister ve kayıt altına alınır
  • Yarış durumu koruması: SELECT ... FOR UPDATE + tek transaction — iki müşteri son kodu alamaz
  • Stok bitince "Stok Tükendi", sepete ekleme sunucu tarafında reddedilir

Ödeme sistemi

Adaptör mimarisi controller sağlayıcıyı tanımaz, yeni sağlayıcı eklemek bir sınıf yazmaktır.

Havale/EFT Manuel bildirim Admin onayı
PayTR
iyzico
Stripe
PayPal

Ödeme zaman aşımı: tamamlanmayan siparişler otomatik iptal edilir ve stok/dijital kod
geri yüklenir
. Kart ve havale için ayrı süre tanımlı havale seçen müşterinin siparişi
o bankaya varmadan iptal olmasın diye (varsayılan kart 60 dk, havale 72 saat).
Ödemesi alınmış sipariş asla iptal edilmez.

İade: kısmi ve tam iade, sabit idempotency anahtarı ile ağ hatasından sonra tekrar
denenirse sağlayıcı ikinci kez para iade etmez.

Yönetim paneli

Yatay menü (kenar çubuğu yok): Kontrol Paneli · Katalog · Satış · Pazarlama · İçerik · Sistem.
Klavye ile gezilir, dar ekranda şerit yatay kayar.

Menü yetki ve modül durumuna göre üretilir — yetkisi olmayan veya modülü kapalı bölüm
hiç basılmaz. "Yakında" / "yok" yazan boş ekran bırakılmadı.

Ekranlar:
  • Katalog: Kategoriler, Paketler, Stok & Dijital Kodlar, Platformlar
  • Satış: Siparişler (detay/teslimat/iade), Müşteriler, Terk Edilmiş Sepetler
  • Pazarlama: Kampanyalar, Kuponlar (+ kullanım geçmişi)
  • İçerik: Ana Sayfa Blokları, Slider, Medya, Banner & SSS, Blog, Sayfalar, Menüler, Koleksiyonlar, Yorumlar, Destek Talepleri
  • Sistem: Modüller, Ödeme Yöntemleri, Entegrasyonlar (+ servis kataloğu), Ayarlar, Sipariş Durumları, Yönlendirmeler, Yöneticiler, Yedekleme, İşlem Kayıtları

Öne çıkanlar:

Terk Edilmiş Sepetler — sepete ürün ekleyip tamamlamayan ziyaretçiler. Eşik seçilebilir
(1 saat – 7 gün). Tutarlar sepette saklanan değerden değil güncel paket fiyatından
hesaplanır. Misafir sepetinin oturum jetonu sayfaya basılmaz.

Koleksiyonlar — kategori ağacından bağımsız, elle derlenmiş paket seçkileri
("Yeni Başlayanlar İçin" gibi). Kendi sayfası, ana sayfa bloğu ve sitemap kaydı var.

Medya kütüphanesi — uzantı beyaz listesi, gerçek MIME dosya içeriğinden okunur
(istemcinin bildirdiğine güvenilmez), dosya adı tamamen yeniden üretilir, hedef dizinde
PHP çalıştırma kapalı. SVG kabul edilmez (içine script gömülebilir).

Yedekleme — veritabanını SQL olarak indirir. mysqldump çağrılmaz (paylaşımlı hostingde
exec kapalı olabilir), dump PDO ile üretilir. Dosya sunucuda saklanmaz, doğrudan indirtilir.

Yöneticiler — 5 rol, 18 yetki anahtarı. Kilitlenmeye karşı korumalar: son süper yönetici
pasife alınamaz, yönetici kendi rolünü değiştiremez. Hesap silinmez, pasife alınır.

Müşteri tarafı
  • Üyelik: kayıt, giriş, parola sıfırlama (SHA-256 hash'li jeton, 60 dk, tek kullanımlık), hesabım, sipariş geçmişi
  • Kullanıcı numaralandırma engelli — var olmayan hesapta da sahte doğrulama yapılır, yanıt süresi eşitlenir
  • Destek sistemi: talep açma ve yanıtlarda görsel/PDF eki. Ekler web'den erişilemeyen dizinde; indirme jeton veya yetkili oturum ister
  • Yorumlar: onaya düşer, "doğrulanmış alışveriş" rozeti gerçekten sipariş kaydından hesaplanır
  • Favoriler ve Karşılaştırma
  • Sipariş sorgulama: numara + ikinci doğrulayıcı (IDOR koruması)
  • Sepet kalıcılığı: misafirde 30 günlük çerez, üyede hesaba bağlı. Girişte sepetler birleşir. Tutar sepete hiç yazılmaz, her okumada DB'den hesaplanır

3 satış modu: commerce (sepet+ödeme) · quote_only (teklif formu) · catalog_only (fiyatsız vitrin)

SEO ve Erişilebilirlik
  • Her sayfa tipinde title, description, canonical, Open Graph, Twitter Card
  • JSON-LD: Organization, WebSite, Product+Offer, BreadcrumbList, CollectionPage, BlogPosting, FAQPage
  • Puan verisi yalnız gerçek onaylı yorum varsa eklenir (sahte yıldız yok)
  • Sepet, ödeme, arama, üyelik, 404 → noindex
  • sitemap.xml yalnız aktif ve modülü açık içeriği listeler
  • 301 yönlendirme yönetimi — slug değişince eski adres SEO değerini korur
  • WCAG AA kontrast, skip link, klavye ile gezilebilir menüler, :focus-visible, prefers-reduced-motion
  • Frontend 13 sayfa × 15 genişlik, admin 13 ekran × 8 genişlik yatay taşma testinden geçti

Güvenlik
  • Tüm sorgular PDO prepared statement
  • CSRF her POST'ta zorunlu
  • Rate limit: giriş 6/5dk, sorgulama 10/5dk
  • Hesap kilidi: 5 hatalı girişte 15 dakika
  • Yetkilendirme rota seviyesinde — menü gizlemek yeterli sayılmadı
  • API anahtarı ve SMTP parolası AES-256-GCM ile şifreli
  • IP ham saklanmaz, tuzlanmış hash tutulur
  • Loglarda parola/anahtar maskelenir

Teknik
  • PHP 8.2+ / MySQL 5.7+ / MariaDB
  • Özel MVC — hazır framework ve Composer bağımlılığı yok
  • Bootstrap 5 + Vanilla JS (jQuery yok)
  • 58 tablo, 23 migration, 21 modül, 228 rota
  • Kök dizinde veya alt dizinde çalışır (RewriteBase gerekmez)
  • Bakım modu: ziyaretçiye 503 + Retry-After, yönetici siteyi normal görür
  • Cron betikleri: sağlayıcı senkronu, ödeme zaman aşımı, sepet temizliği (--dry-run destekli)

Dürüst notlar

  • Stripe ve PayPal canlı hesapla test edilmedi. Uç noktalar, imza algoritmaları ve tutar
    birimleri resmî dokümanlarla karşılaştırıldı ve imzayı gerçekten doğrulayan mock'larla sınandı;
    ancak gerçek 3DS ekranı görülmedi. Yayına almadan önce sandbox ile birer test ödeme yapılmalı.
    PayTR ve iyzico uçtan uca test edildi.
  • Nginx/LiteSpeed kullanıyorsanız hassas dizin korumaları .htaccess'e bağlı olduğu için
    sunucu bloğuna kural eklemek zorunlu README'de hazır konfigürasyon var.
  • Uygulama içinde otomatik yedekleme zamanlayıcısı yok; panelden manuel SQL indirme var.

1 Adet Ömür Boyu Lisans: 5.000 TL