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.vulkaneifeltherme.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: