Automatische Verbuchung von PayPal-Zahlungen per Mail-Weiterleitung

Mandanten leiten ihre PayPal-Benachrichtigungsmails an ein zentrales
IMAP-Postfach weiter. Die Zuordnung zum Mandanten erfolgt ueber
Plus-Adressierung (zahlungen+<token>@...), der Token wird pro Mandant
erzeugt und im Backend angezeigt.

- Parser fuer PayPal-Eingangsmails, tolerant gegenueber falsch kodierten
  Waehrungssymbolen und HTML-Struktur weitergeleiteter Mails
- Gutgeschrieben wird der Nettobetrag, also was tatsaechlich ankam
  (bei Waren & Dienstleistungen nach Abzug der PayPal-Gebuehr)
- Deduplizierung ueber den Transaktionscode, damit doppelt weitergeleitete
  Mails nicht doppelt buchen
- Eindeutiger Namens-Match bucht automatisch, alles andere landet in einer
  Warteschlange zur manuellen Zuordnung
- Absenderpruefung gegen paypal.de/.com, da weitergeleitete Mails keine
  gueltige SPF/DKIM-Signatur mehr haben
- IMAP-Zugang ausschliesslich ueber Server-/Env-Einstellungen, nicht pro
  Mandant konfigurierbar

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 18:33:49 +02:00
co-authored by Claude Opus 4.8
parent c16b105f00
commit ea7d9a4714
7 changed files with 868 additions and 0 deletions
+16
View File
@@ -41,6 +41,22 @@ putenv('STRIPE_WEBHOOK_SECRET=');
putenv('DOLIBARR_URL=https://verwaltung.ctb-it.de');
putenv('DOLIBARR_API_KEY=');
// Automatische Verbuchung weitergeleiteter PayPal-Zahlungsmails.
// PAYPAL_INBOX_BASE ist die zentrale Sammeladresse; jeder Mandant bekommt
// daraus per Plus-Adressierung eine eigene Variante (zahlungen+<token>@...),
// die im Backend unter "PayPal-Zahlungen" angezeigt wird. Das Postfach muss
// Plus-Adressierung an dieselbe Mailbox zustellen (Catch-All).
// Die Zugangsdaten sind bewusst Server-/Betreiber-Einstellungen und NICHT
// pro Mandant konfigurierbar. Abruf per Cron:
// php scripts/fetch-paypal-payments.php
putenv('PAYPAL_INBOX_BASE=zahlungen@kaffeeliste.de');
putenv('PAYPAL_IMAP_HOST=');
putenv('PAYPAL_IMAP_PORT=993');
putenv('PAYPAL_IMAP_FLAGS=/imap/ssl');
putenv('PAYPAL_IMAP_USER=');
putenv('PAYPAL_IMAP_PASS=');
putenv('PAYPAL_IMAP_MAILBOX=INBOX');
// WICHTIG: DEV_AUTH_EMAIL hier NICHT setzen (auch nicht auskommentiert
// stehen lassen und aus Versehen aktivieren). Ist diese Variable gesetzt,
// wird JEDER Besucher ohne echten Login automatisch als dieser Nutzer