php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 1,00 durchschnittlich.
Alt 10.09.2008, 18:00  
Neuer Benutzer
 
Registriert seit: 09.09.2008
Beiträge: 9
DenMa befindet sich auf einem aufstrebenden Ast
Standard

@Frank

Ich bin beeindruckt.
Ganz ehrlich.

wie man auf die schnelle mal so'n code aus'm Ärmel zaubert.
Deswegen bin ich Händler und kein Programmierer

Vielen Dank

Auf dem 2ten Server mit PHP5 und url_fopen on läuft das Script einwandfrei.
Ich versuche mal selber, aus der Vorgabe eine andere Abfrage einzubauen.

Vielen Dank nochmal.
Wenn du mal Tinte, Toner oder Papier brauchst, schreib mich an, hast was gut bei mir.

Wie ich mich kenne, werde ich spätestens Morgen eh schon wieder nicht weiter kommen.

Erstmal schönen Abend.
DenMa ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.09.2008, 00:26  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Damit du einen Anhalt hast, hier mal einigermaßen kommentiert die implementation von GetPaymentServices
PHP-Code:
//weitere Methode der Klasse
//Aus der Doku wissen wir, dass wir folgende Werte variable übergeben müssen
// Filtername + Filterwerte als assoziatives Array (optional)
// außerdem wird ein DetailLevel benötigt
public function getPaymentServices($detailLevel$filters null) {
        
//Erstmal erstellen wir den Standard bereich
        
$xml $this->_createGlobal("GetPaymentServices"$detailLevel);
        
//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);
        
/**
        *** Ergebnis entsprechend auswerten
        **/
        //Ergebnisse zurückgeben
        
return array($ergebnis1$ergebnis2, ...);

__________________
Frank ist offline   Mit Zitat antworten
Alt 11.09.2008, 20:40  
Neuer Benutzer
 
Registriert seit: 09.09.2008
Beiträge: 9
DenMa befindet sich auf einem aufstrebenden Ast
Standard

Als hätte ich es nicht gesagt.
Ich komme schon nicht weiter.

Wie kann ich denn nun die Filter erweitern?
Ich habe das Beispiel GetPaymentServices erfolgreich übernommen.

Wenn ich aber GetSoldItems ausprobiere, klappt das ebenfalls... leider aber ohne einen Filter.

Ich würde gerne nur zum Spaß den Filer auf "OrderID" = "119752320" einsetzen um nur einen Datensatz zu erhalten.

Aber an welcher Stelle muss ich den Filternamen "OrderID" und den Wert einsetzen?

Danke für deine Aufmerksamkeit.
DenMa ist offline   Mit Zitat antworten
Alt 11.09.2008, 20:46  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

in meinem beispiel so

PHP-Code:
$api = new AfterbuyApi();
$api->setParams(
    
"https://www.afterbuy.de/afterbuy/ABInterface.aspx"
    
"PartnerId"
    
"PartnerPassword"
    
"UserId"
    
"UserPassword"
    
"de"
);
$filter["OrderID"] = "119752320";
$detaillevel 0//keine Ahnung was du da einsetzt
$result $api->getPaymentServices($detaillevel$filter);
var_dump($result); 
__________________
Frank ist offline   Mit Zitat antworten
Alt 12.09.2008, 13:36  
Neuer Benutzer
 
Registriert seit: 09.09.2008
Beiträge: 9
DenMa befindet sich auf einem aufstrebenden Ast
Standard

Guten Tag,

da wäre ich dann wieder.
Das mit den Filtern scheint soweit zu klappen, nur bekomme ich leider als result = NULL

Siehe hier: http://shop.fair-ink.de/test/api3.php

Die function habe ich angepasst an GetSoldItems:

PHP-Code:
//weitere Methode der Klasse
//Aus der Doku wissen wir, dass wir folgende Werte variable übergeben müssen
// Filtername + Filterwerte als assoziatives Array (optional)
// außerdem wird ein DetailLevel benötigt

    
public function GetSoldItems($detailLevel$filters 0) {
        
//Erstmal erstellen wir den Standard bereich
        
$xml $this->_createGlobal("GetSoldItems"$detailLevel);
        
//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);
        /**
        *** Ergebnis entsprechend auswerten
        **/
        //Ergebnisse zurückgeben
      //  return array($ergebnis1, $ergebnis2, ...);

Ich habe folgendes an den Schluss gesetzt:
PHP-Code:
... 
$filter["DefaultFilter"] = "PaidAuctions";
$detaillevel ;
$result $api->GetSoldItems($detaillevel$filter) ;
var_dump($result);
... 
Die Anfrage wird als gültige Anfrage in der Statistik gewertet und es kommt ja auch kein Fehler.

Was kann das sein?

MFG

P.S.: Heute werde ich ICQ installieren.
DenMa ist offline   Mit Zitat antworten
Alt 06.04.2010, 14:29  
Neuer Benutzer
 
Registriert seit: 06.04.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
Dipree befindet sich auf einem aufstrebenden Ast
Standard

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($errorE_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($errorE_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);
?>
Dipree ist offline   Mit Zitat antworten
Alt 06.04.2010, 17:06  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Suchergebnis Nummer 1 bei Tante G für: php simplexml cdata
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 06.04.2010, 17:45  
Neuer Benutzer
 
Registriert seit: 06.04.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
Dipree befindet sich auf einem aufstrebenden Ast
Standard

Super, funktioniert. Danke dir
Dipree ist offline   Mit Zitat antworten
Alt 30.12.2010, 11:30  
Neuer Benutzer
 
Registriert seit: 30.12.2010
Beiträge: 1
PHP-Kenntnisse:
Anfänger
ripley_one befindet sich auf einem aufstrebenden Ast
Standard hmmm..

Hallo!
mir hat das nicht geholfen... vielleicht kann das nochmal jemand für Anfänger erklären? ich benötige die Ausgabe als XML. Leider fehlt mir der Ansatz.
ripley_one ist offline   Mit Zitat antworten
Alt 13.01.2011, 15:13  
Neuer Benutzer
 
Registriert seit: 13.01.2011
Beiträge: 1
PHP-Kenntnisse:
Anfänger
narfnarf befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

ich häng mich hier mal rein, da ich den Code hier ebenfalls nutze.

Ich nutze die Funktion GetSoldItems und erhalte auch eine Ausgabe.

Warum erhalte ich aber Werte von Feldern, die gar nicht im Code abgefragt werden?
narfnarf ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Schnittstelle zu TomTom Work Plague PHP Tipps 2008 0 20.06.2008 10:04
Java Server mit PHP ansprechen Broadcast PHP Tipps 2008 2 02.04.2008 16:34
Proxys mit Socks4 und 5 testen bzw. ansprechen? Frank Burian PHP-Fortgeschrittene 2 21.02.2007 19:40
Formular in Hauptfenster auf iframe ansprechen R.E.M. HTML, Usability und Barrierefreiheit 2 24.09.2006 15:33
Unsichtbares Formularfeld mit Javascript ansprechen mAy^daY HTML, Usability und Barrierefreiheit 6 13.08.2006 21:25
XML Schnittstelle -> keine Ausgabe PHP Tipps 2006 8 10.06.2006 13:19
Seite per ID ansprechen? tayke PHP Tipps 2006 4 01.06.2006 23:37
stty schnittstelle einstellen... hekto Server, Hosting und Workstations 2 24.04.2006 19:58
Serverseitige Schnittstelle zwischen Maileingang und MySQL webazubi PHP-Fortgeschrittene 8 26.02.2006 12:45
[Erledigt] Lesegerät ansprechen und Chipkarte auslesen PHP-Fortgeschrittene 5 21.02.2006 14:38
serielle schnittstelle und tcp schnurzli PHP-Fortgeschrittene 5 30.01.2006 15:01
Serielle Schnittstelle PHP-Fortgeschrittene 1 03.10.2005 22:02
leeren div-container ansprechen HTML, Usability und Barrierefreiheit 4 18.04.2005 11:04
AVM KEN als lokalen SMTP Server ansprechen workaholic PHP Tipps 2005 3 04.02.2005 13:20
[Erledigt] Schnittstelle? PHP-Fortgeschrittene 9 04.01.2005 14:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
api schnittstelle php, http://www.php.de/php-fortgeschrittene/47317-xml-api-schnittstelle-mit-php-ansprechen-2.html, api schnittstelle erstellen, php api schnittstelle, xml schnittstelle erstellen, afterbuy api test, afterbuy orderid anr, api schnittstelle auslesen, afterbuy xml, afterbuy api, afterbuy xml schnittstelle php, afterbuy getsolditems, foreach($filters as $filtername=>$filtervalue), php xml schnittstelle ansprechen, xml schnittstelle ansprechen, afterbuy xml schnittstelle, api schnittstelle mit php, getsolditems, php schnittstelle erstellen, php xml schnittstelle erstellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum