Archiv des Autors: admin

Mai
26

Bezahlung ohne Bestellung

Bezahlung ohne Bestellung Typische Probleme beim Payment in Onlineshops.
Payment ist einer der wichtigsten Faktoren im E-Commerce – ohne Bezahlung kein Kauf und kein Umsatz. Auf dem Markt tummeln sich diverse größtenteils internationale Anbieter, über die man diverse Zahlarten wie Kreditkarte, Rechnungskauf, Paypal, Überweisungen, Ideal, Alipay und eine endlose Liste weiterer in einen Onlineshop integrieren kann.

FATCHIP hat im Laufe der letzten Jahre Payment-Lösungen in Onlineshops (z.B. OXID eShop, Magento, Shopware) und oft in weiterverarbeitende ERP Systeme u.a. für folgende Payment-Anbieter implementiert: Payone, Computop, Paypal, Amazon Pay, Klarna, Sofortüberweisung, Paynova, Barzahlen.de, Ratepay, Mollie, Paymorrow, Heidelpay.
Anbindungen von uns werden in über 500 Shops genutzt.

Bezahlung ohne Bestellung ist ein sehr lästiges Problem, welches immer wieder zu erhöhtem Aufkommen im Kundenservice, nicht gelieferten Bestellungen (mit entsprechend verärgerten Kunden) oder gar Ärger mit dem Finanzamt führt.

Das Szenario stellt sich dem Shopbetreiber so dar, dass es, wie der Titel schon sagt, dazu kommt, dass wir z.B. einen Kreditkarten-Zahlungseingang haben, aber keine oder nur eine unvollständige dazugehörige Bestellung im Shop- oder ERP-System.

Der Kundenservice muss aufwändig und manuell eine Bestellung anlegen, Rücksprache mit dem Kunden halten oder das Geld zurückerstatten.

Für dieses Fehlerbild ist die häufigste Ursache ein unvollständiger Redirect des Kunden  vom Zahlungsanbieter zurück in den Shop, sodass die Bestellung nach erfolgreicher Zahlung nicht korrekt angelegt oder finalisiert wird. 

Das kann passieren, wenn der Kunde beim Seitenaufruf die Netzverbindung verliert, wenn er mit dem Zug in einen Tunnel fährt, wenn der Shopaufruf fehlschlägt zum Beispiel durch einen in dem Moment überlasteten Webserver oder beispielsweise weil ein Browser Plugin Session-Daten oder Request-Parameter verändert. Oft ist die genaue Ursache nicht eindeutig zu ermitteln oder es ist nicht bei jedem Fehler die gleiche.

Transaktionssicherheit ist hier das Stichwort.

Ein Lösungsansatz, der dieses Problem ein für alle mal aus der Welt schafft, ist es wie folgt vorzugehen:

  1. Die komplette Bestellung mit allen Produkten, Preisen und Kundendaten muss bereits vor Durchführung des Zahlungsvorgangs im Shop (meistens in der Datenbank) gespeichert werden. Dabei muss sie aber als unvollständig markiert werden oder erst einmal in separaten Datenbank-Tabellen abgelegt werden, sodass keine weiteren Schritte, etwa die Übergabe an das ERP-System, erfolgen.
  2. Nach erfolgreicher Durchführung der Zahlung wird die bereits gesicherte Bestellung nur noch als abgeschlossen markiert und alle Folgeprozesse können stattfinden.
  3. Für den Fall, dass der Redirect in den Shop nicht korrekt funktioniert hat (oder auch der Kunde die Bestellung einfach durch Schließen des Browsers abgebrochen hat), verbleibt die Bestellung also unvollständig in der Datenbank.
  4. Nun entwickeln wir ein Cronjob-gesteuertes Script, welches regelmäßig an der API des Payment-Anbieters nach zu den unvollständigen Bestellungen gehörigen Zahlungen sucht. Findet das Script eine passende, vollständige Zahlung, wird die Bestellung als abgeschlossen markiert. Wird keine Zahlung zu der Order gefunden (Kunde hat abgebrochen), wird die Bestellung gelöscht. Dabei sollte ein Zeitraum von mindestens einer Stunde gewartet werden, bevor Bestellungen gelöscht werden.
Dez
08

Grundlegende Konsolenbefehle für die Arbeit als Webentwickler

konsoleObwohl man als Software-Entwickler sein Zeit zumeist im PHP- oder HTML-Code und in PHPStorm oder einer anderen IDE unterwegs ist, kommt man gelegentlich in die Verlegenheit, die Software localhost, auf einem Testserver oder sogar im Produktiv-System zum Laufen zu bekommen und ggf. zu Debuggen. Hierbei spart es häufig extrem viel Zeit, sich auf die Konsolen-Ebene zu begeben und mit ein paar grundlegenden Befehlen zu operieren.

Meine Konsolen-Empfehlungen:

Windows:

  • Console2 – super für lokale Arbeit
  • kiTTY – ein besserer Nachfolger von Putty, üblicherweise bei remote SSH Servern benutzt
  • Windows PowerShell – eigentlich ein furchtbares Tool, aber von den Befehlen her am nächsten an denen von Linux dran

Ubuntu:

  • LXTerminal
  • bash
  • xTerm-256color

Mac:

Befehle

Die Befehle funktionieren in der Regel auf allen Webservern oder in Docker Umgebungen mit Linux oder iOS Betriebssystem. In der Windows Eingabeaufforderung oder PowerShell sind die Befehle oft anders. Wo es mir bekannt war, habe ich einen Hinweis zum Windows-Equivalent ergänzt.

Die Befehle sind hier nur kurz beschrieben. Im Web finden sich zahlreiche Dokumentationen und Anwendungsbeispiele. Am besten sucht man nach „ssh [Befehl]“, um zielgerichtete Treffer zu finden. Zum Beispiel „ssh copy“. Oder man lässt sich direkt im Terminal die Hilfe zum jeweiligen Befehl ausgeben,, indem man „help“ hinter das Kommando schreibt. copy help.

cat

Gibt den Inhalt einer Variable oder Datei aus – sehr nützlich, wenn man sich mal eben kurz eine Datei ansehen möchte, ohne sie runterzuladen. cat index.php
Siehe auch tail.

copy

Kopiert eine Datei oder einen Ordner.

copy meinedatei.php meinedatei_backup.php legt eine Backup-Kopie der Datei an.

crontab

Mit crontab -e kann man üblicherweise auf Webservern die Cronjobs konfigurieren.

cd

Der change directory Befehl wechselt in ein anderes Verzeichnis. Dabei kann ich relativ in ein Unterverzeichnis des aktuellen Ordners gehen cd modules/fc/ oder absolut vom Hauptverzeichnis des Systems aus cd /var/www/htdocs/modules/fc/.
Mit cd .. navigiere ich eine Ebene höher.

df

Gibt eine Übersicht über die Festplattenauslastung des Systems aus.
Noch übersichtlicher wird es mit df -h

du

Mit dem Befehl kann man den Festplattenverbrauch im aktuellen Verzeichnis ausgeben. Die Parameter du -hs /var/www/html/out/pictures/ zeigen die Größe des Bilderordners übersichtlich an.

head

head google.csv zeigt die ersten Zeilen der Datei an.
Siehe auch tail.

ls

Listet alle Dateien im Verzeichnis auf, in dem man sich gerade befindet. Wird der Befehl ohne zusätzliche Parameter eingegeben, ist das ziemlich unübersichtlich.
ls -al ist prima, um eine ordentliche Ansicht zu bekommen.
(Windows Equivalent: dir )

mkdir

Der make-directory Befehl erzeugt ein Verzeichnis.
mkdir /var/www/htdocs/tmp erzeugt das Verzeichnis „tmp“.

mv

Mit dem move-Befehl kann man Dateien oder Ordner verschieben oder umbenennen.
mv oxideshop.log oxideshop_old.log benennt das Logfile um.
mv oxideshop.log archive/oxideshop.log verschiebt das Logfile in den Unterordner „archive“.

php

Ist PHP installiert, starte ich damit einen PHP-Prozess. Mit php exportscript.php z.B. kann ich einen Export starten.
Mit php -r 'echo date();' kann ich direkt ein PHP-Kommando ausführen.
Manchmal muss man den gesamten Pfad zum PHP-Binary mit angeben, z.B. /usr/local/php7.1/bin/php exportscript.php.

ps

Das ist zum Anzeigen der laufenden Prozesse auf dem Server da.
ps -aux gibt eine schöne Übersicht.
Darin kann man z.B. sehen, welche Cronjobs gerade laufen, und wie viele Ressourcen sie verbrauchen.

pwd

Oft verliert man die Orientierung, in welchem Verzeichnis man sich gerade befindet.
Der Befehl pwd gibt den aktuellen Verzeichnis-Pfad aus.

rm

Gegenstand vieler Nerd-Witze und mit den falschen Rechten äußerst gefährlich, da man mit einem Befehl den ganzen Server löschen kann. Sowohl aus Versehen, als auch mit Absicht. Der Befehl ist zum Löschen von Dateien da.
Mit rm oxideshop.log lösche ich das Logfile im aktuellen Verzeichnis.
Mit rm *.png lösche ich alle PNG Dateien im aktuellen Verzeichnis.
Mit rm -r /var/www/htdocs/ lösche ich rekursiv alle Dateien und Unterverzeichnisse des htdocs-Ordners – also auch mal einen ganzen Shop mit einem Befehl.
Mit dem zusätzlichen Parameter -f überspringe ich die nervigen „wollen Sie wirklich löschen“ Nachfragen.
(Windows Equivalent: erase)

strg + c

Eher eine Tasten-Kombination als ein Befehl. Jedenfalls kann man damit jeden Befehl, der gerade ausgeführt wird, abbrechen, wenns mal wieder länger dauert.
Zum Beispiel ein PHP-Script, welches man mit php meinscript.php gestartet hat.

top

top -c ist eine tolle Hilfe bei der Performance-Beobachtung eines Servers. Der Befehl erzeugt eine sich ständig aktualisierende Anzeige, wieviel RAM und CPU gerade verbraucht werden und welcher Prozess wieviel davon benötigt.
Beenden mit strg + c.

tail

Gibt den Schwanz bzw. das Ende einer Datei aus.
Zum Beispiel die letzten 10 Zeilen eines Logfiles mit tail -n10 oxideshop.log.
Mit tail -f oxideshop.log kann man Realtime zusehen, was gerade ins Logfile geschrieben wird.
Beenden mit strg + c.
tail ist das Gegenteil von head.

wget

Dieser Befehl wird genutzt, um eine URL aufzurufen und den Inhalt herunterzuladen. Beispielsweise geeignet zum Download größerer Dateien von einem anderen Server.
wget https://meinshop.de/export/Datenbankdump.sql

Eränzt gerne Befehle, die Ihr wichtig findet, in den Kommentaren!

Dez
13

Ausblick OXID eShop V6

oxid dev departmentLang erwartet hat die OXID eSales AG auf dem Partnertag am 24. November 2016 und in den darauf folgenden Publikationen einen Ausblick auf die kommende Version 6 des Shopsystems OXID eShop gegeben. Kurz darauf hat OXID eine closed Beta für Partner veröffentlicht, die ich bereits testen durfte.

Zielsetzung und Ausrichtung
Nachem OXID mit der Version 5.3 wichtige vom Markt geforderte Produktfeatures wie ein responsives Theme und ein mächtiges CMS System ergänzt hatte, ist die 6.0 eher als technisches Update zu verstehen. OXID will hiermit das in die Jahre gekommene Framework auf aktuelle Standards erneuern und die Basis für zukünftige Erweiterungen legen. Dabei war es die Zielsetzung der Entwickler, möglichst wenig unnötigen Framework-Ballast an Board zu holen, die Performance des Shopfrontends zu optimieren und größtmögliche Update-Kompatibilität zu früheren Shop-Installationen zu gewährleisten.

Technische Veränderungen

  • Zukünftig baut man OXID mit Composer, dem PHP-Dependency-Manager. Dadurch wird es möglich, Pakete wie z.B. Module, Plugins oder Themes, per Composer installer zu integrieren oder OXID eShop Updates per Composer Update zu ziehen. Ich habe den Composer Build der Enterprise Edition, der sich aus einem aufeinander aufbauenden Stack aus Community, Professionial und Enterpsie Repository zusammensetzt, schon mal getestet – funktioniert einwandfrei!
  • OXID führt PHP Namespaces ein – 2016 eine zeitgemäße Entscheidung, die das Arbeiten mit Bibliotheken und das Entwickeln von Erweiterungen vereinfacht.
  • Für Business- und Enterprise-Partner (wie FATCHIP) öffnet OXID seinen Quellcode vollständig, also auch in der Enterprise Version. Dazu gewährt OXID Zugriff auf die privaten Github Repositorys und gibt uns über die Möglichkeit, Pull Requests zu erstellen, die Option aktiv am Code mitzuwirken. Durch den quelloffenen Betrieb kann auf die Zend-Decodierungs-Komponenten auf dem Webserver verzichtet werden, was zahlreiche Probleme und Performancethemen aus der Welt schaffen kann, wenn sich eine juristisch saubere Lösung finden lässt, auch auf dem Produktivsystem bei einem Hoster mit der offenen Version zu arbeiten.
  • Die neue Version 6 soll PHP 7 kompatibel sein, schon alleine das gibt einen ordentlichen Performance – Schub.
  • Der hakelige WYSIWYG-Editor wysiwygPro wird durch Summernote ersetzt – wir sind gespannt.
  • ADOdb wird durch doctrine abgelöst.
  • Die Smarty-Bibliothek erhält endlich ein Update, ebenso die von PHP-Mailer. Dadurch dürften einige individuelle Hacks überflüssig werden.

Modul-Kompatibilität
Durch kleine Kniffe wie einen Rückwärts-Kompatibilitäts-Hook in der Modulvererbung zur „Simulation“ eines Namespaces für ältere Module, die noch keine Namespaces nutzen, verspricht OXID weitestgehende Modulkompatibilität zu OXID Plugins, die für die 5.3 geschrieben wurden. Dies ist als erheblicher Vorteil für Modulentwickler zu sehen, wobei ich natürlich damit rechne, dass aufgrund veränderter Logiken oder dem Austausch verschiedener Bibliotheken hier und da Anpassungen in überschaubarem Maße notwendig sein werden.

Was bedeutet 6.0 für OXID eShop – Betreiber
Die Version 6 ist in jedem Falle der richtige Schritt in Richtung Zukunft für OXID eShop Betreiber!
Die technischen Neuerungen schaffen hervorragende Voraussetzungen für einen langfristigen und nachhaltigen Betrieb der Software vor allem bei skalierenden Geschäftsmodellen.
Da die Version 6 noch nicht offiziel released ist, kann man sie leider derzeit noch nicht produktiv einsetzen, jedoch tut man sich sicher einen Gefallen, bereits auf die aktuellste 5.3 zu aktualisieren, da ein Update von dort auf 6.0 sehr einfach zu realisieren sein sollte. Bei diesem Schritt sollte man bereits darauf achten, keinerlei verschlüsselte Module mehr einzusetzen, um später flexibel im Bezug auf PHP Versionsupdates zu sein, welche dringend für eine gute Shop-Performance notwendig sind.

Nov
01

OXID Partnertag 2013

partnertag_200px_129.Okt. 2013: Die OXID eSales AG hat Ihre Partner aus den Bereichen „Solution“, „Hosting“ und „Plattform“ zum alljährlichen OXID Partnertag nach Freiburg / Breisgau in das zentral gelegene Konzerthaus eingeladen, um zum einen eine bewährte Tradition hinsichtlich der Partnerbindung / des Partneraustausches zu wahren und zum anderen das 10jährige Bestehen der Unternehmung zu feiern. Weit über 200 Teilnehmer folgten dem Aufruf, in die Stadt mit den meisten Sonnenstunden des Landes zu reisen, um den Vorträgen von OXID und den Partnern zu lauschen, Mitstreitern der Branche zu begegnen und neue Kontakte aufzubauen (Networking). Im Rahmen der Tischmesse im Foyer außerhalb der Vortragsräume hatten 24 Unternehmen das Angebot seitens OXID angenommen, Ihre Produkte und Dienstleitungen zu präsentieren.

Um den Partnern eine angenehme Anreise zu ermöglichen, wurde die Eröffnung von Markus Baars (Partnermanager) und Andrea Seeger (Vorstand) und die Keynote von Roland auf die Mittagszeit gelegt. Neben Einblicken in das nationale und internationale Versandhandelsgeschäft über das Internet wurde verstärkt auf den Bereich des B2B Handels, der Weiterentwicklung der Software OXID eShop für den Einsatz im Enterprise Bereich und der Dynamik des OXID Ökosystems eingegangen. Nach dieser Einleitung konnten die Besucher entscheiden, dem Business Track oder dem Technik Track zu folgen.

Business Track
Im Business Track wurden verstärkt Einblicke in die tägliche Arbeit mit den Kunden der OXID eSales AG gewährt und interne Projekt-, Prozess- und Vertriebsansätze vorgestellt und erläutert. Fokussiert betrachtet wurden ebenfalls neue und bestehende Partnerschaften und die daraus entstandenen Weiterentwicklungen für die OXID Lösung und den Erfolg im E-Commerce. Dass der Erfolg der OXID eSales AG maßgeblich von den Synergien zwischen den Partnern und OXID mitbestimmt wird, war klarer Tenor.

Technik Track
Um den individuellen Anforderungen der Enterprise Kunden hinsichtlich Skalierung, Schnittstellen und Funktionen gerecht zu werden, wurden im Technik Track die Neuentwicklungen zur Version 4.8 / 5.1 angesprochen und diskutiert. Um seitens der Partner eine Planungssicherheit zu gewährleisten, präsentierte OXID die Roadmap zur Software bis in das Jahr 2016.

Gutes noch besser machen – die Roadmap der OXID Plattform wurde anschließend und abschließend noch einmal in komprimierter Form im großen Saal vorgestellt und final zur Diskussion mit Roland Fesenmayr gebracht.

Der formelle und informelle Teil des OXID Partner Tages hat aufgrund des tiefen Informationsgehaltes große Zustimmung und Begeisterung erfahren. OXID hat die Hausaufgaben gemacht – die Partner sind informiert und motiviert. Ein weiteres Jahr/zenht mit OXID kann beginnen.

Als Abendveranstaltung hat sich die OXID eSales AG etwas ganz besonderes einfallen lassen. Im Konvoi mit Bussen und PKW ging es zum BIO Weingut Abril in das ca. 30 Kilometer entfernte Bischoffingen im Kaiserstuhl. Dort wurden alle Gäste mit traditionellen Speisen und Weinen begrüßt, bewirtet und beglückt. Der Hausherr ließ es sich auch nicht nehmen, zu präsentieren und ausführlich über „sein“ Thema zu philosophieren. Zum Schmunzeln waren alle angeregt, als dieser aussprach, noch nicht richtig und fest an den E-Commerce zu glauben aber erste Feldversuche gestartet hat. Wir wünschen alle viel Erfolg.

