eBay per VBA steuern: Zugangsdaten holen

Möchtest Du den gesamten Artikel lesen? Und vielleicht sogar den Artikel im PDF-Format und die Beispieldateien herunterladen? Dann hole Dir den Artikel gleich hier - völlig kostenlos!

Im ersten Teil einer Artikelreihe zum Thema Steuerung von eBay mit VBA zeigen wir, wie man einen Entwickler-Account anlegt, eine neue Anwendung bei eBay erstellt, grundlegende Zugriffsdaten holt und die für die Authentifizierung im Kontext eines bestimmten Benutzerkontos notwendigen Informationen holt – hier speziell das Authentifizierungstoken. Damit schaffen wir die Basis, um per VBA auf die Rest API von eBay zuzugreifen. In weiteren Artikeln beschreiben wir den Zugriff und wie wir verschiedene Operationen wie das Anlegen von Angeboten realisieren können.

Um eBay mit VBA zu steuern, brauchen wir als Erstes ein Konto im ebay developers program. Um dorthin zu gelangen, reicht eine Websuche nach den Begriffen ebay developer.

Für die Registrierung werden die folgenden Informationen benötigt, die wir in ein Formular wie in Bild 1 eintragen: Benutzername, Kennwort, E-Mail-Adresse und Telefonnummer. Nachdem wir diese eingetragen und die Schaltfläche Join betätigt haben, landen wir auf der nächsten Seite im Registrierungsprozess.

Registrieren für das Developer-Program von eBay

Bild 1: Registrieren für das Developer-Program von eBay

Hier erhalten wir den Hinweis, dass eBay uns eine E-Mail zugesendet hat. Diese enthält einen Bestätigungslink, mit dem wir den Vorgang fortsetzen können.

Nachdem wir diesen betätigt haben, landen wir auf der Willkommen-Seite des Entwicklerprogramms und können uns dort mit unseren Daten anmelden (siehe Bild 2).

Anmelden beim Developer-Program von eBay

Bild 2: Anmelden beim Developer-Program von eBay

Die Freude währt in der Regel nur kurz, denn gegebenenfalls bekommen wir hier die Meldung, dass die Registrierung nun überprüft wird und in ca. 24 Stunden freigeschaltet wird.

Einen Tag später können wir uns dann ohne Probleme beim eBay-Entwicklerprogramm anmelden.

Erstellen einer neuen Anwendung

eBay macht es uns dann erst einmal einfach: Da wir das Entwickler-Konto gerade eröffnet haben und folglich noch keine Anwendungen hinzugefügt haben, ohne eine Anwendung aber der Developer-Account keinen Sinn macht, landen wir direkt auf der Seite zum Erstellen einer Anwendung.

Dies beginnt mit der Eingabe eines Anwendungstitels, der vor allem eine Bedingung erfüllen muss: eBay darf nicht im Namen vorkommen (siehe Bild 3).

Erstellen einer ersten Anwendung

Bild 3: Erstellen einer ersten Anwendung

Wir entscheiden uns für amvBay und noch während wir diesen Namen eingeben, erscheinen bereits verschiedene Links für weitere Möglichkeiten (siehe Bild 4). Diese sind aufgeteilt in Sandbox und Production. Was bedeutet das?

Noch während der Eingabe des Namens erscheinen die Optionen zum Erstellen von Keysets.

Bild 4: Noch während der Eingabe des Namens erscheinen die Optionen zum Erstellen von Keysets.

  • In der Sandbox können wir testen, ohne dass wir etwas an bestehenden Konten, Angeboten et cetera kaputtmachen.
  • Production heißt: Hier arbeiten wir mit echten Benutzern und Angeboten. Hier sollten wir keine Fehler mehr produzieren und beispielsweise beim Experimentieren mit der Löschen-Funktion auf Kundendaten losgehen.

Beide Settings sind gleich aufgebaut, für beide benötigen wir entsprechenden Daten für den Zugriff. Diese heißen in diesem Fall Keysets.

Wir können hier Keysets erstellen oder weitere Keysets anfragen. Was hat es damit auf sich? Wir klicken also erst einmal auf den Link Create a keyset unter Sandbox.

Daraufhin erscheint der Bereich Confirm the Primary Contact, wo wir weitere Daten wie Name, E-Mail und Telefonnummer eingeben beziehungsweise bestätigen (siehe Bild 5).

Eingabe weiterer Daten

Bild 5: Eingabe weiterer Daten

Ein Klick auf Continue to Create Keys lässt uns wieder zur aufrufenden Seite zurückkehren, wo wir nun allerdings einige neue Informationen vorfinden (siehe Bild 6).

Unser Keyset

Bild 6: Unser Keyset

Dabei handelt es sich um unser Keyset, mit dem wir nun fortfahren können:

  • App ID
  • Dev ID
  • Cert ID

Diese Informationen können wir nun bereits in einem VBA-Modul sichern, am einfachsten in Konstanten. Das sieht wie folgt aus:

Const cStrAppID As String = "AndrMinh-amvBay-xxx-xxxxxxxxx-3e3a632f"
Const cStrDevID As String = "e7df1909-ee64-xxxxxxxx-32138d2b1899"
Const cStrCertID As String = "SBX-4b5baea0d7a2-xxxx-xxxx-8644-6824"

Token holen

Damit haben wir allerdings noch nicht alles, was wir benötigen. Das Wichtigste ist das Authentifizierungstoken. Hier ist eine kurze Erklärung nötig:

Wir erstellen hier eine Anwendung, für die eigentlich zwei Konten erforderlich sind: das Entwicklerkonto, das wir soeben erstellt haben, sowie das eigentliche eBay-Konto.

Um eBay komplett fernsteuern zu können, müssen wir uns ein Authentifizierungstoken für unsere Anwendung im Kontext des eigentlichen Benutzers holen.

Damit können wir dann die Anwendung im Kontext des jeweiligen Benutzers verwenden.

Wir gehen an dieser Stelle davon aus, dass wir eine Anwendung für den Zugriff auf eBay erstellen, um diese beispielsweise in die Warenwirtschaft eines Kunden zu implementieren, damit dieser seine Produkte automatisiert bei eBay einstellen kann.

Nur wollen wir nun zunächst nicht im Kontext des echten Benutzers auf eBay zugreifen, sondern erst einmal die Sandbox nutzen. Da die Sandbox praktisch ein eigenes eBay zum Testen ist, können wir logischerweise dort auch nicht mit unserem normalen eBay-Konto arbeiten, sondern müssen uns ein neues Konto anlegen.

Dazu klicken wir erst einmal unter unserer App ID (Client ID) auf den Link Register a new Sandbox user (siehe Bild 7).

Aufruf der Registrierung eines Sandbox-Benutzers

Bild 7: Aufruf der Registrierung eines Sandbox-Benutzers

Neuen Sandbox-Benutzer anlegen

Das Anlegen des neuen Sandbox-Benutzers führen wir in dem Formular aus Bild 8 durch. Nach dem Registrieren können wir uns an der Sandbox anmelden.

Eingabe der Daten für einen Sandbox-Benutzer

Bild 8: Eingabe der Daten für einen Sandbox-Benutzer

Hier finden wir allerdings zunächst keine Angebote vor.

Token für diesen Benutzer holen

Nun wollen wir das Token holen, indem wir uns über unsere eBay-Anwendung mit den Daten unseres soeben erstellen Sandbox-Benutzers bei der Sandbox anmelden.

Dazu klicken wir im vorherigen Dialog auf Sign in to Sandbox (siehe Bild 9).

Anmeldung an der Sandbox

Bild 9: Anmeldung an der Sandbox

Damit erscheint nochmals ein Bereich, in dem wir unsere Adresse und weitere Daten eingeben müssen (siehe Bild 10).

Eingabe unserer Adressdaten für die Token-Generierung

Bild 10: Eingabe unserer Adressdaten für die Token-Generierung

Nun erscheint der Anmeldedialog von der eBay-Sandbox, wo wir uns nun mit den Daten unseres Sandbox-Benutzers anmelden (nicht mit dem Developer-Account!).

Schließlich erhalten wir eine Meldung, die uns als Sandbox-Benutzer darüber aufklärt, dass wir der App die Berechtigungen geben, unser Konto für verschiedene Aktionen auf der Sandbox von eBay zu nutzen. Im Anschluss erhielten wir jedoch eine Fehlermeldung (siehe Bild 11).

Fehlermeldung beim Versuch, das Token zu holen

Bild 11: Fehlermeldung beim Versuch, das Token zu holen

Bei unseren Recherchen zu diesem Artikel waren wir in der Folge nicht in der Lage, ein Authentifizierungstoken für die Sandbox zu holen, also haben wir es mit der Production-Version probiert.

Hier erschien beim Versuch, ein Keyset zu holen, zunächst die Meldung aus Bild 12.

Das Keyset ist aktuell deaktiviert.

Bild 12: Das Keyset ist aktuell deaktiviert.

Daraufhin haben wir uns, um weiterarbeiten zu können, für die Beantragung einer Ausnahme beworben (siehe Bild 13). Dazu haben wir unter Event Notification Delivery Method die Option Marketplace Account Deletion gewählt und Exempted from Marketplace Account Deletion aktiviert. Nach dem Absenden mit Submit wurde dies umgehend akzeptiert.

Optionen für eine Ausnahme

Bild 13: Optionen für eine Ausnahme

Danach haben wir im oberen Bereich der Webseite den Link Get OAuth Application Token vorgefunden (siehe Bild 14).

Link zum Holen des Authentifizierungstokens

Bild 14: Link zum Holen des Authentifizierungstokens

Danach mussten wir uns erneut authentifizieren, um das Token zu holen. Dazu haben wir diesmal nicht den Sandbox-Benutzer verwendet, den wir zuvor angelegt haben, sondern einen echten eBay-Benutzeraccount.

Nach der Authentifizierung und der Zustimmung, dass unsere eBay-Anwendung amvBay im Kontext unseres Benutzers auf eBay zugreifen darf, landen wir wieder auf der Token-Seite. Hier können wir nun erneut auf Get OAuth Application Token klicken und erhalten endlich das Token (siehe Bild 15), das wir in die Zwischenablage kopieren und in einer weiteren Konstanten in unserem VBA-Projekt speichern:

Das ersehnte OAuth Application Token

Bild 15: Das ersehnte OAuth Application Token

Const cStrUserToken As String = "v^1.1#i^1#p^1#I^3#r^..."

Das Token ist zeitlich begrenzt gültig, in diesem Fall 18 Monate. Du solltest dies, wenn Du eine eBay-Anwendung für einen Kunden programmierst, auf jeden Fall im Blick behalten und gegebenenfalls rechtzeitig für eine Aktualisierung des Tokens über den hier vorgestellten Weg sorgen.

Anwendungstoken holen

Das Benutzertoken können wir nutzen, um benutzerspezifische Aufrufe der Rest API zu authentifizieren. Es gibt jedoch auch einige Rest API-Befehle, die allgemein verfügbar sind und nicht im Kontext eines speziellen Benutzers stehen.

In diesem Fall können wir das Benutzertoken nicht verwenden, sondern wir benötigen ein Anwendungstoken. Das holen wir uns auf der gleichen Seite, auf der wir auch die Erstellung des Benutzertokens initiiert haben. Hier klicken wir nun im oberen Bereich auf Get OAuth Application Token (siehe Bild 16).

Ermitteln des Anwendungstokens

Bild 16: Ermitteln des Anwendungstokens

Nun öffnet sich ein Dialog namens OAuth Application Token, dessen Inhalt wir über die Schaltfläche Copy Token in die Zwischenablage kopieren können (siehe Bild 17).

Kopieren des Anwendungstokens

Bild 17: Kopieren des Anwendungstokens

Auch dieses Token wollen wir in einer Konstanten speichern, diesmal unter dem Namen cStrAppToken.

Das ist etwas komplizierter, denn eine Zeile zur Definition einer Konstanten kann nur 1.023 Zeichen aufnehmen, das Token hat allerdings eine Länge von über 1.900 Zeichen.

Am einfachsten kopierst Du es zunächst in eine Textdatei, schneidest dort die ersten 950 Zeichen aus und fügst sie der ersten Zeile der folgenden Anweisung hinzu. Den Rest trägst Du dann in die zweite Zeile ein, die Du mit dem Unterstrich und dem Und-Zeichen verbindest:

Const cStrAppToken As String = "v^1.1#i^1#r^0#p^1#..." _
     & "EAGuOQLyjgblGU8zkk+nJIBIAGIx8Vg4P9TJre...=="

Nachteil: Gültigkeitsdauer dieser Daten

Ein großer Nachteil, wenn wir die Daten so über die Benutzeroberfläche holen, ist die geringe Haltbarkeit:

  • Das Anwendungstoken ist für ca. zwei Stunden gültig.
  • Das Benutzertoken ist nur ca. eine Stunde gültig.
  • Ein Refresh-Token ist 18 Monate gültig und kann zum Erneuern des Benutzertokens verwendet werden.

Was bedeutet das für uns? Nach aktuellem Stand müssten wir alle zwei Stunden oder, wenn wir beispielsweise einmal am Tag auf eBay-Daten zugreifen wollen, immer neue Daten holen.

Da es auf Dauer viel Aufwand ist, sich immer in der Benutzeroberfläche der Entwicklerplattform von eBay einzuloggen, wollen wir diese Vorgänge möglichst per VBA steuern.

Wann brauche ich welches Token?

Die beiden Token haben unterschiedliche Ziele:

  • Mit dem Anwendungstoken (App Token) autentifizieren wir uns für allgemeine Funktionen, die auch dem normalen Benutzer ohne Anmeldung zur Verfügung stehen.
  • Mit dem Benutzertoken (User Access Token) können wir auf persönliche oder geschützte Daten im Namen eines eBay-Benutzers zugreifen. Deshalb ist dieses Token schwieriger zu erhalten.

Anwendungsbereiche für das Anwendungstoken

Mit dem Anwendungstoken können wir die folgenden Bereiche abfragen:

  • Browse API: Artikelsuche, Kategorien, Angebote ansehen
  • Buy Marketing API: Werbung, Deals, Sonderaktionen
  • Buy Recommendation API: Vorschläge für ähnliche Artikel
  • Taxonomy API: Kategorien, Aspekte, Filter

Anwendungsbereiche für das Benutzertoken

Das Benutzertoken benötigen wir für die folgenden Aktionen:

  • Artikel kaufen (Checkout): Nur mit Login des Käufers
  • Bestellungen abrufen: Du bekommst nur die Bestellungen eines eingeloggten Verkäufers
  • Listings verwalten (verkaufen): Inserate erstellen, beenden, ändern
  • Nachrichten abrufen oder senden: zum Beispiel Käuferkommunikation
  • Transaktionen, Bewertungen, Analytics: Zugriff auf verkaufsbezogene Metriken
  • Benutzerdaten abrufen (Name, Adresse, etc.): Zum Beispiel für Rechnungen, Versand

Anwendungstoken per VBA holen

Das Anwendungstoken können wir uns ohne irgendeine Interaktion mit der Benutzeroberfläche von eBay per VBA holen. Dazu benötigen wir die folgenden drei Informationen:

  • AppID: Wie oben in der Konstanten cStrAppID gespeichert, wird für den Parameter strClientID übergeben.
  • CertID: Wie oben in der Konstanten cStrCertID gespeichert, wird für den Parameter strClientSecret übergeben.
  • Api-Scope: Eine neue Konstante namens cStrAPIScope, die wir wie folgt anlegen:
Public Const cStrAPIScope As String = "https://api.ebay.com/oauth/api_scope"

Diese drei Informationen übergeben wir an die Funktion GetEbayAppToken aus Listing 1. Diese deklariert einige Variablen, für die wir auch noch Verweise zum VBA-Projekt hinzufügen müssen. Außerdem verwenden wir hier Funktionen, die wir direkt per VBA-Modul zum VBA-Projekt hinzufügen können. Zusammengefasst benötigen wir:

Function GetEbayAppToken(strClientId As String, strClientSecret As String, strScope As String) As String
     Dim objXMLHTTP As MSXML2.XMLHTTP60
     Dim strTokenURL As String
     Dim strAuthHeader As String
     Dim strPostData As String
     Dim strResponse As String
     Dim objJSON As Object
     strAuthHeader = "Basic " & Base64Encode(strClientId & ":" & strClientSecret)
     strTokenURL = "https://api.ebay.com/identity/v1/oauth2/token"
     strPostData = "grant_type=client_credentials&scope=" & strScope
     Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
     With objXMLHTTP
         .Open "POST", strTokenURL, False
         .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
         .setRequestHeader "Authorization", strAuthHeader
         .send strPostData
         strResponse = .responseText
     End With
     Set objJSON = ParseJson(strResponse)
     Debug.Print GetJSONDOM(strResponse, True)
     GetEbayAppToken = objJSON.Item("access_token")
End Function

Listing 1: Funktion, um das Anwendungstoken zu holen

  • Verweis auf die Bibliothek Microsoft XML, v6.0
  • Verweis auf die Bibliothek Microsoft Scripting Runtime
  • Modul mdlJSON
  • Modul mdlJSONDOM

Die Funktion stellt die Zeichenfolge für die Authentifizierung aus dem Wort Basic und dem Base64-verschlüsselten Wert aus ClientID und ClientSecret zusammen – getrennt durch einen Doppelpunkt.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar