Benutzen des eBay API mit PHP

eBay mit PHP
Kommentare

Mittlerweile tummeln sich auf dem Online-Marktplatz neben privaten Verkäufern auch etliche professionelle und semiprofessionelle Power-Seller. Gerade hier ist eine weitgehend automatisierte Abwicklung bare Münze wert. Seit kurzem unterstützt eBay selbst die Händler bei der Integration in die Plattform mit einem API; und das zu durchaus vertretbarem Aufwand.

Kennen Sie noch die PEZ-Spender? Die kleinen viereckigen Plastikdinger mit den Comicfigur-Köpfen beherbergten kleine rechteckige Minz- und Fruchtbonbons. Genau diese Dinger sammelte die Freundin von Pierre Omidyar, als dieser 1995 Auction Web entwickelte, und eigentlich sollte die kleine Website nur als Treffpunkt für die PEZ-Enthusiasten aus der Nachbarschaft dienen. Innerhalb weniger Monate begann die Site sämtliche Rekorde zu sprengen. Heute ist Echo Bay, kurz: eBay, mit 75 Millionen Benutzern weltweit in 27 Ländern dieser Erde vertreten. Zunehmend finden sich unter den Verkäufern neben privaten Anbietern auch professionelle Händler, die teilweise sogar ihren Lebensunterhalt damit bestreiten können. Lassen wir dahin gestellt sein, ob dies eine positive Tendenz ist, so ergibt sich hier doch zumindest eine Vielzahl von Aufgaben. Sobald die Menge der abzuwickelnden Auktionen eine gewisse kritische Masse erreicht hat, beginnt die Suche nach geeigneten Werkzeugen zur Automatisierung. Bisher sind solche Systeme, die beispielsweise Warenwirtschaft, Buchhaltung und nicht zuletzt Customer Relationship Management zusammen mit einer Integration in die eBay-Plattform bieten, noch Mangelware.

Architektur

Das eBay-Backend-System besteht aus einer Datenbank, welche die Auktionen und die Transaktionen der letzten drei Monate beinhaltet. Ein IBM Websphere J2EE-Server beinhaltet die Geschäftslogik und stellt die Daten- und Funktionsbasis für die einzelnen eBay-Webseiten zur Verfügung. Darauf setzt dann die Präsentationsebene auf. Parallel dazu ermöglicht das Application Programming Interface (API) auch einen Zugang zu den Geschäftsdaten, sprich: den einzelnen Auktionen, sowie im Fall eines erfolgreichen Verkaufs auch zu den Informationen von Käufern und Anbietern. Auch eBay selbst nutzt die API in einer Reihe von Zusatzanwendungen wie etwa dem TurboLister, dem EditorKit oder dem Verkaufsmanager. Wobei die erste Anwendung als Offline-System Windowsanwendern das automatisierte Einstellen von Artikeln erlaubt. Der Verkaufsmanager ist ein HTML-basiertes Werkzeug zur Geschäftsabwicklung. Daneben existiert bereits eine Reihe von 3rd-Party-Anwendungen, die ähnliche Funktionen übernehmen können. Mit über einem Drittel ist der Anteil aller Artikel, die mittlerweile bereits mithilfe des API eingestellt werden, überraschend hoch. Die Grundarchitektur des API besteht im Austausch von XML-Dokumenten, die mittels des HTTPS-Protokolls zwischen dem API-Server und den Client-Anwendungen übertragen werden. Dabei wurde das HTTP-Protokoll durch eine Reihe von Header-Feldern erweitert, die neben der Identifikation der Anwendung und des Entwicklers auch den gewünschten Methodenaufruf spezifizieren. Hier ist insbesondere zu beachten, dass bei Aufruf drei Schlüsselwerte (DevID, AppID und CertID) übergeben werden, die nach der Registrierung bereitgestellt werden. Die Übergabe des Anfrage-XML-Dokuments erfolgt dabei mithilfe eines HTTPS-POST. Die Grundstruktur für den Datenaustausch ist im Listing 1 ersichtlich, wo Sie das Protokoll eines Methodenaufrufs finden. Dieser Aufbau ähnelt stark Protokollen wie XML-RPC oder XML Web Services via SOAP; noch enger verwandt ist der Aufbau mit WebDav, letztendlich aber folgt er keinem dieser Standards. Laut eBay soll hier erst abgewartet werden, wie sich der Markt in Bezug auf diese Technologien entwickelt, bevor man auf diesen Zug aufspringt, allerdings ist es durchaus vorstellbar, dass es in Zukunft eine Web Service-Schnittstelle geben könnte. Sicherlich ein gesunder Umgang mit dem Hype, der um dieses Thema entstanden ist, auch wenn uns als Programmierern dadurch zunächst einmal mehr Aufwand entsteht.

<img src="http://cdn.sandsmedia.com/ps/onlineartikel/pspic/picture_file//17/import3fc1da4cafc96.tif<
Abb. 1: eBay-API-Architektur

Bei einer ersten Betrachtung der unterschiedlichen API-Funktionen wird schnell klar, welche Intention eBay hier verfolgt. Zunächst stehen Funktionen bereit für das Einstellen von Artikeln (AddItem, RelistItem) sowie eine Reihe von Möglichkeiten, um die bestehenden Auktionen zu verändern. Es können Artikel gesucht und die Status- bzw. Detailinformationen abgerufen werden; letztlich die Funktion der eBay-Webseite in Form einer Programmierschnittstelle. Einzige Ausnahme ist eine Funktion zum Bieten auf Artikel, die nicht durch das API erreichbar ist. Daneben fehlen einige kaum relevante Daten des Mein eBay-Bereichs. Die typischen EndOfAuction-Mails können durch Angabe einer URL ersetzt werden; beim Auftreten eines Ereignisses benachrichtigt das eBay-System dann z.B. Ihren Webserver mit dem Absetzen einer SOAP Message. Insgesamt umfasst das API etwa 50 Funktionen in den verschiedenen Funktionsbereichen. Ähnlich wie die eBay-Webseite ist auch das API einer ständigen Veränderung unterworfen, allerdings garantiert eBay hier einen gewissen sog. Compatibility Level für mindestens ein Jahr. Spätestens dann müssen allerdings Anwendungen entsprechend angepasst werden. Zusammenfassend ist durch das API ein Zugriff auf die Business-Prozesse von eBay möglich. Eine Einbindung von eBay-Daten in eigene Webseiten für die Darstellung der eigenen laufenden Aktionen ist nicht Zweck des API, kann damit aber durchaus realisiert werden (zweckgerechter ist hierfür das sog. EditorKit). Interessant ist sicherlich auch, dass eBay in Kürze Katalogfunktionalitäten einführen wird, durch die sich Produkte mit standardisierten Beschreibungen und Attributen versehen lassen und auch gefunden werden können. Listing 1: HTTP-Daten für den Abruf der eBay-Zeit

Request:
POST /ws/api.dll HTTP/1.0
X-EBAY-API-COMPATIBILITY-LEVEL: 305
X-EBAY-API-SESSION-CERTIFICATE: DevId;AppId;CertId
X-EBAY-API-DEV-NAME: DevId
X-EBAY-API-APP-NAME: AppId
X-EBAY-API-CERT-NAME: CertId
X-EBAY-API-CALL-NAME: GeteBayOfficialTime
X-EBAY-API-SITEID: 0
X-EBAY-API-DETAIL-LEVEL: 0
Content-Type: text/xml
Content-Length:

usa5ebayGeteBayOfficialTime010

Response:
HTTP/1.1 200 OK
[...]

2003-05-19 21:58:00
Erste Schritte

Bevor Sie nun mit den ersten PHP-Skripten beginnen können, müssen Sie zunächst in das eBay-Entwicklerprogramm eintreten. Dazu bedarf es einer eBay-Benutzerkennung und des Aufrufs von developer.ebay.com/. Die Anmeldung ist kostenlos und Sie erhalten danach einen Satz von Schlüsseln, den Sie für den Aufruf einer API-Methode nutzen können. In der Developer Zone stehen Ihnen dann der Zugang zu den Entwicklerforen (auch in Deutsch) und insbesondere die Dokumentation der API zur Verfügung, die bisher leider nur online verfügbar ist. Daneben steht hier ein kleines Test-Tool bereit, mit dem die API-Aufrufe ohne größeren Aufwand durchgeführt werden können. Dieses mutet zwar ein wenig kryptisch an, da hier letztlich die XML-Fragmente für den Datenaustausch stehen, ist aber durchaus funktionell (zumindest solange Sie den Internet Explorer benutzen). Die Entwicklung einer Anwendung kann dabei zunächst in der sog. Sandbox stattfinden. Diese stellt ein Testsystem dar, das funktionell und von seiner Anmutung eBay.com simuliert. Allerdings stehen hier nicht auch die Livedaten und insbesondere nicht die angemeldeten Benutzer zur Verfügung. Sie sollten daher zuallererst auf sandbox.ebay.com/ mithilfe des Web-Interfaces Registrierungen für einige Benutzer vornehmen. Sinnvollerweise für mindestens einen Verkäufer und mehrere Käuferkonten, um später den Handel simulieren zu können. Hierbei ist darauf zu achten, dass Sie sinnvolle (amerikanische) Adressen und Telefonnummern verwenden, da hier eine Prüfung stattfindet (www.yellowpages.com/ könnten Ihnen hier weiterhelfen). In der Testumgebung können dann die Teilnehmer mittels eines Aufrufs von ValidateTestUserRegistration mit virtuellem Geld ausgestattet werden, sodass ein Handel möglich ist. Nun können Sie mittels Ihrer Benutzer einen regen Handel mit nicht vorhandenen Dingen treiben, sprich: das Einstellen von Auktionen, das Bieten auf Artikel und die Abwicklung der Transaktionen durchspielen. Leider stehen Ihnen zunächst keine Testdaten zur Verfügung, vielmehr müssen Sie diese selbst durch einen Handel Ihrer Testteilnehmer untereinander erzeugen. Auch in der Sandbox gilt, dass Auktionen i.d.R. mindestens drei Tage laufen, und man muss sich hier evtl. mit der Sofort-Kaufen-Option oder der Nutzung von EndItem behelfen, damit Transaktionsdaten (also Verkäufe) entstehen. Beachten Sie dabei, dass Sie für das Bieten nur das Web-Interface der Sandbox nutzen können, da die Bietfunktionalität nicht durch das API abgedeckt wird. Die Sandbox-Umgebung ist eben ein Abpicture von eBay USA und unterscheidet sich damit nicht nur durch ein englisches Benutzer-Interface und Dollar-Preise von eBay Deutschland. Hier gelten neben anderen funktionellen Unterschieden zum Teil auch andere Regularien für die Weitergabe von Benutzerdaten. Für die Zukunft verspricht eBay aber lokalisierte Sandkästen mit den entsprechenden Eigenarten. Sandbox- wie Liveumgebung besitzen jeweils ein Web-Interface und einen Zugang zu den API-Servern. Die Systeme benötigen jeweils eine unterschiedliche Gruppe von Schlüsseln, die nicht verwechselt werden sollten. Typischerweise hinkt das Web-Interface innerhalb der Sandbox ein wenig hinter der Liveumgebung her, da neue Funktionen zunächst dort eingeführt werden.

API und SDK

Innerhalb der Developer Zone findet sich auch ein Download-Paket mit dem eBay SDK. Das SDK ist eine Entwicklung auf der Basis von Microsoft .NET und stellt eine Abstraktionsebene über dem API dar. Obwohl hier PHP explizit als unterstützte Sprache genannt wird, ist der Download kaum sinnvoll. Durch die sog. Interop-Schnittstelle von .NET lässt sich die Bibliothek wie eine COM-Komponente ansprechen und entsprechend kann so auch eine Nutzung unter PHP realisiert werden. Abgesehen davon, dass das Ganze natürlich nur auf der Microsoft-Plattform arbeitet, ist daneben auch eine .NET Runtime zu installieren, die nur auf Windows 2000/XP und höher arbeitet. Interessant ist der Integrationsteil des SDKs, der eine lokale Datenbank durch Synchronisationsfunktionen mit den eBay-Daten abgleicht. Grundsätzlich wäre hier auch eine Nutzung von z.B. MySQL als Datenbank möglich, erreichbar allerdings nur mit zusätzlichem Aufwand. In Kürze soll hier aber auch ein SDK für PHP bereitstehen, welches ähnliche Funktionen auch auf anderen Plattformen erlauben wird.