Vielen herzlichen Dank für diesen OXID Partnertag 2013.
Das FATCHIP Team.

Feb
25

Die 10 FATCHIP Gebote

hb_blog_10_gebote_bild_200pxJahrelange Leitung einer Software-Entwicklungs-Agentur haben mich geprägt und über die Vielzahl an Projekten haben sich ein paar Regeln herauskristallisiert, deren Befolgung allen Entwicklern und Mitarbeitern das Leben leichter machen. Ein paar dieser Regeln habe ich als „Die 10 FATCHIP Gebote“ zusammengefasst, um sie ein für alle Mal in den Köpfen unseres gesamten Teams zu manifestieren. Es sind grundlegende Prinzipien, deren bestechende Einfachheit nicht über ihre Wichtigkeit täuschen soll und die durchaus für andere anwendbar sind…

Das erste Gebot
Du bist FATCHIP.
Identifiziere Dich mit Deiner Arbeit, und sie wird besser sein. Wir sind ein Team, und jedes Mitglied ist verantwortlich für die Teamleistung.

Das zweite Gebot
Du sollst FTP nicht nutzen.
FTP ist nicht verschlüsselt, leicht zu hacken und immer Zeichen eines unversionierten Deployment Prozesses. Damit ist die Arbeit fehleranfällig und unsicher.

Das dritte Gebot
Du sollst SVN nutzen.
Jede Entwicklung muss sauber versioniert werden. Unsere auf SVN basierenden Deployment Tools stellen einen konsistenten Versionsstand und kurze Deployzeiten sicher.

Das vierte Gebot
Liebe das Wiki wie Dich selbst.
Wenn Du es nicht weißt, schau ins Wiki. Wenn Du es weißt, schreib es ins Wiki. Wenn was falsches im Wiki steht, korrigiere es.

Das fünfte Gebot
Du sollst täglich Stundenzettel schreiben.
Eine Arbeit ohne Zeiterfassung ist nichts wert.

Das sechste Gebot
Du sollst Dich vor Viren und Trojanern schützen.
Wir arbeiten nach den Richtlinien des BSI (Bundesamt für Sicherheit in der Informationstechnik). Sicherheit basiert darauf, dass jedes Glied in der Datenkette gesichert ist – auch Dein Rechner.

Das siebte Gebot
Du sollst Deinen Brüdern und Schwestern helfen.
Wir sind ein Team und können nur gut sein, wenn wir uns gegenseitig helfen und voneinander lernen.

Das achte Gebot
Ein Modul ist ein Modul ist ein Modul.
Genauso wie gilt, dass Core Klassen sauber mit Modulen überladen werden, werden auch keine Dateien von offiziellen Modulen „gehackt“. Diese können ebenfalls modular überladen werden, um die Updatefähigkeit zu erhalten. Eine Erweiterung für eines unserer Module sollte immer als konfigurierbare Option in den Modulstandard einfliessen, und nicht nur für den Kunden geforkt werden.

Das neunte Gebot
Du sollst Deine Arbeit von einem Kollegen testen lassen.
Das 4 Augen Prinzip ist unser wichtigstes Instrument im Qualitätsmanagement. Der Test durch eine zweite Person stellt sicher, dass keine Fehler in Betriebsblindheit übersehen werden.

Das zehnte Gebot
Kommentiere Deinen Code, Deine Commits, Deine Tickets und alles, was Dein ist.
Rede über das, was Du getan hast, sei Stolz darauf und schreibe es in einen Kommentar, damit andere auch von Deinen Leistungen begeistert sein können. Nenne Ticket- und Revisionsnummern in Deinen Kommentaren, um den Zusammenhang herzustellen.