müminbiri
- 13 Ağu 2025
- 1,331 Mesaj
- TIM Görevleri
- 1
Aktiflik
Seviye
Deneyim
Öne Çıkan Özellikler
- Kayıt, giriş, e-posta doğrulama ve şifre sıfırlama
- Kullanıcı profili düzenleme ve şifre değiştirme
- Eşleştirme kodu ile Android cihaz bağlama
- Birden fazla cihaz yönetimi, düzenleme, duraklatma ve silme
- Rehber, grup, toplu içe aktarma ve boş şablon indirme
- Tekli, gruplu ve tüm rehbere SMS gönderimi
- Zamanlama, hız limiti ve cihaz seçimi destekli SMS kuyruğu
- SMS durum raporları ve Excel dışa aktarma
- Kullanıcı API anahtarı üretme ve harici sistem entegrasyonu
- Kullanıcılar için PayTR ile online paket satın alma, uzatma ve yükseltme
- Kullanıcılar için Havale/EFT ödeme talebi ve WhatsApp üzerinden dekont iletimi
- Admin panelinden APK yükleme ve kullanıcılar için APK indirme sayfası
- Kullanıcı sözleşmesi kabulü, kabul tarihi, IP adresi ve tarayıcı bilgisi loglama
- Android tarafında foreground service, polling, heartbeat, boot sonrası yeniden başlatma ve pil optimizasyonu uyarısı
Sistem Gereksinimleri
- PHP ≥ 8.1 (PDO MySQL, mbstring, openssl, fileinfo extension'ları)
- MySQL ≥ 5.7 / MariaDB ≥ 10.3
- Apache veya Nginx (mod_rewrite / rewrite desteği) — paylaşımlı hostingde .htaccess kullanılır
- HTTPS (PayTR callback ve güvenli oturum için zorunlu)
- Yazılabilir storage/ klasörü (log, rate-limit, APK upload)
YAPILANDIRMA VE SCRİPT İÇERİK
Öne Çıkan Özellikler
- public/: Web giriş noktası ve statik dosyalar
- app/: Controller, model, core sınıflar ve view dosyaları
- database/schema.sql: Temiz kurulum için MySQL şeması
- database/migrate_2026_04_08_user_agreements.sql: Mevcut kurulumlar için kullanıcı sözleşmesi kabul kayıt tablosu
- database/migrate_2026_04_08_paytr_payments.sql: Mevcut kurulumlar için PayTR ödeme tabloları ve ayarları
- database/migrate_2026_04_08_whatsapp_bank_transfer.sql: Mevcut kurulumlar için Havale/EFT WhatsApp ayarı
- docs/api.md: Harici entegrasyon API dokümantasyonu
- android-app/: Kotlin tabanlı Android istemci uygulaması
Öne Çıkan Özellikler
- Kayıt, giriş, e-posta doğrulama ve şifre sıfırlama
- Kullanıcı profili düzenleme ve şifre değiştirme
- Eşleştirme kodu ile Android cihaz bağlama
- Birden fazla cihaz yönetimi, düzenleme, duraklatma ve silme
- Rehber, grup, toplu içe aktarma ve boş şablon indirme
- Tekli, gruplu ve tüm rehbere SMS gönderimi
- Zamanlama, hız limiti ve cihaz seçimi destekli SMS kuyruğu
- SMS durum raporları ve Excel dışa aktarma
- Kullanıcı API anahtarı üretme ve harici sistem entegrasyonu
- Kullanıcılar için PayTR ile online paket satın alma, uzatma ve yükseltme
- Kullanıcılar için Havale/EFT ödeme talebi ve WhatsApp üzerinden dekont iletimi
- Admin panelinden APK yükleme ve kullanıcılar için APK indirme sayfası
- Kullanıcı sözleşmesi kabulü, kabul tarihi, IP adresi ve tarayıcı bilgisi loglama
- Android tarafında foreground service, polling, heartbeat, boot sonrası yeniden başlatma ve pil optimizasyonu uyarısı
Sistem Gereksinimleri
- PHP ≥ 8.1 (PDO MySQL, mbstring, openssl, fileinfo extension'ları)
- MySQL ≥ 5.7 / MariaDB ≥ 10.3
- Apache veya Nginx (mod_rewrite / rewrite desteği) — paylaşımlı hostingde .htaccess kullanılır
- HTTPS (PayTR callback ve güvenli oturum için zorunlu)
- Yazılabilir storage/ klasörü (log, rate-limit, APK upload)
Kurulum
1. Veritabanı Hazırlığı
- Hosting panelinizden veya phpMyAdmin üzerinden boş bir veritabanı ve yetkili bir kullanıcı oluşturun.
- İlgili veritabanını phpMyAdmin içinde seçin.
- Temiz kurulum yapıyorsanız database/schema.sql dosyasını içe aktarın (tüm tablolar + seed verisi içerir).
- Mevcut kurulumu güncelliyorsanızsırasıyla migrasyon dosyalarını çalıştırın:
- database/migrate_2026_04_08_contact_address.sql
- database/migrate_2026_04_08_user_agreements.sql
- database/migrate_2026_04_08_plan_limits.sql
- database/migrate_2026_04_08_paytr_payments.sql
- database/migrate_2026_04_08_whatsapp_bank_transfer.sql
2. Dosya Yükleme ve İzinler
- Proje dosyalarını sunucuya yükleyin (paylaşımlı hosting: public_html/sms/ altına).
- storage/ klasörünü ve alt klasörlerini (logs, rate_limits, uploads) yazılabilir yapın (chmod -R 775 storage).
- index.php, .htaccess ve .env dosyalarının gerçekten sunucuda olduğundan emin olun.
3. Ortam Yapılandırması
- .env dosyasındaki veritabanı ve uygulama ayarlarını kendi ortamınıza göre güncelleyin.
Örnek .env:
Kod:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://akcsoft.com/sms
APP_NAME=SMS Portal
APP_TIMEZONE=Europe/Istanbul
[email protected]
MAIL_FROM_NAME=SMS Portal
SMTP_ENABLED=false
SMTP_HOST=
SMTP_PORT=587
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_ENCRYPTION=tls
[email protected]
SMTP_FROM_NAME=SMS Portal
PAYTR_ENABLED=false
PAYTR_MERCHANT_ID=
PAYTR_MERCHANT_KEY=
PAYTR_MERCHANT_SALT=
PAYTR_TEST_MODE=true
PAYTR_DEBUG_ON=false
DB_HOST=localhost
DB_PORT=3306
DB_NAME=akcsoftc_sms
DB_USER=akcsoftc_sms
DB_PASS=akcsoftc_sms
RATE_LIMIT_PER_MINUTE=120
DEVICE_RATE_LIMIT_PER_MINUTE=1200
DEVICE_TASK_BATCH_LIMIT=20
Yerelde PHP geliştirme sunucusu açmak için:
Paylaşımlı hosting kullanıyorsanız:
- Proje dosyalarını doğrudan public_html/sms/ altına yükleyin
- index.php, .htaccess ve .env dosyalarının gerçekten sunucuda olduğundan emin olun
- storage/ klasörünün yazılabilir olması gerekir
Varsayılan Yönetici Hesabı
- E-posta: [email protected]
- Parola: Admin123!
Web Sayfaları
- Landing (SEO one-page): /
- Kullanıcı paneli: /dashboard
- Rehber: /contacts
- Cihazlar: /devices
- SMS: /sms
- Abonelik ve ödeme: /billing
- API dokümantasyonu: /api-docs
- APK indirme: /apk
- Kullanıcı sözleşmesi: /kullanici-sozlesmesi
- robots dosyası: /robots.txt
- sitemap dosyası: /sitemap.xml
PayTR Kurulumu
- Yönetici panelinden Yönetim -> PayTR Ayarları sayfasına gidin.
- Merchant ID, Merchant Key ve Merchant Salt bilgilerinizi girin.
- Test aşamasında Test modu açık, canlıya geçerken kapalı olmalıdır.
- PayTR panelinde bildirim URL'si olarak şu adresi tanımlayın: https://your-domain.example/sms/payment/paytr/callback
- Kullanıcılar paket satın alma, uzatma ve yükseltme işlemlerini /billing sayfasından yapar.
Havale/EFT + WhatsApp Kurulumu
- Yönetici panelinde Yönetim -> Ayarlar ekranından Havale/EFT WhatsApp alanını doldurun.
- Numara uluslararası formatta girilmelidir (örnek: +90 555 123 45 67).
- Kullanıcılar /billing sayfasındaki paket kartlarından Havale/EFT için WhatsApp butonuna tıklayarak ödeme talebi oluşturabilir.
Harici Entegrasyon API
- POST /auth/login
- GET /me
- GET /user/devices
- GET /user/groups
- POST /user/groups
- GET /user/contacts
- POST /user/contacts
- POST /user/sms/send
- GET /user/sms/history
Android cihaz endpointleri:
- POST /devices/register
- POST /devices/heartbeat
- GET /devices/tasks
- POST /devices/tasks/{id}/result
Detaylı örnekler için:
- Panel içi sayfa: /api-docs
- Dosya: docs/api.md
Android Uygulaması
- android-app/ klasörünü Android Studio ile açın.
- Sunucu URL bilgisini kendi API adresinize göre ayarlayın.
- Emülatör için örnek adres: http://10.0.2.2:8000/api/v1
- Fiziksel cihazda aynı ağdaki sunucu IP adresini veya canlı domaininizi kullanın.
- Uygulama açıldığında cihaz kaydı yapılır ve eşleştirme kodu üretilir.
- Kullanıcı panelinden bu kod ile cihaz hesabınıza bağlanır.
Arka plan dayanıklılığı için uygulama:
- Foreground service ile çalışır
- Cihaz yeniden başlatıldığında servisi tekrar açar
- Uygulama güncellendiğinde servisi tekrar başlatır
- Görev listesinden kapatılınca servis yeniden planlanır
- Pil optimizasyonu muafiyeti ister
Hız optimizasyonu:
- API tarafında cihaz görev batch limiti .env ile ayarlanır: DEVICE_TASK_BATCH_LIMIT=20
- Android varsayılan polling aralığı 10 saniye, batch limiti 20 olarak güncellendi
- Cihaz endpointleri için ayrı rate limit kullanılır: DEVICE_RATE_LIMIT_PER_MINUTE=1200
- Teorik cihaz kapasitesi formülü: (60 / poll_saniye) x batch_limit
Not: Android derlemesi bu ortamda Gradle yerel kütüphane hatası nedeniyle yeniden doğrulanamadı. Kod tarafındaki değişiklikler hazırdır.
Güvenlik
- Web formlarında CSRF koruması
- API isteklerinde Bearer token doğrulaması
- PDO prepared statement ile SQL injection riskinin azaltılması
- View katmanında htmlspecialchars tabanlı çıktı kaçışı
- Dosya tabanlı rate limiting
- Kullanıcı sözleşmesi kabul kaydı: sürüm, tarih, IP adresi, user agent
Sık Karşılaşılan Hosting Notları
- #1044 Access denied hatası alırsanız, CREATE DATABASE yetkiniz yoktur; sadece schema.sql dosyasını mevcut veritabanının içine import edin.
- cPanel benzeri sistemlerde veritabanı adı çoğunlukla kullaniciadi_veritabani formatındadır.
- /sms altında 404 alıyorsanız dosyalar yanlış klasöre yüklenmiş olabilir veya .htaccess eksik olabilir.