Nutzen des API unter PHP

Für die Nutzung des eBay API benötigen Sie zunächst eine PHP-Installation mit einer Reihe von Erweiterungen. Neben dem XML-Support (–with-xml), werden cURL (–with-curl) sowie openSSL (–with-openssl) benötigt. Sinnvoll, wenn auch nicht unbedingt notwendig, ist auch die Unterstützung für XSL-Transformation und die Aktivierung des XML DOM-Supports. Bei einem eigenen Testsystem sollte es unproblematisch sein, die Konfiguration durch Rekompilierung oder Editieren der php.ini zu erreichen. Die wenigsten Provider unterstützen allerdings standardmäßig diesen Aufbau. Für einen ersten Test beschränken wir uns auf die Methode GeteBayOfficialTime für den Abruf der aktuellen eBay-Zeit. Nun benötigen Sie jene drei Schlüssel, die Sie während der Anmeldung beim eBay-Entwicklerprogramm erhalten haben und einen eBay-Benutzer-Account inkl. Passwort. Falls Sie auf der Sandbox arbeiten, sind dies dann die Angaben für Ihren Testbenutzer, den Sie dort angelegt haben. Jetzt stellen wir das XML-Anfragedokument zusammen, definieren die notwendigen Header-Einträge in Form eines Array und können dann den Request mittels curl_exec ausführen. Listing 2 zeigt den dazu notwendigen Code. Danach muss das Ergebnis-XML-Dokument nur noch geparst werden, und die eBay-Uhrzeit steht zur Verfügung. Für eine genaue Betrachtung fehlt hier der Platz, allerdings finden Sie ein Beispiel auf der Heft-CD. Viele der API-Funktionen können unter Umständen eine sehr große Datenmenge zurückliefern. Das gilt beispielsweise für die Such-Funktionen GetSearchResults oder GetSellerTransactions für den Abruf der aktuellen Verkäufe eines Benutzers. Hier nutzt die API eine Unterteilung der Ergebnisdaten auf mehrere Seiten, wobei dann pro Seite ein Maximum von jeweils 200 Einträgen erreichbar ist. Dieser Komplexität ist also bei diesen Funktionen Rechnung zu tragen, damit alle Daten abgerufen werden. Listing 2: Abruf der eBay-Zeit mittels PHP

$request = ""
. "" . EBAY_UID . ""
. "" . EBAY_PWD . ""
. "0"
. "0"
. "0"
. "GeteBayOfficialTime";

$headers[] = "X-EBAY-API-COMPATIBILITY-LEVEL: 305";
$headers[] = "X-EBAY-API-SESSION-CERTIFICATE: ".DEVID.";".APPID.";".CERTID;
$headers[] = "X-EBAY-API-DEV-NAME: ".DEVID;
$headers[] = "X-EBAY-API-APP-NAME: ".APPID;
$headers[] = "X-EBAY-API-CERT-NAME: ".CERTID;
$headers[] = "X-EBAY-API-CALL-NAME: GeteBayOfficialTime";
$headers[] = "X-EBAY-API-SITEID: 0";
$headers[] = "X-EBAY-API-DETAIL-LEVEL: 0";
$headers[] = "Content-Type: text/xml";
$headers[] = "Content-Length: " . strlen($request);

$curl = curl_init("https://api.sandbox.ebay.com/ws/api.dll");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$result = curl_exec($curl);

Die Integration des eBay API in bereits vorhandene Systeme ist in der Regel kaum problematisch. In den allermeisten Fällen reichen hier die beiden Funktionen AddItem und GetSellerTransactions aus, um die Grundfunktionen wie das Einstellen und die Verkaufsabwicklung zu realisieren. In regelmäßigen Abständen aufgerufen, könnte so auch eine Synchronisation mit einer lokalen Datenbank bzw. mit Austauschdateien realisiert werden. Insbesondere bei XML-basierenden Systemen oder solchen mit einer entsprechenden Schnittstelle lässt sich evtl. mithilfe einer einfachen XSL-Transformation ein Integrationsweg finden. Hier hat dann auch der Verzicht auf XML RPC oder SOAP einen deutlich positiven Effekt, da dadurch die Transformation direkt auf dem Ergebnis- bzw. Eingangsdokument durchgeführt werden kann.

