WDR / NPDG Buchungstool

Jobnummer initial: FRS_1500_IP_004 Neuerstellung Online-Buchung und Buchungs-Apps Syltfaehre WDR

GitLab extern (deployment): https://gitlab.com/hochzwei/booking.git

Zugriff auf gitlab.com über den Nutzer typo3@hoch2.de 

Entwicklungsstandard / Best Practice

  • K.I.S.S - Keep it simple and smart
  • Feature Entwicklung in eigenen Branches
  • Für jeden Commit ein Ticket im GitLab
  • Commits zu Tickets referenzieren
  • Keine/wenig Logik in Actions/Controllern

Lokale host Datei Einträge

192.168.150.10	bk-loc-frs.booking.app
192.168.150.10	bk-loc-wdr.booking.app
192.168.150.10	bk-loc-npdg.booking.app
192.168.150.10	bk-loc-frs-app.booking.app
192.168.150.10	bk-loc-wdr-app.booking.app
192.168.150.10	bk-loc-npdg-app.booking.app

Interne Redirects über Session

NameBeschreibungWert
registration.redirectRedirect nach erfolgreicher Benutzer-RegistrierungName der Route (z.B. "home" für die home-Route)
login.redirectRedirect nach erfolgreicher Benutzer-AnmeldungName der Route (z.B. "home" für die home-Route)

GET Parameter

Booking

NameBeschreibungWert(e)Route
routePfad der Route die der iFrame aufrufen sollbookingbooking
withVehicleBestimmt, ob die Buchung eines Fahrzeuges per default aktiv ist oder nicht0,1booking
allowWithVehicleSelectionBestimmt, ob die Auswahl mit/ohne Fahrzeug angezeigt wird0,1booking
newBookingWenn gesetzt, so wird eine neue Buchung initialisiert. Es werden alle Sessionvariablen resetet0,1booking
personOnlyBookingWenn gesetzt, so werden die Felder für das Fahrzeug + das Rückfahrdatum aus- stattdessen ein Texthinweis eingeblendet0,1booking
bookingTypeSetzt den Tickettyp (Einfache Fahrt/Hin- und Rückfahrt)ONE,RETbooking
bookingFromAbfahrtshafenKey des Hafensbooking
bookingToZielhafenKey des Hafensbooking
bookingDepartureDateDatum der HinfahrtTT.MM.JJJJbooking
bookingDepartureVoyageNumberVoyage Number der Abfahrt booking
bookingReturnDateDatum der RückfahrtTT.MM.JJJJbooking
openReturnOffene Rückfahrt0,1booking
backHrouteRoute für Zurück-Button / nach dem Speichernz.B. bookingaddVehicle

Grundsätzlich lassen sich alle Formularfelder in allen Views per GET-Parameter vorbelegen. Der Key muss dafür nur so heißen wie der Name des Formfields.


Timetable/result

NameBeschreibungWert(e)Route
dportAbfahrtshafenKey des Hafenstimetable/result
rportZielhafenKey des Hafenstimetable/result
dateDatum der ReiseDD.MM.YYYYtimetable/result
routePfad der Route die der iFrame aufrufen sollPfad der Routetimetable/result

Beispiel für den Aufruf des Fahrplans anhand von GET-Parametern:
Lokal: http://bk-dev-wdr.h2lokal.de/de/timetable/result?dport=F%C3%96HR&rport=AMRUM&date=25.05.2016
Im iFrame: http://www.faehre.de/h2-buchung2016.php?route=timetable/result&dport=DAGEB%C3%9CLL&rport=F%C3%96HR&date=20.05.2016

Konfiguration Unternehmen

  • Config-Datei in /config Ordner mit Subdomain als Postfix (z.B. für frs.domain.tld -> booking-frs.php)
  • Optional ein Stylesheet in /resources/assets/sass mit der Subdomain als Name (z.B. frs.scss)
  • Optional neuen SASS Tasks in gulpfile.js
  • Optional Stylesheet in Config-Datei eintragen

API Caches (V1)

RequestLifetimeBeschreibung
mainData30 Minuten 
ClientResponse10080 Minuten (7 Tage) 
timeTable5 MinutenGilt nur für "datum-von-nach"

Sessions

Die Session Lifetime ist in der Session-Konfiguration auf 525600 Minuten (1 Jahr) festgelegt.

Environment Variablen

Sensitive Daten wie z.B. Benutzerdaten müssen immer in der .env Datei gespeichert werden. Diese darf nicht ins GIT eingechekt werden. Damit pro Kunden unterschiedliche API Zugangsdaten gespeichert werden können, muss jeweils pro Kunde eine eigene Benutzername/Passwort Variable erstellt werden.

KeyValuesBeschreibung
LOGLEVEL_API100 - 600Loglevel für die API laut klasse \Monolog\Logger
LOGLEVEL_PAYMENT100 - 600Loglevel für Payments laut klasse \Monolog\Logger
LOGLEVEL_LARAVEL100 - 600Loglevel für Laravel laut klasse \Monolog\Logger
LOGSETTING_LARAVELAvailable Settings: "single", "daily", "syslog", "errorlog"Wie sollen die Log gespeichert werden.
SESSION_PREFIXz.B. "hoch2-"Ein String, welcher vor die Session ID bei API Request gestellt wird
SAFERPAY_JSONAPI_USERNAME_WDR Benutzername der Saferpay JSON API für W.D.R.
SAFERPAY_JSONAPI_PASSWORD_WDR Benutzername der Saferpay JSON API für W.D.R
SAFERPAY_JSONAPI_USERNAME_FRS Benutzername der Saferpay JSON API für FRS
SAFERPAY_JSONAPI_PASSWORD_FRS Benutzername der Saferpay JSON API für FRS
SAFERPAY_JSONAPI_USERNAME_NPDG Benutzername der Saferpay JSON API für NPDG
SAFERPAY_JSONAPI_PASSWORD_NPDG Benutzername der Saferpay JSON API für NPDG

Die Logs befinden sich in: var/www/booking/productuion/booking/shared/storage/logs

AJAX Routen schützen

Über unsere ajax Middleware müssen alle AJAX Routen geschützt werden.

Anwendung (Middleware-Teil):

Route::post('/timetable/routeTo', ['as'=>'timetableTo', 'middleware' => 'ajax', 'uses' => 'TimetableController@routeTo']);

Testuser WDR

BenutzernameZahlungsartFahrzeugeWeiteres
testuser1@hoch2.deRechnung1 
testuser2@hoch2.deBarzahlung5 
testuser3@hoch2.de 1Insulanertarif
testuser4@hoch2.de 2Insulanertarif für ein Fahrzeug
testuser5@hoch2.de   
testuser6@hoch2.de  Fährabo Nr. 105651, für Kennzeichen FLH211, auf der Route Dagebüll – Föhr

Hinweis: Wichtig bei Fahrzeugen mit dem Insulaner-Tarif: Diesen Tarif gibt es nur bei Fahrten von den Inseln zum Festland.

Passwort: hoch2@wdr

Payment Testdaten

Test Kontonummer (von der Commerzbank): DE89 3704 0044 0532 0130 00

Saferpay: https://www.six-payment-services.com/de/site/saferpay-support/testaccount/Saferpay_Testdaten.html

Kunden APIs

Ansprechpartner:

Herr Borus (0461 864-53)

Deployment

Das Depoyment wird komplett über deployer gesteuert. In der Datei deployer.php Ordner befindet sich die komplette Konfiguration.

Beispiel Deployment auf "maxcluster-staging"

./deployer deploy maxcluster-staging

Nach dem Deployment auf den jeweiligen Server immer folgende Befehle ausführen im Projektverzeichnis

php artisan clear-compiled
php artisan optimize
php artisan config:cache

Zum deployen von Änderungen in das Live- oder Stagingsystem wird wie folgt vorgegangen:

Grundsätzlich ist es wichtig, dass der eigene SSH Key auf dem Zielserver hinterlegt ist. Dafür nutzt man den Terminal Befehl ssh-copy-id. Danach muss in der lokalen SSH config Datei auf dem Rechner der entsprechende Pfad zum Key und Nutzername eingetragen werden. Bei Maxcluster können die SSH Keys auch über das Webhosting Backend hinterlegt werden

  • Deployment ins Stagingsystem
  1. Pushen der gemachten Änderungen in den Branch "Staging"
  2. Per SSH auf die Vagrant Box PHPStorm: Tools -> Start SSH Session -> Vagrant at...
  3. In das Verzeichnis "Code" wechseln cd Code
  4. Mit diesem Befehl das Deployment starten: ./deployer deploy maxcluster-staging
  5. Nachdem der Vorgang abgeschlossen wurde, sind die Änderungen unter qs.iframe.faehre.de und qs.app.faehre.de sichtbar
  • Deployment ins Live-/Produktivsystem
  1. Pushen der gemachten Änderungen in den Branch "Staging"
  2. Auschecken des lokalen Branches "Master"
  3. Mergen des Stagingbranches in den Master:
  4. Pushen der Änderungen in den Master
  5. Per SSH auf die Vagrant Box PHPStorm: Tools -> Start SSH Session -> Vagrant at...
  6. In das Verzeichnis "Code" wechseln cd Code
  7. Mit diesem Befehl das Deployment starten: ./deployer deploy maxcluster-production
  8. Nachdem der Vorgang abgeschlossen wurde sind die Änderungen unter app.faehre.de, sowie iframe.faehre.de, in den Android und iOS Apps sowie unter http://www.faehre.de/buchen/buchung sichtbar

Besondere Seiten:

Die folgenden Urls werden genutzt, um eine Test-Version zeigen zu können, ohne dass dieser Stand in den Staging-Branch kommt. So wird der normal laufende Betrieb (Bugfixes, kleinere Ändeurngen) nicht gestört, es kann aber eine größere Neuerung getestet werden. Folgende Urls sind dafür eingerichtet:

NPDG:

http://qs-app-npdg.h2local.de/de/booking

http://qs-iframe-npdg.h2local.de/de/booking

http://qs-mobile-npdg.h2local.de/de/booking

 

WDR:

http://qs-app-wdr.h2local.de/de/booking

http://qs-iframe-wdr.h2local.de/de/booking

http://qs-mobile-wdr.h2local.de/de/booking

Unit Tests

  • PHP Interpreter auf remote einstellen, sodass die PHP Version von Laravel auf Homestead benutzt wird
  • PHPUnit in den Einstellungen wie folgt einstellen

Maintenance

Um die komplette Applikation in den Maintenence Modus zu versetzen, einfach artisan down eingeben. Mit artisan up bekommt man die Applikation wieder hoch.

Webserver

Die Buchung wird bei dem Anbeiter Maxcluster gehostet. Dies ist ein Managed Server. Login unter https://app.maxcluster.de/

FAQ

Wenn ein CURL Request mit "CURL ERROR 7 Failed to connect to Permission denied" antwortet, dann ist SELINUX häufig die Ursache hierfür (z.B. wenn ein nicht Standard-Port verwendet wird).

Lösung

setsebool -P httpd_can_network_connect on

Lokale Entwicklungsumgebung aufsetzen

Host Einträge setzen

192.168.150.10	bk-loc-frs.booking.app
192.168.150.10	bk-loc-wdr.booking.app
192.168.150.10	bk-loc-npdg.booking.app
192.168.150.10	bk-loc-frs-app.booking.app
192.168.150.10	bk-loc-wdr-app.booking.app
192.168.150.10	bk-loc-wdr-mobile.booking.app
192.168.150.10	bk-loc-npdg-app.booking.app
192.168.150.10	bk-loc-npdg-mobile.booking.app

VM Software instellieren

Manual: https://laravel.com/docs/5.6/homestead#installation-and-setup

Vagrant: https://www.vagrantup.com/downloads.html
Virtual Box: https://www.virtualbox.org/wiki/Downloads

Homestead.yaml Konfiguration

---
ip: "192.168.150.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/PHPStormProjects/booking #todo: Lokaler, relativer Pfad zum ausgecheckten Repo
      to: /home/vagrant/Code

sites:
    - map: frs.booking.app
      to: /home/vagrant/Code/public

    - map: wdr.booking.app
      to: /home/vagrant/Code/public

databases:
    - homestead

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

 

Tags