Rechtskonforme SEPA-Lastschrift für Magento mit Mandat-Verwaltung und SEPA-XML-Export (ISO 20022)

Seit heute steht die neue Version 2.0 der SEPA-Lastschrift-Erweiterung für Magento zur Verfügung:

Die neue Version erfüllt alle rechtlichen Vorschriften, die vom Gesetzgeber gefordert werden. Diese Anforderungen haben wir weiter unten für Sie zusammengefasst. Für die neue Version der Erweiterung stellen wir eine ausführliche Dokumentation und eine neue Live-Demo bereit.

Vielen Dank an alle Kunden und Bankmitarbeiter, die uns Verbesserungsvorschläge und rechtliche Hinweise zugeschickt haben und uns so bei der Verbesserung der SEPA-Lastschrift für Magento unterstützt haben!

Zusammenfassung der neuen Regeln für SEPA-Lastschrift

Im Zuge der Einführung der neuen SEPA-Lastschrift und der Abschaffung der nationalen Lastschrift-Verfahren, wie beispielsweise der deutschen Lastschrift, hat es Regeländerungen gegeben. Diese Regeländerungen sollten seitens des Online-Händlers unbedingt beachtet werden, da dieser sonst Gefahr läuft Lastschriften nicht regelkonform einzuziehen und damit die Frist für die Rückholung des Lastschriftbetrages seitens des Kunden zu verlängern.

Die nachfolgend aufgeführten Änderungen sind mit der Einführung der SEPA-Lastschrift in Kraft getreten. Die neue Version unserer SEPA-Lastschrift-Erweiterung für Magento unterstützt und automatisiert diese neuen Regelungen:

  • IBAN und BIC Angabe
    Die Erweiterung prüft die eingegebene IBAN und BIC auf Fehler und zeigt diese an. Die Fehlerquote bei der Eingabe des langen IBAN-Codes wird dadurch minimiert. Für bestimmte Länder kann BIC als optionale Eingabe eingestellt werden.
  • Verwaltung von SEPA-Lastschriftmandaten
    Zusätzlich zum Versenden des erteilten SEPA-Lastschriftmandats per Email werden alle Daten des Mandates und das Dokument in der Shop-Datenbank gespeichert. Registrierte Shop-Kunden können Lastschriftmandate für wiederkehrende Zahlung erteilen und sie bei nächster Bestellung nutzen ohne die Bankverbindung erneut einzugeben. Das Mandat verfällt automatisch 36 Monate nach Nichtnutzung.
  • Rechtskonforme Vorlagen für SEPA-Lastschriftmandate
    Mit der Erweiterung sind sorgfältig recherchierte Vorlagen nach Vorgaben des European Payment Council (EPC) und der Deutschen Kreditwirtschaft (DK) in deutscher und englischer Sprachen enthalten: SEPA-Lastschriftmandat für einmalige und wiederkehrende Zahlung und Vorabinformation. Auf den vom Schuldner abweichenden Kontoinhaber wird gesondern hingewiesen.
  • Vorabinformation (Pre-Notification)
    Die Erweiterung bietet die Möglichkeit den Hinweis auf Verkürzung der Frist für Vorabinformation im Checkout anzuzeigen und die Vorabinformation in der Bestellbestätigung anzuzeigen.
  • Automatischer SEPA-XML-Export nach ISO 20022
    Neben dem manuellen Export im Backend ist automatischer Export von Zahlungen im standardisierten SEPA-XML-Format möglich.

SEPA-Lastschrift für Magento auf Magento Connect
Wir laden Sie ein, die neuen Funktionen in unserer Live-Demo auszuprobieren!

Veröffentlicht unter Empfehlungen | 1 Kommentar

WSDLSOAP-ERROR: Parsing WSDL: Couldn’t load from … : failed to load external entity …

Fehlerbeschreibung

$client = new SoapClient('http://beispiel.de/index.php/api/v2_soap/?wsdl');
$sessionId = $client->login('benutzer', 'geheim');

Beim Versuch eine API-Verbindung mit Magento herzustellen, wird von SoapClient der folgende Fehler gemeldet:

WSDLSOAP-ERROR: Parsing WSDL: Couldn't load from ... : failed to load external entity ...

Mögliche Ursache

Der Server kann seinen eigenen Namen nicht auflösen. Als Bestätigung dieser Ursache, kann der Apache-Server neu gestartet werden:

/etc/init.d/apache2 restart

Wird beim (erfolgreichen) Start von Apache die nachfolgende Warnung ausgegeben, liegt die o. g. Ursache vor:

Could not reliably determine the server's fully qualified domain name

Lösung

An Stelle der Domain kann in der API-URL die IP des Servers verwendet werden:

$client = new SoapClient('http://123.45.67.89/index.php/api/v2_soap/?wsdl');
$sessionId = $client->login('benutzer', 'geheim');

Die bessere und sauberere Lösung wäre der Eintrag der Domain in der hosts-Datei auf dem Server (die Datei befindet sich unter /etc/hosts):

123.45.67.89      beispiel.de

Anschließend sollte Apache neu gestartet werden.

Weiterlesen:

Veröffentlicht unter Fehlerbehebung | Verschlagwortet mit , , | Hinterlasse einen Kommentar

SoapClient: looks like we got no XML document

Fehlerbeschreibung

Beim Versuch sich über Magento-API einzuloggen, wird folgender Fehler gemeldet:

SoapClient: looks like we got no XML document

Fehleranalyse

Die Fehlermeldung ist viel zu allgemein. Deshalb sollte die Serverantwort genauer analysiert werden, die angeblich kein (gültiges) XML-Dokument ist. Um die empfangenen Daten analyseren zu können, wird die Abfragemethode von SoapClient überschrieben:

class SoapClientDebug extends \SoapClient{

    public function __doRequest($request, $location, $action, $version = SOAP_1_1, $one_way = 0){

        $xml = explode("\r\n", parent::__doRequest($request, $location, $action, $version, $one_way = 0));

        print_r($xml);
        print '<br/><br/>'.str_repeat('#', 100).'<br/><br/>';

        if(isset($xml[5])) return $xml[5];
        return '';
    }

}

Die API-Kommunikation läuft nun über die überschriebene Klasse:

// $client = new SoapClient('http://beispiel.de/index.php/api/v2_soap/?wsdl');
$client = new SoapClientDebug('http://beispiel.de/index.php/api/v2_soap/?wsdl');

Mögliche Ursachen und Lösungen

In unserem Fall hat der Server in mehreren Fällen tatsächlich kein XML-Dokument empfangen. Die Antwort war entweder eine Fehermeldung vom Varnish-Cache-Server, oder eine Weiterleitung aufgrund einer Regel in der .htaccess. Im ersten Fall konnte der Fehler durch Abschaltung des Varnish weiter analysiert werden. Im zweiten Fall wurde die Regel in der .htaccess verbessert.

Veröffentlicht unter Fehlerbehebung | Verschlagwortet mit , , | Hinterlasse einen Kommentar

WSDLSOAP-ERROR: Parsing Schema: can’t import schema from ‘http://schemas.xmlsoap.org/soap/encoding/’

Fehlerbeschreibung

Beim Verbindungsaufbau mit Magento-API wird der nachfolgende Fehler gemeldet:

WSDLSOAP-ERROR: Parsing Schema: can't import schema from 'http://schemas.xmlsoap.org/soap/encoding/'

Mögliche Ursache

Der Aufruf der o. g. URL findet serverseitig statt. Vergewissern Sie sich, dass der Server die URL zugreifen kann:

wget http://schemas.xmlsoap.org/soap/encoding/

Wenn die Datei auf dem Server nicht heruntergeladen werden konnte, ist sie für den Server tatsächlich nicht erreichbar. Ausnahmsweise sagt die Fehlereldung tatsächlich etwas aus, was direkt mit der Ursache zu tun hat.

Lösung

Je nach Situation kann es verschiedene Lösungsansätze geben, warum der Server die URL nicht erreichen kann. In unserem Fallbeispiel lag es an einer Firewall-Einstellung.

Veröffentlicht unter Fehlerbehebung | Verschlagwortet mit , , | Hinterlasse einen Kommentar

CMS-Inhalte mit jQuery in eine statische Seite einfügen, CMS-Seite ohne html und body ausgeben

Bei einer stark besuchten Seite sollte eine Cache-Lösung wie Varnish eingesetzt werden. Der Nachteil einer gecachten Seite ist, dass ein Update eines Inhaltsblocks (z.B. einer Ankündigung oder einer Werbaktion), der auf allen Unterseiten angezeigt werden soll, durch den Cache nicht sofort möglich wäre.

Ohne der Erneuerung der gecachten Seiten kann der Inhalt des Blocks über jQuery geladen und in die gecachte Seite eingefügt werden. So entfällt das Cache-Warming, und der neue Inhalt ist sofort auf allen Seiten zu sehen.

Auch der dynamische Inhalt kann über eine CMS-Seite in Magento verwaltet werden. Um ihn über jQuery in die vorhandene Seitenstruktur sauber und effizient einfügen zu können, sollten die Inhalte der CMS-Seite in Roh-Form ausgegeben werden.

Roh-Ausgabe von CMS-Inhalten

Mit dem Layout “Empty” und durch Entfernen des head-Blocks mit dem folgenden XML-Layout-Update können CMS-Inhalte unformatiert ausgegeben werden:

<remove name="head" />

Wenn wir die Quellecode-Ausgabe dieser CMS-Seite im Frontend ansehen, stellen wir fest, dass der Inhalt in ein nicht ganz leeres Layout eingebettet wird:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    </head>
<body class="page-empty cms-page-view cms-hello">
    <div>
        <div class="std"><p>Hallo Welt</p></div></div>
</body>
</html>

Dies hängt damit zusammen, dass für diese Ausgabe die Vorlage unter app/design/frontend/base/default/template/page/empty.phtml verwendet wird, die in der Tat nicht leer ist:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->getLang() ?>" lang="<?php echo $this->getLang() ?>">
<head>
    <?php echo $this->getChildHtml('head') ?>
</head>
<body>
    <div>
        <?php echo $this->getChildHtml('after_body_start') ?>
        <?php echo $this->getChildHtml('global_messages') ?>
        <?php echo $this->getChildHtml('content') ?>
        <?php echo $this->getChildHtml('before_body_end') ?>
        <?php echo $this->getAbsoluteFooter() ?>
    </div>
</body>
</html>

Für die dynamische Einbindung der CMS-Inhalte per jQuery in eine gecachte Seite, sollten die CMS-Inhalte in ihrem Ursprungszustand ausgegeben werden, d. h. ohne html- und body-Tag. Dies ist mit dem eigenem wirklich leeren Template möglich:

In unserem Template-Verzeichnis (z. B. app/design/frontend/default/default/template/page) legen wir die Datei really-empty.phtml mit folgendem Inhalt an:

<?php echo $this->getChildHtml('content') ?>

In das Feld XML für Layoutänderungen tragen wir folgenden XML-Code ein:

<remove name="head" />

<reference name="root">
    <action method="setTemplate">
       <template>page/really-empty.phtml</template>
    </action>
</reference>

CMS-Inhalte mit jQuery einfügen

Nun bekommen wir tatsächlich nur <p>Hallo Welt</p> ausgegeben und könnten diese Inhalte dynamisch in eine statische Seite einfügen:

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$.noConflict();
jQuery(document).ready(function() {
    jQuery('#dynamic-content').load('/magento1702sd/hello');
});
</script>
</head>
<body>

<div id="dynamic-content"></div>

</body>
</html>

Weiterlesen:

Veröffentlicht unter Tipps und Tricks, Tutorials | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Automatische Warnung vor Verwendung geschützter Wortmarken

Hin und wieder bekommen unsere Kunden und auch wir bei unseren eigenen Projekten Abmahnungen wegen Verwendung geschützter Wortmarken. Manchmal sind geschützte Worte so alltäglich, dass der Shopbetreiber nicht mal vermuten würde, dass das Wort geschützt ist.

Wussten Sie z. B. dass der Satz “Berlin gefällt mir” (s. DPMA-Eintrag) eine geschützte Wortmarke ist? Wenn Sie Ihre Liebe zur Hauptstadt so beispielsweise auf einem T-Shirt zum Ausdruck bringen und es zum Verkauf anbieten, werden Sie ziemlich schnell Post von den Anwälten des Markeninhabers bekommen und es wird richtig teuer. Es gibt überraschend viele Beispiele für Wortmarken dieser Art!

Eine Dienstleistung, die sämtliche Texte des Online-Shops (Produkt-Attribute, CMS-Seiten und statische Blöcke) auf gesicherte Wortmarken prüft und den Betreiber vorwarnt, haben wir nicht gefunden! Entsprechende Filter für Nizza-Klassen, die zum Thema des Shops passen, sollen die Wortmarken thematisch eingrenzen und so die Zahl irrelevanter Warnungen reduzieren.

Welche Marken bereits existieren, können Sie manuell über die DPMA-Einsteigerrecherche herausfinden:

Internationale Recherche ist u. a. mit WIPO möglich.

Veröffentlicht unter Marktlücke | Hinterlasse einen Kommentar

XAMPP/Apache startet nicht, Skype blockiert Port 80

Fehlerbeschreibung

XAMPP/Apache unter Windows startet nicht. Es wird die folgende Fehlermeldung angezeigt:

Error: Apache shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper privileges, a crash, or a shutdown by another method.
Check the "/xampp/apache/logs/error.log" file
and the Windows Event Viewer for more clues

Mögliche Ursache

Apache wurde bereits gestartet. In diesem Fall ist der Prodzess httpd.exe im Taskmanager auffindbar und kann darüber beendet werden.

Wenn Apache nicht läuft, wird Port 80 möglicherweise von Skype blockiert.

Mögliche Lösung

Im Skype-Menü unter Aktionen > Optionen > Erweitert > Verbindung deaktivieren Sie die Option Ports 80 und 443 für zusätzliche eingehende Verbindungen verwenden und starten Sie Skype neu.

Um Skype neu zu starten, muss Skype beendet werden (es reicht nicht Skype zu schließen). Klicken dazu mit der rechten Maustaste auf Skype in der Taskleiste und dann auf Beenden. Unter Windows 7 sieht das Kontextmenü wie folgt aus:

Weiterlesen:

Veröffentlicht unter Fehlerbehebung | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

Magento über das Meta-Modul Mage_All_Latest updaten

Wann haben Sie Magento das letzte Mal über den Download-Manager geupdatet?

Eine tägliche Beschäftigung ist das nicht und so wird gerne vergessen, dass beim Update des gesamten Systems über den Download-Manager nicht jedes einzelne Modul in seiner neuesten Version manuell ausgewählt werden muss, sondern nur das Meta-Paket Mage_All_Latest:

Nach dem Update von Mage_All_Latest werden alle Magento-Core-Module auf die neueste Version geupdatet.

 

Veröffentlicht unter Tipps und Tricks | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Magento-SOAP-Anfragen loggen und debuggen

Bei der Arbeit mit der Magento-API bietet Magento von sich aus keine Debugging-Möglichkeiten. Wer herausfinden will, wie die XML-Anfrage ausschaut, die an Magento gesendet wurde, dem hilft die Erweiterung Inchoo_SoapLogger (GitHub) weiter!

Nach dem Kopieren der Erweiterung in das Magento-Verzeichnis und nach dem Aktualisieren des Magento-Konfigurations-Caches, wird der nächste API-Call in der Datei var/v1_soap.log bzw. var/v2_soap.log (im var-Verzeichnis von Magento) gespeichert. Die Erweiterung verwendet zum Schreiben der Dateien Mage::log, und erfordert, dass der Magento-Log in System > Konfiguration > Erweitert: Entwickleroptionen > Log Einstellungen aktiviert ist:

Wie die Erweiterung im Detail funktioniert, wird vom Entwickler hier dokumentiert.

Erweiterung von GitHub herunterladen.

Veröffentlicht unter Empfehlungen | Verschlagwortet mit , , , , , , | Hinterlasse einen Kommentar