Going live und Kosten

Nach dem Abschluss der Entwicklung und dem Test auf der Sandbox gilt es nun, die neue Anwendung in der Produktionsumgebung in Betrieb zu nehmen. Hier wird zum einen eine andere URL für das Absetzen der HTTP-Anfrage benötigt, daneben muss zwingend eine Zertifizierung durchlaufen werden, deren Ergebnis die Übergabe des neuen Schlüssel-Tripples durch eBay ist. Nur mit diesen Schlüsseln kann dann auf der Liveumgebung gearbeitet werden. Das eBay-Entwicklerprogramm unterscheidet in individuelle und kommerzielle Anwendungen bzw. Mitgliedschaften. Für individuelle Mitglieder entstehen, abgesehen von der Zertifizierung in Höhe von 100 Dollar, keine weiteren Kosten, wobei hier aber die Nutzung auf 50 Aufrufe täglich beschränkt ist. Für alle Anwendungen gilt, dass die Nutzung des API für das Einstellen von Artikeln nicht in den gebührenpflichtigen Aufrufen vermerkt wird. Es werden natürlich weiterhin Einstellgebühren sowie evtl. Verkaufsprovisionen fällig. Die kommerziellen Einstufungen erheben Gebühren, die sich aus einem Sockelbetrag und Nutzungsgebühren je Aufruf berechnen. Nur mit einer kommerziellen Lizenz darf eine Anwendung vertrieben werden; hier wird die Zertifizierung nach einem Review durch eBay vorgenommen und mit einer eigenen AppID ausgestattet. Dieses Gebührenmodell existiert seit Juli 2003 und ging mit einer massiven Senkung der Kosten einher. Wesentlich ist allerdings, dass nicht der Endbenutzer, sondern der Entwickler diese Gebühren zu entrichten hat. Der Vertrieb einer Anwendung oder eines Skriptes wird damit letztlich technisch eher schwierig durchführbar. Im Rahmen eines kommerziellen Projekts müssten die Schlüsselinformationen im Skript mitgeliefert werden. In der Konsequenz ist somit die Anwendung mit geeigneten Mitteln zu verschlüsseln – der Verlust der Schlüssel könnte bei einer notwendigen Sperrung und Neuzuteilung aufwändig sein – und man muss die Forderungen seitens eBay auf seine Kunden umlegen. Ein Billing-Mechanismus ließe sich z.B. über einen Webserver implementieren, bei dem die Desktop Clients ihre API-Nutzungen registrieren. Einfacher und praktischer ist eine Realisierung als ASP-Modell, wobei die Anwendung auf dem eigenen Server gehostet wird und damit eine Abrechnungsmöglichkeit gegenüber den Endnutzern realisiert werden kann. Hier sollte eBay das Lizenzmodell so erweitern, dass alternativ auch eBay-Benutzer entsprechende Schlüssel erhalten können und damit die entstehenden Kosten in Rechnung gestellt bekommen.

Ausblick

Mit der geänderten Gebührenstruktur wird die Nutzung des eBay API durchaus erschwinglich und sicherlich werden mehr und mehr Anwender die Initiative ergreifen und sich stärker mit ihren Anwendungen in die eBay-Plattform integrieren wollen. Insbesondere die Integration von Warenwirtschaftssystemen und CRM-Systemen wird in nächster Zeit ein spannendes Thema werden. Neben der Kernkompetenz der Auktionen entwickelt sich eBay stark auch im Bereich des Festpreisgeschäfts und mit der Einführung einer Katalogfunktionalität in Bereichen, die wir vielleicht vor kurzem noch als eProcurement bezeichnet hätten.

Hervorragende Resonanz für eBay

Interview mit Mico Pütz, dem Leiter des Entwicklerprogramms bei eBay Deutschland. Wir hatten am Rande der eBayLive in Berlin die Gelegenheit zu einem Gespräch.

<img src="http://cdn.sandsmedia.com/ps/onlineartikel/pspic/picture_file//17/import3fc1da4cc5c20.tif<

PHP-Magazin: Herr Pütz, in den USA ist eBay schon seit Ende 2001 auf dem Markt. Wie ist die Resonanz hier in Deutschland? Mico Pütz: Das europäische Programm gibt es in seiner jetzigen Form seit Anfang des Jahres und stößt insbesondere in Deutschland auf eine hervorragende Resonanz. Mittlerweile beantworten sich die Entwickler viele Fragen auf dem deutschen Board schon selbst. Circa ein Drittel der Entwickler hat bisher die Zertifizierung durchlaufen und arbeitet damit aktiv auch auf dem Livesystem. Ungefähr drei Viertel nutzt dabei den Individual Tier. PM: Können Sie abschätzen, wie viele PHP-Entwickler mit dem eBay API arbeiten? Pütz: Von einigen hundert eingeschriebenen Entwicklern in Deutschland sind etwa ein gutes Drittel PHP-Entwickler. PM: Ein SDK gibt es bisher lediglich für .NET, gibt es Pläne, hier auch für die PHP-Gemeinde etwas Ähnliches anzubieten? Pütz: PHP ist im Freelancer-Bereich die bedeutendste Webtechnologie und damit natürlich auch für uns ein spannendes Thema. Wir denken zurzeit intensiv darüber nach und prüfen, ob wir selbst ein SDK für PHP entwickeln. Wahrscheinlich können wir schon in Kürze konkretere Aussagen hierzu machen. PM: Bei jeder Auktion wird doch eine Provision für eBay fällig, warum stellen Sie dann die Nutzung des API in Rechnung? Pütz: Das Einstellen von Artikeln ist generell kostenfrei und für individuelle Anwendungen mit einigen hundert Transaktionen pro Tag stellen wir ebenfalls keine Gebühren in Rechnung. Bei kommerziellen Anwendungen, die vielleicht von mehreren tausend Anwendern genutzt werden, brauchen wir zwingend einen Weg, die Entwickler zur Umsetzung von effizienten Verfahren anzuhalten. Das erreichen wir durch die aufrufbasierte Abrechnung. Wir arbeiten hier kostendeckend und ohne Gewinnabsichten; für einen kommerziellen Anwender fallen für die Abwicklung einer Transaktion Kosten von etwa einem Cent pro Artikel an. PM: International scheint sich eBay stark im Festpreissegment zu expandieren, wie sehen die Pläne hier bei uns aus? Pütz: Festpreisangebote sind seit März 2002 und Auktionen mit Sofort-Kaufen-Option seit Juni 2001 funktionaler Bestandteil des deutschen Online-Marktplatzes und finden große Akzeptanz. Letztendlich entscheiden natürlich unsere Nutzer über das Ausmaß der Verwendung. Beide Angebotsformate sind im Übrigen auch komplett durch das API abgepictureet, sodass es ohne weiteres möglich ist, den eBay-Verkaufskanal aus einem bestandsführenden System heraus mit Festpreisangeboten zu bestücken. PM: Welche Tendenzen sehen Sie für die Weiterentwicklung des Programms, welche Möglichkeiten wird es dort in Zukunft geben, insbesondere für Entwickler hier in Deutschland? Pütz: Wir haben hier das Potenzial sicherlich noch nicht annähernd ausgeschöpft. Die Integration der eBay-Plattform in standardisierten Schnittstellen (wie OpenTrans oder BMECat) oder auf der Basis von proprietären Systemen ist bis dato noch nicht vorhanden. Auch die Anbindung an XML-Datenbanken wie Tamino oder Oracle9i sind sicherlich spannende Themen. Letztlich bietet uns das XML-Format durch seine einfache Transformation ja einen Weg, die eBay-Plattform in bestehende Warenwirtschafts- oder Content-Management-Systeme zu integrieren. Ich denke, die eBay-Geschäftsprozesse stehen bald auch in BPML-modellierter Form in den IDEs zur Verfügung und ermöglichen dann die Integration und Interoperabilität einzelner Softwaremodule auf den verschiedenen Prozessstufen. PM: Vielen Dank für das Gespräch, Herr Pütz.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -