Hallo
Ich möchte auch Daten meiner Produkte aus Afterbuy auslesen. Daher habe ich die Methode von Frank abgewandelt in diese hier:
PHP-Code:
public function getShopProducts($detailLevel, $maxitems, $filters = null) {
//Erstmal erstellen wir den Standard bereich
$xml = $this->_createGlobal("GetShopProducts", $detailLevel);
$xml->addChild("MaxShopItems", $maxitems);
//Jetzt noch die eventuellen Filter hinzufügem
if($filters != null) {
$xml->addChild("DataFilter");
foreach($filters as $filtername=>$filtervalue) {
$xml->DataFilter->addChild("Filter");
$xml->DataFilter->Filter->addChild("FilterName", $filtername);
$xml->DataFilter->Filter->addChild("FilterValues");
$xml->DataFilter->Filter->FilterValues->addChild("FilterValue", $filtervalue);
}
}
//Jetzt absenden und antwort erhalten
$response = $this->_makeCall($xml->asXml());
//TESTAUSGABE VON DER ANTWORT
var_dump($response);
}
Das ist der Aufruf dafür:
PHP-Code:
$api = new AfterbuyApi();
$api->setParams(
"https://www.afterbuy.de/afterbuy/ABInterface.aspx",
"",
"",
"",
"",
"de"
);
$filter["Anr"] = "1423";
$maxitems = "10";
$detaillevel = 8;
$result = $api->getShopProducts($detaillevel, $maxitems, $filter);
var_dump($result);
Der Aufruf funktioniert auch und ich bekomme die Daten des Artikels geliefert.
Das Problem was ich habe ist das an vielen Stellen jetzt leider sowas in dem Response steht: ["Name"]=> object(SimpleXMLElement)#9 (0) { }
Und das bei sehr vielen Daten. Wenn ich den Aufruf direkt mache in der Testumgebung von Afterbuy dann sehe ich das genau an diesen Stellen ein CDATA Block ist: <Name><![CDATA[AEG BACKOFEN]]></Name>
Wie kann ich jetzt noch das Script dazu bringen mir diese Daten auch anzuzeigen statt dieses object(SimpleXMLElement)#9 (0) ?
Danke schonmal im Vorraus
Hier nochmal der komplette Code:
PHP-Code:
<?php
error_reporting(E_ALL|E_STRICT);
interface iAfterbuyApi {
public function __construct();
public function setParams($address, $partnerId, $partnerPw, $userId, $userPw, $language);
}
final class AfterbuyApi implements iAfterbuyApi {
protected $address;
protected $partnerId;
protected $partnerPw;
protected $userId;
protected $userPw;
protected $language;
protected $rawXml;
public function __construct() {
$this->address = null;
$this->partnerId = null;
$this->partnerPw = null;
$this->userId = null;
$this->userPw = null;
$this->language = null;
$this->rawXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request></Request>";
}
public function setParams($address, $partnerId, $partnerPw, $userId, $userPw, $language) {
$this->address = $address;
$this->partnerId = $this->_toUtf($partnerId);
$this->partnerPw = $this->_toUtf($partnerPw);
$this->userId = $this->_toUtf($userId);
$this->userPw = $this->_toUtf($userPw);
$this->language = strtoupper($language);
return true;
}
public function getShopProducts($detailLevel, $maxitems, $filters = null) {
//Erstmal erstellen wir den Standard bereich
$xml = $this->_createGlobal("GetShopProducts", $detailLevel);
$xml->addChild("MaxShopItems", $maxitems);
//Jetzt noch die eventuellen Filter hinzufügem
if($filters != null) {
$xml->addChild("DataFilter");
foreach($filters as $filtername=>$filtervalue) {
$xml->DataFilter->addChild("Filter");
$xml->DataFilter->Filter->addChild("FilterName", $filtername);
$xml->DataFilter->Filter->addChild("FilterValues");
$xml->DataFilter->Filter->FilterValues->addChild("FilterValue", $filtervalue);
}
}
//Jetzt absenden und antwort erhalten
$response = $this->_makeCall($xml->asXml());
//TESTAUSGABE VON DER ANTWORT
var_dump($response);
}
private function _makeCall($xml) {
$context = $this->_createContext($xml);
$stream = fopen($this->address, "r", false, $context);
$contents = stream_get_contents($stream);
fclose($stream);
$response = simplexml_load_string($contents);
if ($response->CallStatus == "Error") {
$this->_throwError($response);
exit();
}
if ($response->CallStatus == "Warning") {
$this->_throwWarning($response);
}
return $response;
}
private function _createGlobal($call, $detail) {
$xml = new SimpleXMLElement($this->rawXml);
$xml->addChild("AfterbuyGlobal");
$xml->AfterbuyGlobal->addChild("PartnerID", $this->partnerId);
$xml->AfterbuyGlobal->addChild("PartnerPassword", $this->partnerPw);
$xml->AfterbuyGlobal->addChild("UserID", $this->userId);
$xml->AfterbuyGlobal->addChild("UserPassword", $this->userPw);
$xml->AfterbuyGlobal->addChild("CallName", $call);
$xml->AfterbuyGlobal->addChild("DetailLevel", $detail);
$xml->AfterbuyGlobal->addChild("ErrorLanguage", $this->language);
return $xml;
}
private function _createContext($data) {
$context = array ();
$context["http"] = array();
$context["http"]["method"] = "POST";
$context["http"]["header"] = "Content-type: application/x-www-form-urlencoded\r\n";
$context["http"]["header"].= "Content-Length: ".mb_strlen($data)."\r\n";
$context["http"]["content"] = $data;
$context = stream_context_create($context);
return $context;
}
private function _toUtf($content) {
return mb_convert_encoding($content, "UTF-8", "auto");
}
private function _toAscii($content) {
return mb_convert_encoding($content, "ASCII", "UTF-8");
}
private function _throwError($response) {
$code = (int) $response->Result->ErrorList->Error->ErrorCode;
$desc = (string) $this->_toAscii($response->Result->ErrorList->Error->ErrorDescription);
$long = (string) $this->_toAscii($response->Result->ErrorList->Error->ErrorLongDescription);
if(PHP_SAPI == "cli") {
$error = "Fatal Error\nCode:\t\t".$code."\nDescription:\t".$desc."\nDetails:\t".$long;
}
else {
$error = "<table>\n\t<tr>\n\t\t<th colspan=\"2\">Fatal Error</th>\n\t</tr>\n";
$error.= "\t<tr>\n\t\t<td>Code:</td>\n\t\t<td>".$code."</td>\n\t</tr>\n";
$error.= "\t<tr>\n\t\t<td>Description</td>\n\t\t<td>".$desc."</td>\n\t</tr>\n";
$error.= "\t<tr>\n\t\t<td>Details:</td>\n\t\t<td>".$long."</td>\n\t</tr>\n</table>";
}
trigger_error($error, E_USER_ERROR);
}
private function _throwWarning($response) {
$code = (int) $response->Result->WarningList->Warning->WarningCode;
$desc = (string) $this->_toAscii($response->Result->WarningList->Warning->WarningDescription);
$long = (string) $this->_toAscii($response->Result->WarningList->Warning->WarningLongDescription);
if(PHP_SAPI == "cli") {
$error = "Warning\nCode:\t\t".$code."\nDescription:\t".$desc."\nDetails:\t".$long;
}
else {
$error = "<table>\n\t<tr>\n\t\t<th colspan=\"2\">Warning</th>\n\t</tr>\n";
$error.= "\t<tr>\n\t\t<td>Code:</td>\n\t\t<td>".$code."</td>\n\t</tr>\n";
$error.= "\t<tr>\n\t\t<td>Description</td>\n\t\t<td>".$desc."</td>\n\t</tr>\n";
$error.= "\t<tr>\n\t\t<td>Details:</td>\n\t\t<td>".$long."</td>\n\t</tr>\n</table>";
}
trigger_error($error, E_USER_WARNING);
}
}
$api = new AfterbuyApi();
$api->setParams(
"https://www.afterbuy.de/afterbuy/ABInterface.aspx",
"",
"",
"",
"",
"de"
);
$filter["Anr"] = "1423";
$maxitems = "10";
$detaillevel = 8;
$result = $api->getShopProducts($detaillevel, $maxitems, $filter);
var_dump($result);
?>