Vulkaneifel Therme – Online-Shop mit Live-Buchungs-Anbindung
Custom-Shop auf Laravel 12 mit dualer Checkout-Strecke, eigener VRPay-Integration und direkter TCP-Anbindung an das Therme-Kassensystem.
Projekt-Info
- branche
- Wellness · Tourismus · Gastronomie
- leistung
- Shop-Entwicklung, API-Integration, Wartung
- technologie
- Laravel 12, Livewire 3, Filament v4
- status
- Live
Live-Shop ansehen
Worum es ging
Die Vulkaneifel Therme in Bad Bertrich – Deutschlands einzige Glaubersalz-Therme – verkauft online drei sehr unterschiedliche Produktarten:
- Termin-Reservierungen für Wellness- und Sauna-Slots
- Service-Gutscheine, etwa für Massagen
- Wertgutscheine, frei einlösbar
Standard-Shopsysteme decken das nicht ab. Vor allem die Termin-Reservierungen brauchen eine Live-Anbindung an das interne Therme-Kassensystem – inklusive Slot-Verfügbarkeitsprüfung und sofortigem Lock, damit niemand denselben Termin doppelt bucht. Dazu kommt eine eigene Payment-Integration über VRPay, die eingebaut sein musste.
Was wir gebaut haben
Wir haben einen vollständig individuellen Shop auf Laravel 12 entwickelt – kein Shopify, kein WooCommerce, kein Standard-Shop-Modul. Die Kombination aus drei Produktarten, Live-Slot-Buchung und eigenem Payment-Provider hat in keinem fertigen System sauber funktioniert.
Customer-Facing-Features
- Produktkatalog mit hierarchischen Kategorien, SEO-Slugs, Breadcrumbs
- Warenkorb mit Coupon-Engine (prozentual, Ablaufdatum, produktbezogen)
- Duale Checkout-Strecke: Voll-Registrierung oder Gast-Checkout, mit späterer Konvertierung zum Vollkonto – ohne Verlust der Bestellhistorie
- PDF-Generation für Gutscheine inklusive eingebetteter Barcodes, drei Jahre Gültigkeit
- Newsletter-Anbindung an CleverReach mit Double-Opt-In
Admin-Backend mit Filament v4
- Produkte, Kategorien, Bestellungen, Coupons, Kunden, Gäste
- Order-Export, manueller Produkt-Sync zum Kassensystem
- SEO-Settings und Voucher-Motiv-Settings als Custom Pages
Was technisch im Hintergrund passiert
VRPay-Integration über Saloon
Drei Zahlungsmethoden: Kreditkarte, PayPal, SEPA-Lastschrift, plus Vorkasse. Eigene Saloon-Integration statt fertigem Package, weil VRPay mit XML-API und drei separaten Entity-IDs arbeitet. Workflow: PostCheckoutPrepare → Redirect zur VRPay-Hosted-Page → Webhook-Callback → GetPaymentStatus → PaymentProcessed-Event.
TCP-Anbindung an das Therme-Kassensystem
Kein REST, kein SOAP – das Kassensystem spricht XML über rohe TCP-Sockets. Wir haben einen eigenen SocketClient gebaut, der den Stream via stream_socket_client öffnet, plus fünf dedizierte Action-Klassen: SyncProducts, SendOrder, FetchFreeDates, ReserveFreeDate, DeleteReservedDate. Alle Calls laufen asynchron über Laravel-Queue-Jobs.
Reservierungs-Lock zur Vermeidung von Doppelbuchungen
Beim Klick auf einen freien Slot wird sofort gegen das Kassensystem reserviert – server-seitig, mit Timeout. Verlässt der Kunde den Checkout-Prozess, läuft die Reservierung über einen Scheduled Cleanup automatisch wieder aus. Damit ist der Slot für andere Kunden nie länger blockiert als nötig.
Steuer- und Rabattlogik nach deutscher Buchhaltung
19 % MwSt., Brutto gespeichert, Rabatte rechnen auf Netto und kalkulieren die Steuer neu – mit eigenen Tests, weil in der Praxis viele Shops hier Fehler machen.
Stack
Status
Der Shop ist live unter shop.vulkaneifel-therme.de und verkauft täglich Reservierungen, Gutscheine und Wertgutscheine. Wartung und Erweiterung laufen weiter.
Ähnliches Vorhaben?
Wenn du einen Shop mit Schnittstellen, Custom-Logik oder eigener Payment-Integration brauchst – oder einen bestehenden Shop, der an seine Grenzen stößt: