Verwenden der pixi* API mit PHP und NuSOAP

blog_pixi_API

In unserem Blog haben Sie schon mehrere Beiträge über Showcases der pixi* API lesen können. Heute zeigen wir Ihnen, wie einfach Sie (z.B. in Ihrem Shopsystem) auf die pixi* API zugreifen können und Daten aus pixi* auslesen oder schreiben können.

Die pixi* API basiert auf dem sog. SOAP-Protokoll, ein standardtisiertes Protokoll für die Kommunikation zwischen Anwendungen im Internet. PHP bietet hierfür eine eigene Implementierung, allerdings empfehlen wir für die Verwendung die frei verfügbare PHP-Bibliothek NuSOAP.

Die Bibliothek ist im Wesentlichen ausgereifter als die normale PHP-Implementierung. Fangen wir nun mit der Verbindung zur pixi* API an:

// NuSOAP PHP Bibliothek einbinden
include_once('nusoap.php');
// pixi* API initialisieren (Pfad zur WSDL)
$oSoapClient = new nusoap_client('https://pixiDEM:pixidem@ares.api.madgeniuses.net/pixiDEM/?wsdl', true);
// pixi* API Benutzername und Passwort setzen
$oSoapClient->setCredentials('pixiDEM', 'pixidem');
// folgendes ist nur nötig, falls Sie einen eigenen Server besitzen (pixi* Enterprise)
$oSoapClient->setEndpoint('https://ares.api.madgeniuses.net/pixiDEM/');
// pixi* API Objekt erzeugen
$oProxy = $oSoapClient->getProxy();

Nach dem Aufruf von “getProxy()” wird die WSDL-Datei (Steuerungsdatei für den SOAP-Dienst) heruntergeladen und für PHP zur Verfügung gestellt. Danach können Sie jede pixi* API – Funktion über die Variable $oProxy aufrufen.

Beispiel 1

$item = $oProxy->pixiGetItemInfo(array('EANUPC' => '2000010100002'));

Wir möchten alle Informationen zum Artikel mit der EAN 2000010100002 aus pixi*. Nach dem Ausführen der Abfrage auf der pixi* API steht die Antwort des SOAP-Servers in der Variable $item. Schauen wir uns diese mal genauer an:

var_dump($item);

Heraus kommt ein auf den ersten Blick riesiges Array an Informationen. Die eigentlichen Daten kommen erst zum Schluss:

array(1) {
  ["pixiGetItemInfoResult"]=->
  array(2) {
    ["SqlRowSet"]=>
    array(4) {
      ...
      ["diffgram"]=>
      array(1) {
        ["SqlRowSet1"]=>
        array(1) {
          ["row"]=>
          array(11) {
            ["ItemKey"]=>
            string(3) "201"
            ["SupplPrice"]=>
            string(6) "177.00"
            ["ItemName"]=>
            string(27) "Alphacrypt CAM Version 2.03"
            ["VPE"]=>
            string(1) "0"
            ["MinStockQty"]=>
            string(1) "0"
            ["MinOrderQty"]=>
            string(1) "0"
            ["SupplNR"]=>
            string(3) "MGS"
            ["Category"]=>
            string(3) "SAT"
            ["ItemNrInt"]=>
            string(13) "2000008600002"
            ["ItemNrSuppl"]=>
            string(3) "544"
            ["Quantity"]=>
            string(1) "0"
          }
        }
      }
      ...
    }
    ["SqlResultCode"]=>
    string(1) "0"
  }
}

Um nur auf die Informationen zuzugreifen, verkleinern wir das Array ein wenig:

$item = $item['pixiGetItemInfoResult']['SqlRowSet']['diffgram']['SqlRowSet1']['row'];

Nun haben wir ein Array mit den aktuellsten Artikelinformationen aus pixi*. Die Daten können Sie nun zur Anzeige in Ihrem Admin-Menü o.ä. verwenden.

Beispiel 2

$item_bins = $oProxy->pixiGetItemStockBins(array('EAN' => '2000010100002'));

Wir möchten alle aktuellen Lagerplätze des Artikels mit der EAN 2000010100002. Schauen wir uns die Variable wieder genauer an:

var_dump($item_bins);

Hier haben wir wieder jede Menge Informationen, zum Schluss wieder die eigentlichen Daten:

array(1) {
  ["pixiGetItemStockBinsResult"]=>
  array(3) {
    ["SqlRowSet"]=>
    array(4) {
      ...
      ["diffgram"]=>
      array(1) {
        ["SqlRowSet1"]=>
        array(1) {
          ["row"]=>
          array(2) {
            [0]=>
            array(5) {
              ["BinName"]=>
              string(7) "E-40-04"
              ["Quantity"]=>
              string(1) "4"
              ["BinSortNum"]=>
              string(3) "231"
              ["EAN"]=>
              string(13) "2000010100002"
              ["ItemNRInt"]=>
              string(13) "2000010100002"
            }
            [1]=>
            array(5) {
              ["BinName"]=>
              string(4) "P-20"
              ["Quantity"]=>
              string(1) "4"
              ["BinSortNum"]=>
              string(4) "1602"
              ["EAN"]=>
              string(13) "2000010100002"
              ["ItemNRInt"]=>
              string(13) "2000010100002"
            }
          }
        }
      }
      ...
  }
}

Nach einem Kürzen des Arrays auf die für uns wesentlichen Informationen haben wir ein Array mit den Informationen zu allen Lagerfächern:

array(2) {
  [0]=>
  array(5) {
    ["BinName"]=>
    string(7) "E-40-04"
    ["Quantity"]=>
    string(1) "4"
    ["BinSortNum"]=>
    string(3) "231"
    ["EAN"]=>
    string(13) "2000010100002"
    ["ItemNRInt"]=>
    string(13) "2000010100002"
  }
  [1]=>
  array(5) {
    ["BinName"]=>
    string(4) "P-20"
    ["Quantity"]=>
    string(1) "4"
    ["BinSortNum"]=>
    string(4) "1602"
    ["EAN"]=>
    string(13) "2000010100002"
    ["ItemNRInt"]=>
    string(13) "2000010100002"
  }
}

Damit man nicht jedesmal auf die gleiche Weise die Daten auslesen und verkleinern muss, verwenden Sie am Besten die folgende Funktion:

/**
 * getPixiAPIResult()
 *
 * @param mixed $soap_proxy
 * @param mixed $method
 * @param mixed $parameters
 * @return
 */
function getPixiAPIResult(&$soap_proxy, $method, $parameters) {
    $oResult = $soap_proxy->$method($parameters);
    $oResult = $oResult[$method.'Result']['SqlRowSet']['diffgram']['SqlRowSet1']['row'];
    if (is_array($oResult[0]))
        // Das Abfrageergebnis hat mehrere Zeilen
        return $oResult;
    else
        // Das Abfrageergebnis hat nur eine Zeile
        return array($oResult);
}

Nun haben wir in einer Zeile die gewünschten Informationen und können diese überall verwenden.

$item = getPixiAPIResult($oProxy, 'pixiGetItemInfo', array('EANUPC' => '2000010100002'));
$item_bins = getPixiAPIResult($oProxy, 'pixiGetItemStockBins', array('EAN' => '2000010100002'));

So einfach geht’s. Sie können auf diese Art und Weise jeden beliebigen API-Call verwenden. Details zu den API-Funktionen finden Sie in unserer FAQ-Datenbank mit Ihren FAQ-Zugangsdaten (diese haben Sie im Installationsprozess erhalten). Bei Fragen wenden Sie sich einfach an unseren pixi* Support.

Tags: ,

Die Kommentarfunktion ist geschlossen.