Verwenden der pixi* API mit PHP und NuSOAP
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.