Kategorien
Amazon MWS PHP

Products API gibt keine richtigen Fehlermledungen nur Fatal Error

Um aus Amazon die richtigen Fehlermeldungen heraus zu kitzeln, müssen die Fatals gefangen werden und ausgegeben, sonst kann man lange suchen:

                try
                {
                    $this->getListMatchingProductsForEanOrQueryData($ean, $country);
                }
                catch(MarketplaceWebServiceProducts_Exception $e)
                {
                    var_dump($e);
                    die();
                }
Kategorien
PHP

Führende Nullen oder Komma am Ende entfernen

Mit den Funktionen ltrim und rtrim lassen sich Leerzeichen und bestimmte störende Buchstaben am Anfang oder am Ende von Strings entfernen.

Bsp. Entfernen von führenden Nullen:

$string = "03423452";
$string = ltrim($string,'0');
//03423452

oder Komma am Ende entfernen

$string = "bla, bla,bla,";
$string = rtrim($string,',');
//bla, bla,bla
Kategorien
PHP XT-Commerce

XTCommerce Sofortüberweisungs Modul leitet bei Abbruch auf Warenkorb weiter

Bei einem Abbruch findet ein Redirect auf den Warenkorb statt, weil die verkaufte Artikel Mange schon um 1 erniedrigt wurde und die Artikel nicht mehr kaufbar sind laut Datenbank.

Deswegen muss in der checkout_payment.php folgender Code eingefügt werden

if($_GET['payment_error'] == 'sofortueberweisung_direct')
{
/*    require (DIR_WS_CLASSES . 'payment.php');
    $payment_modules = new payment('sofortueberweisung_direct');
    if ($confirmation = $payment_modules->confirmation())
    {

    }*/

    require_once (DIR_WS_CLASSES.'order.php');
    require_once (DIR_FS_INC.'xtc_db_query.inc.php');
    require_once (DIR_FS_INC.'xtc_get_prid.inc.php');
    $order = new order();

    for ($i = 0, $n = sizeof($order->products); $i < $n; $i ++)
    {
         xtc_db_query("update ".TABLE_PRODUCTS." set products_quantity = products_quantity + 1 where products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
    }
    unset($order);

}

oberhalb von

// if there is nothing in the customers cart, redirect them to the shopping cart page
if ($_SESSION['cart']->count_contents() < 1)
    xtc_redirect(xtc_href_link(FILENAME_SHOPPING_CART));

 

Kategorien
PHP SEO

PHP Redirect Header funktioniert nicht

Um Seiten SEO-freundlich umzuleiten, kann man in PHP einen 301 Redirect machen_

header("Location: http://www. new-location.de/foo_new.php",true,301);
exit;

Ich hatte dabei das Problem, das keine Fehlermeldung „Header already sent“ ausgegeben wurde, um herauszufinden, warum der Befehl nicht funktioniert. Es ist nämlich so, dass der header() Befehl nur funktioniert, wenn noch keine Bildschirmausgabe stattgefunden hat. Das betrifft auch Leerzeichen, wie sie oft bei PHP-Dateien vorkommen am Anfang oder Ende des Quellcodes:

_<?php

oder

?>_

Um diesen Stellen zu finden sollte man vor dem Redirect folgenden Code einfügen, wenn man keine Fehlermeldung „header already sent in line“bekommt:

    if(headers_sent($file, $line)){
        echo "Headers already sent in $file on line $line";
    }

 

Kategorien
PHP

pdflib Installation unter Windows Xampp

Bei einer Fehlermeldung wie:

Fatal Error: Call to undefined function pdf_new();

fehlt die die pdf-lib Erweiterung für PHP.

Die Installation ist denkbar einfach:

  1. Download von pdflib8.0 für PHP (erste Zeile in der Mitte)
  2. öffnen der .zip und kopieren der passenden libpdf_php.dll, je nach PHP Version aus dem Verzeichnis /pdflib/bind/php/php-530-v8 in das Verzeichnis php/ext
  3. Eintrag in der php.ini: extension=libpdf_php.dll; hinzufügen an der extension Stelle
Kategorien
PHP WordPress

WordPress Plugin Transposh Ignore Tag

Zum Übersetzen von Texten eignet sich dieses Plugin vorzüglich. Es kommt bei meinem Blog nur zu Problemen, wenn Code übersetzt wird, was man jedoch verhindern kann, indem man alles in <pre>-Tags ausschließt.

wp-content/plugins/transposh-translation-filter-for-wordpress/core/parser.php Z. 139:

 protected $ignore_tags = array('script' => 1, 'pre' => 1,'style' => 1, 'code' => 1, 'wfw:commentrss' => 1, 'comments' => 1, 'guid' => 1);
Kategorien
Amazon MWS

MWS Products API wird ersetzt durch Amazon Product Advertising API (PA-API)

Am 6. Februar gab es diese Email von Amazon:

Amazon Marketplace Web Service (Amazon MWS) is pleased to announce the availability of the new Amazon MWS Products API section. The Amazon MWS Products API section will replace the Amazon Product Advertising API (PA-API) as the means for sellers to obtain sourcing, listing matching, and pricing information for offering products on Amazon marketplace sites. PA-API will be discontinued for Amazon sellers use on August 31, 2012.

Das bedeutet, dass alle Operationen umgestellt werden müssen, die mit der alten Products Advertising API für Sellers zu tun haben. Davon unbeeindruckt ist die Amazon Product Advertising API (PA-API) für Affiliate User, d.h. diejenigen, die Werbung damit schalten un Geld verdienen. Daran wird sich auch so schnell nichts mehr ändern, weil Amazon ein Interesse hat, diese Benutzer nicht zu verlieren.

Eine sehr gute Übersicht über die Unterschiede von Seller und Affiliate gibt es hier.

Kategorien
Amazon MWS PHP

Amazon MWS: SellerSKUList failed a validation check: Extraneous whitespace for input value

Bei folgender Fehler Meldung bei  der Amazon MWS API:

Fatal error: Uncaught exception 'MarketplaceWebServiceProducts_Exception' with message 'parameter SellerSKUList.SellerSKU.x failed a validation check: Extraneous whitespace for input value: "64145345473 "' in foo\\MarketplaceWebServiceProducts\Client.php on line 533
MarketplaceWebServiceProducts_Exception: parameter SellerSKUList.SellerSKU.x failed a validation check: Extraneous whitespace for input value: "64145345473 " in foo\MarketplaceWebServiceProducts\Client.php on line 533

War die Lösung, wie die Fehlermeldung schon sagt, die Whitespaces zu entfernen mit trim:

                for($i = 0; $i < count($skus); $i++)
                {
                    $skus[$i] = trim($skus[$i]);
                }

Komischerweise funktioniert das nicht in PHP mit:

array_walk($skus, "trim");

oder

function trim_value(&$value) 
{ 
    $value = trim($value); 
}
array_walk($skus, 'trim_value');
Kategorien
PHP Zend Framework

Internationalisierung/Mehrsprachigkeit von PHP Projekten mit .po und .mo

Für ein mehrsprachiges PHP Projekt sollte man von Anfang an alle Wörter auslagern bzw. markieren, die in einer anderen Sprache übersetzt werden sollen. Dazu bietet sich die in PHP enthaltene Funktion gettext an:

<?php echo gettext("Einen schönen Tag noch"); ?>

oder der Alias (welcher nicht zu empfehlen ist, weil man nicht danach zu kann ordentlich)

<?php echo _("Einen schönen Tag noch"); ?>

Damit kann man zu übersetzenden Text markieren und später übersetzen lassen und dann dynamisch austauschen lassen , wenn auf der englischen Webseiten gesurft wird.

Wenn man sein Projekt mit gettext programmiert hat, kann man am Ende ganz einfach tabellenartige Dateien generieren aus dem Quellcode mit Poedit. Dort kann mann sehr übersichtlich die Übersetzung der Strings eintragen bis hin zu Pluralformen von Wörtern.

Kategorien
IT-Recht XT-Commerce

Buttonlösung Gesetzesänderung für Online Shops

Bis zum 01.08.2012 müssen Onlinehändler, die über ihren Online Shop (auch) an Endkunden Produkte verkaufen, die Vorgaben der so genannten Buttonlösung umsetzen auf der finalen Seite, auf der der Verbraucher seine Bestellung auslöst.

  1. Erfüllung erweiterter Informationspflichten
  2. Gestaltung des Bestellbuttons

Bei einer Missachtung der Gesetzänderung handelt der Onlinehändler wettbewerbswidrig. Bei falscher Beschriftung des Button kommt kein Vertrag mit dem Kunden zustande.

Für die Schweiz/Österreich gilt der deutsche Gesetzesentwurf auch, sofern sich das Angebot auch an deutsche Kunden richtet: siehe Buttonlösung Schweiz.

1. Erfüllung erweiterter Informationspflichten

Es muss klar und verständlich (deutlich hervorgehoben) für den Verbraucher dargestellt werden, wenn

  • markanten Produktmerkmale
  • Angabe der Mindestlaufzeit von Verträgen (wenn vorhanden)
  • „den Gesamtpreis der Ware oder Dienstleistung einschließlich aller damit verbundenen Preisbestandteile sowie alle über den Unternehmer abgeführten Steuern oder, wenn kein genauer Preis angegeben werden kann, seine Berechnungsgrundlage, die dem Verbraucher eine Überprüfung des Preises ermöglicht“
  • Angabe aller Versandkosten und Zusatzkosten (z.B: Zoll): „gegebenenfalls zusätzlich anfallende Liefer- und Versandkosten sowie einen Hinweis auf mögliche weitere Steuern oder Kosten, die nicht über den Unternehmer abgeführt oder von ihm in Rechnung gestellt werden“
  • die Befristung bei zeitlich beschränkten Angeboten

Der genaue Gesetzestext: § 1 Informationspflichten bei Fernabsatzverträgen.

2. Der Button auf der finalen Verkaufsabschlusseite

Der Button muss unterhalb der in Punkt 1 benannten Informationen platziert sein und nicht mehrmals auf der Seite vorkommen. Zwischen diesen Informationen dürfen keine weiteren sichtbaren Elemente platziert werden, wie z.B: Checkboxen oder Input-Felder.

Die Button sollte folgender Maßen beschriftet sein ohne weitere Zusätze:

  • Zahlungspflichtig bestellen (Musterbeschriftung vom Gesetzgeber)
  • Kaufen
  • Kostenpflichtig bestellen
  • Zahlungspflichtigen Vertrag schließen
  • Kauf abschließen

Unzulässige Beschriftungen:

  • Bestellung absenden
  • Weiter
  • Bestellen
  • Entscheiden Sie sich für uns!
  • Kauf abschließen und sich verwöhnen lassen

Beispiel für eine erfolgreiche Umsetzung der neuen Regelungen: zeedee-shop.com

empfehlenswerte weiterführende Lektüre: Leitenfaden Buttonlösung IT-Recht Kanzlei München.

Dieser Artikel ersetzt keine Rechtsberatung beim Anwalt und es wird auch nicht für die Richtigkeit gehaftet. Ich empfehle einen IT-Recht Anwalt zu kontaktieren: Kanzlei Bilk & Keil.