Recht: Online-Widerruf ohne Login (gesetzlicher Widerrufsbutton) - Backend

POST /widerruf (host-agnostisch, throttled, Honeypot, eigener
withdrawal-Error-Bag): persistiert nur Zuordnungsdaten (Name, E-Mail,
optionale Bestellnummer - KEIN Grund, darf nicht verlangt werden) und
versendet sofort die gesetzlich vorgeschriebene automatische
Eingangsbestaetigung mit Zeitstempel an den Verbraucher plus eine
interne Benachrichtigung an die Brand-Kontaktadresse des Hosts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-03 10:03:37 +00:00
parent 47d03ec777
commit 8c0bf00604
9 changed files with 429 additions and 0 deletions

View file

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Eingangsbestätigung Ihres Widerrufs</title>
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; }
.meta { background: #f8fafc; border-left: 4px solid #2563eb; padding: 12px 16px; margin: 16px 0; }
.meta dt { font-weight: bold; color: #111; }
.meta dd { margin: 0 0 8px; }
.note { font-size: 13px; color: #666; border-top: 1px solid #eee; padding-top: 12px; margin-top: 24px; }
</style>
</head>
<body>
<p>Guten Tag {{ $withdrawalRequest->name }},</p>
<p>
hiermit bestätigen wir den Eingang Ihres Widerrufs. Ihre Erklärung ist bei uns
am <strong>{{ $withdrawalRequest->created_at->format('d.m.Y') }}
um {{ $withdrawalRequest->created_at->format('H:i') }} Uhr</strong> eingegangen.
</p>
<dl class="meta">
<dt>Name</dt>
<dd>{{ $withdrawalRequest->name }}</dd>
<dt>E-Mail</dt>
<dd>{{ $withdrawalRequest->email }}</dd>
@if ($withdrawalRequest->order_reference)
<dt>Bestell-/Rechnungsnummer</dt>
<dd>{{ $withdrawalRequest->order_reference }}</dd>
@endif
<dt>Vorgangsnummer</dt>
<dd>W-{{ $withdrawalRequest->id }}</dd>
</dl>
<p>
Wir ordnen Ihren Widerruf dem zugehörigen Vertrag zu und melden uns
schnellstmöglich mit den weiteren Schritten (z.&nbsp;B. zur Rückabwicklung) bei Ihnen.
</p>
<p class="note">
Diese Bestätigung wurde automatisch erstellt und dokumentiert den Zeitpunkt
des Eingangs Ihrer Widerrufserklärung. Bitte bewahren Sie sie auf.
</p>
</body>
</html>

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Neuer Online-Widerruf</title>
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; }
.meta { background: #fef2f2; border-left: 4px solid #dc2626; padding: 12px 16px; margin: 16px 0; }
.meta dt { font-weight: bold; color: #111; }
.meta dd { margin: 0 0 8px; }
.note { font-size: 13px; color: #666; border-top: 1px solid #eee; padding-top: 12px; margin-top: 24px; }
</style>
</head>
<body>
<p>Über den Widerrufsbutton auf <strong>{{ $withdrawalRequest->host }}</strong> ist ein neuer Widerruf eingegangen:</p>
<dl class="meta">
<dt>Vorgangsnummer</dt>
<dd>W-{{ $withdrawalRequest->id }}</dd>
<dt>Name</dt>
<dd>{{ $withdrawalRequest->name }}</dd>
<dt>E-Mail</dt>
<dd><a href="mailto:{{ $withdrawalRequest->email }}">{{ $withdrawalRequest->email }}</a></dd>
<dt>Bestell-/Rechnungsnummer</dt>
<dd>{{ $withdrawalRequest->order_reference ?: '— nicht angegeben —' }}</dd>
<dt>Eingegangen</dt>
<dd>{{ $withdrawalRequest->created_at->format('d.m.Y H:i') }} Uhr</dd>
</dl>
<p class="note">
Die Eingangsbestätigung an den Verbraucher wurde automatisch versendet.
Bitte den Vorgang dem Vertrag zuordnen und die Rückabwicklung anstoßen
(gesetzliche Frist beachten).
</p>
</body>
</html>