🔍 Ödeme-Abonelik Sistem Analizi

Payment → Cart → Subscription veri akışı ve hata tespiti

⚠️ Bildirilen Sorun

✅ Payment Sayfası:

TAHA CELEP - 4.800 ₺ - PAY-20260116172554-2318F0

Ödeme kaydı var ve görünüyor

✅ Cart Sayfası:

TAHA - burcu@ketenciinsaat.com.tr - 0.00 TRY

Cart kaydı var ve kullanıcı görünüyor (sepet boş)

❌ Subscription Sayfası:

İsim hiç yok - Liste boş

Kullanıcının abonelik kaydı görünmüyor

⚠️ Ek Sorun:

Subscription sayfasında sıralama karışık (isim, soyisim, mail)

📊 Normal Sistem Akışı

1

Kullanıcı sepete ürün ekler

Cart tablosunda kayıt oluşur (customer_id ile User'a bağlı)

Modules/Cart/App/Models/Cart.php
2

Checkout - Sipariş oluşturulur

Order tablosunda kayıt oluşur (status: pending, payment_status: pending)

Modules/Cart/App/Models/Order.php
3

Ödeme başlatılır

Payment tablosunda kayıt oluşur (payable_type: Order, status: pending)

Modules/Payment/App/Models/Payment.php
4

PayTR Callback - Ödeme tamamlanır

Payment status: completed → Order.onPaymentCompleted() çağrılır

Order.php:413 - onPaymentCompleted()
5

Abonelik aktivasyonu

Order.activateSubscriptionItems() → Subscription oluşur

Order.php:174-325 - activateSubscriptionItems()

🔴 Tespit Edilen Sorunlar

Sorun 1: Subscription kaydı oluşmamış olabilir

Olası Nedenler:

  • Order.onPaymentCompleted() metodu çağrılmamış (PayTR callback hatası)
  • activateSubscriptionItems() metodu hata vermiş (log'a yazılmış olmalı)
  • Order item'ın orderable_type değeri yanlış (SubscriptionPlan olmalı)
  • Cycle metadata eksik (metadata['cycle_key'] yoksa hata oluşabilir)

Kontrol edilecek log satırları:

🔵 Order::onPaymentCompleted START
🔵 activateSubscriptionItems START
✅ Yeni subscription zincire eklendi

Sorun 2: Subscription var ama filtrede görünmüyor

Olası Nedenler:

  • Subscription status = pending_payment (varsayılan filtre: active)
  • Subscription status = pending (zincirde sırada, henüz aktif değil)
  • SubscriptionComponent filterStatus = 'active' varsayılan olarak geliyor

Dosya:

SubscriptionComponent.php:22
public $filterStatus = 'active';

Sorun 3: Sıralama ve görüntüleme sorunları

Tespit Edilen Eksikler:

  • Subscription: Varsayılan sıralama subscription_id (kullanıcı adına göre değil)
  • Payment: Kullanıcı adı/email gösterilmiyor (sadece payment bilgisi)
  • Cart: Sıralama mevcut ama customer.name'e göre ekstra sıralama yok

🔧 Teknik Detaylar (Geliştiriciler İçin)

PaymentsComponent

Dosya: Modules/Payment/App/Http/Livewire/Admin/PaymentsComponent.php

Sorun: Payment listesinde kullanıcı bilgisi gösterilmiyor

Line 272-286: render() metodu

with(['paymentMethod'])

❌ Eksik: payable.user ilişkisi yüklenmiyor

CartComponent

Dosya: Modules/Cart/App/Http/Livewire/Admin/CartComponent.php

Durum: Customer ilişkisi yükleniyor, isim gösteriliyor ✅

Line 236-254: render() metodu

with(['items', 'currency', 'customer'])
orderByRaw('CASE WHEN customer_id IS NOT NULL THEN 0 ELSE 1 END')

SubscriptionComponent

Dosya: Modules/Subscription/App/Http/Livewire/Admin/SubscriptionComponent.php

Sorun: Varsayılan filtre 'active', sıralama subscription_id

Line 22: Varsayılan filtre

public $filterStatus = 'active';

Line 160: Sıralama

orderBy($this->sortField, $this->sortDirection)

❌ Varsayılan: subscription_id DESC (kullanıcı adına göre değil)

Order Model - activateSubscriptionItems()

Dosya: Modules/Cart/App/Models/Order.php:174-325

Bu metot ödeme tamamlandığında subscription oluşturur

Kontrol noktaları:

  • Line 194: orderable_type kontrolü (SubscriptionPlan olmalı)
  • Line 215: cycle_key metadata'dan alınıyor
  • Line 227-231: pending_payment subscription kontrolü
  • Line 234-235: Son subscription bitiş tarihi (zincir mantığı)
  • Line 242: Status belirleme (active/pending)
  • Line 272-296: Yeni subscription oluşturma

✅ Çözüm Önerileri ve Eylem Planı

Adım 1: Veri Kontrolü (Tanı)

1.1. Payment kaydını kontrol et

Payment::where('payment_number', 'PAY-20260116172554-2318F0')->first()

✓ Status, payable_type, payable_id kontrol et

1.2. Order kaydını kontrol et

Order::where('order_number', 'ORD2026011622E266')->first()

✓ Status, payment_status, user_id kontrol et

1.3. Subscription kaydını kontrol et

Subscription::where('user_id', {user_id})->get()

✓ Kayıt var mı? Status ne? metadata içinde order_id var mı?

1.4. Log kayıtlarını kontrol et

storage/logs/laravel-{tarih}.log

✓ "activateSubscriptionItems" ara, hata var mı?

Adım 2: Subscription Oluşturulmamışsa (Manuel Düzeltme)

Order kaydı var ama subscription oluşmamışsa:

Manuel aktivasyon:

$order = Order::find({order_id}); $order->markAsPaid($payment->amount);

↳ Bu metot activateSubscriptionItems() çağırır

Adım 3: Subscription Varsa (Filtre Değiştir)

Subscription var ama görünmüyorsa:

  • Admin panelde "Tüm Durumlar" filtresini seç (filterStatus boş bırak)
  • Veya "Pending Payment" filtresini seç
  • Eğer status = pending_payment ise → Ödeme onayını bekliyor demektir
  • Manuel onay: Subscription edit sayfasından status'u "active" yap

Adım 4: Kod İyileştirmeleri (Kalıcı Çözüm)

4.1. PaymentsComponent - Kullanıcı bilgisi ekle

Dosya: PaymentsComponent.php:272

- ->with(['paymentMethod'])
+ ->with(['paymentMethod', 'payable.user'])

4.2. SubscriptionComponent - Varsayılan filtreyi değiştir

Dosya: SubscriptionComponent.php:22

- public $filterStatus = 'active';
+ public $filterStatus = ''; // Tümünü göster

4.3. SubscriptionComponent - Sıralama seçenekleri ekle

View'da dropdown ekle:

- Kullanıcı Adı (A-Z)
- Email (A-Z)
- Tarih (Yeni-Eski)

📋 Özet

Günlük Dil ile Ne Oldu?

  • ✅ TAHA CELEP ödeme yaptı (4.800 ₺)
  • ✅ Ödeme sisteme kaydedildi
  • ✅ Sipariş oluşturuldu
  • ⚠️ Fakat abonelik kaydı ya oluşmadı ya da filtrede gizlendi
  • 📊 Subscription sayfası sadece "aktif" abonelikleri gösteriyor (varsayılan)
  • 🔧 Tüm kayıtları görmek için filtreyi değiştirmek gerekiyor

Neden Önemli?

  • 💰 Müşteri ödedi ama aboneliği başlamadı → gelir kaybı
  • 😠 Müşteri memnuniyetsizliği → destek yükü
  • 🔍 Admin panelde görünmemesi → takip zorluğu
  • ⚙️ Otomatik aktivasyon çalışmıyorsa → teknik sorun var
  • 📈 Varsayılan filtre çok dar → diğer sorunlar da gözden kaçabilir