gruene-seele/PAYMENT_REMINDER_CRON.md
2025-08-12 15:51:04 +02:00

5.3 KiB

Payment Reminder Cron-Job Einrichtung

Übersicht

Der PaymentsReminders Command automatisiert das Senden von Zahlungserinnerungen basierend auf den konfigurierten Intervallen in der Datenbank.

Command ausführen

php artisan payments:reminders

Cron-Job Konfiguration

1. Crontab öffnen

crontab -e

2. Cron-Job hinzufügen

Täglich um 9:00 Uhr:

0 9 * * * cd /path/to/your/project && php artisan payments:reminders >> /dev/null 2>&1

Stündlich:

0 * * * * cd /path/to/your/project && php artisan payments:reminders >> /dev/null 2>&1

Alle 6 Stunden:

0 */6 * * * cd /path/to/your/project && php artisan payments:reminders >> /dev/null 2>&1

3. Cron-Job testen

# Teste den Command manuell
php artisan payments:reminders

# Prüfe die Logs
tail -f storage/logs/laravel.log

Funktionsweise

1. Intervall-basierte Verarbeitung

  • Der Command holt alle aktiven PaymentReminder aus der Datenbank
  • Gruppiert sie nach clearingtype (z.B. 'invoice', 'prepayment')
  • Verwendet das kleinste Intervall pro clearingtype

2. Zahlungsprüfung

  • Sucht offene Zahlungen, die älter als das konfigurierte Intervall sind
  • Berücksichtigt nur die neueste Zahlung pro Bestellung
  • Prüft nur Live-Zahlungen (nicht Test)

3. Erinnerungslogik

  • Erste Erinnerung: Nach X Tagen ab Bestelldatum
  • Weitere Erinnerungen: Nach Y Tagen ab letzter Erinnerung
  • Stoppt wenn alle konfigurierten Erinnerungen gesendet wurden

4. Automatische Aktionen

  • E-Mail-Versand mit Platzhalter-Ersetzung
  • Optional: Bestellung auf "Storniert" setzen
  • Optional: Payment auf "non" Status setzen
  • Logging aller Aktivitäten

Logging

Command-Logs

# Live-Logs während der Ausführung
php artisan payments:reminders

# Beispiel-Output:
RUN Command Payments Reminders: 15.12.2024 09:00
=== STARTE PAYMENT REMINDERS ===
Gefundene aktive PaymentReminder: 3
Gefundene clearingtypes mit kleinsten Intervallen:
  - invoice: 7 Tage
  - prepayment: 3 Tage
--- Verarbeite clearingtype: invoice mit Intervall: 7 Tage ---
Suche Zahlungen vor: 08.12.2024 09:00:00
Gefundene offene Zahlungen für invoice: 5
  Verarbeite Order ID: 12345, Created: 05.12.2024 10:30:00, Amount: 5000, Reminder: 0
    📧 Sende Erinnerung...
    ✅ Erinnerung erfolgreich gesendet
=== PAYMENT REMINDERS ABGESCHLOSSEN ===
Ausführungszeit: 2.34 Sekunden
Statistiken:
  - Gesamt verarbeitet: 5
  - Erinnerungen gesendet: 3
  - Fehler: 0
  - Übersprungen: 2

Laravel-Logs

# Logs in storage/logs/laravel.log
tail -f storage/logs/laravel.log | grep "Payment reminder"

Konfiguration

PaymentReminder Einstellungen

-- Beispiel-Konfiguration
INSERT INTO payment_reminders (clearingtype, interval, subject, message, action, active) VALUES
('invoice', 7, 'Zahlungserinnerung - Bestellung {order_number}', 'Sehr geehrte/r {billing_first_name}...', NULL, 1),
('invoice', 14, '2. Zahlungserinnerung - Bestellung {order_number}', 'Sehr geehrte/r {billing_first_name}...', NULL, 1),
('invoice', 21, 'Letzte Zahlungserinnerung - Bestellung {order_number}', 'Sehr geehrte/r {billing_first_name}...', 'set_order_status_cancelled', 1);

Platzhalter

  • {billing_first_name} - Vorname
  • {billing_last_name} - Nachname
  • {order_number} - Bestellnummer
  • {order_date} - Bestelldatum
  • {order_total} - Bestellsumme

Monitoring

1. Log-Statistiken

  • Admin-Bereich: /admin/payments/reminder/logs
  • Zeigt Statistiken der letzten 7, 30 und 90 Tage
  • Filter nach Order ID, Aktion und Datum

2. Erfolgsrate

  • E-Mails gesendet vs. Fehler
  • Aktionen ausgeführt
  • Übersprungene Erinnerungen

3. Performance

  • Ausführungszeit pro Lauf
  • Anzahl verarbeiteter Zahlungen
  • Speicherverbrauch

Troubleshooting

Häufige Probleme

1. Command läuft nicht

# Prüfe PHP-Pfad
which php

# Prüfe Projekt-Pfad
pwd

# Teste Command manuell
php artisan payments:reminders

2. Keine E-Mails werden gesendet

# Prüfe Mail-Konfiguration
php artisan config:cache

# Prüfe Logs
tail -f storage/logs/laravel.log

3. Falsche Intervalle

# Prüfe PaymentReminder-Konfiguration
php artisan tinker
>>> App\Models\PaymentReminder::where('active', true)->get()

4. Cron-Job läuft nicht

# Prüfe Crontab
crontab -l

# Prüfe Cron-Logs
sudo tail -f /var/log/cron

# Teste mit absoluten Pfaden
0 9 * * * /usr/bin/php /path/to/project/artisan payments:reminders

Sicherheit

1. Berechtigungen

# Stelle sicher, dass der Webserver-Benutzer Schreibrechte hat
chown -R www-data:www-data storage/logs
chmod -R 755 storage/logs

2. Log-Rotation

# Konfiguriere Log-Rotation in /etc/logrotate.d/laravel
/path/to/project/storage/logs/*.log {
    daily
    missingok
    rotate 52
    compress
    notifempty
    create 644 www-data www-data
}

3. Backup

# Backup der PaymentReminder-Konfiguration
mysqldump -u username -p database payment_reminders > payment_reminders_backup.sql

Performance-Optimierung

1. Batch-Verarbeitung

  • Der Command verarbeitet Zahlungen in Batches
  • Verwendet Datenbank-Indizes für bessere Performance

2. Memory-Management

  • Garbage Collection nach jeder Zahlung
  • Begrenzte Anzahl von Logs

3. Timeout-Handling

  • Lange Ausführungen werden abgebrochen
  • Fehler werden geloggt und übersprungen