Dieser Blog Post ist Teil der Reihe Produkte bei eBay listen.
4.1. Jobs abbrechen
Es kann immer mal vorkommen, dass es bei der Feed-Erstellung Fehler gibt. Dann wird ggf. von large-merchant-services/02-add-fixed-price-item.php ein Job erstellt. Diesen muss man erst abbrechen um einen neuen Job derselben Art zu erstellen. Dazu braucht man die jobID. Normalerweise wird diese beim Erstellen des Jobs mit angezeigt. Sollte man sie aus irgendeinem Grund nicht zur Verfügung haben, kann man sie aber auch mit large-merchant-services/01-get-jobs.php erfragen. Da hier aber alle Jobs, die jemals ausgeführt wurden, angezeigt werden, muss man noch ein paar kleine Änderungen vornehmen. Als erstes sollte man aber wie auch in Teil 3 sicherstellen, dass man auf der richtigen Plattform arbeitet (hier: Sandbox):
'authToken' => $config['sandbox']['userToken'],
'sandbox' => true
Weiter unten, in der letzten if-Abfrage, sollte man die folgende Line ändern:
$upTo = min(count($response->jobProfile), 500);
Das sollte erstmal reichen. Außerdem kann folgende Zeile hinzufügen
$job = $response->jobProfile[$x]; // alte Zeile (Z. 89 bei mir)
if ($job->jobStatus != "Completed") { // das hier einfügen
...
} // if-Abfrage weiter unten schließen
Jetzt bekommt man nur die Jobs, die noch nicht fertig gestellt sind. Allerdings sind hier auch die Abgebrochenen dabei, also könnte man auch ein != „Aborted“ hinzufügen.
Hat man nun die jobID, kann man die Vorlage large-merchant-services/01-get-jobs.php ein bisschen abändern. Ich habe die Datei large-merchant-services/04-abort-job.php genannt. Dafür muss in Zeile 58 den richtigen Request und die jobID eingetragen.
$request = new Types\AbortJobRequest(array('jobId' => '4711'));
Eine Zeile darunter:
$response = $service->abortJob($request);
Sollte man das öfter brauchen, sollte es auch nicht allzu schwer sein, die jobID aus den Parametern zu ziehen.
4.2. Preise und Verfügbarkeit aktualisieren
Wie viele andere Marktplätze, gibt eBay auch die Möglichkeit mit einem reduzierten Feed für zuvor gelistete Produkte die Verfügbarkeit und Preise zu updaten. Eine genaue Erklärung der einzelnen Tags findet sich im ersten Teil. Der reduzierte Feed folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8"?>
<BulkDataExchangeRequests>
<Header>
<Version>669</Version>
<SiteID>77</SiteID>
</Header>
<ReviseFixedPriceItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<ErrorLanguage>de_DE</ErrorLanguage>
<WarningLevel>Low</WarningLevel>
<Version>619</Version>
Jetzt kommen die Informationen das Item, also der Eltern-/Parent-Artikel
<Item>
<SKU>26754</SKU>
<InventoryTrackingMethod>SKU</InventoryTrackingMethod>
Mehr ist nicht von nöten, da die Verfügbarkeiten und Preise ja auf Variationsebene festgelegt sind.
<Variations>
<Variation>
<SKU>4711</SKU>
<Quantity>23</Quantity>
<StartPrice>12.34</StartPrice>
</Variation>
<Variation>
<SKU>4712</SKU>
<Quantity>42</Quantity>
<StartPrice>56.78</StartPrice>
</Variation>
... <!-- mehr Variationen hier -->
</Variations>
</Item>
</ReviseFixedPriceItemRequest>
</BulkDataExchangeRequests>
Das war es auch schon. Für das Updaten der Angebote (revise) gibt es noch keine Vorlage von dts. Allerdings kann man das Beispiel für AddFixedPriceItem mit wenigen Änderungen auch dafür benutzen. In Zeile 75 wird statt AddFixedPriceItem einfach ReviseFixedPriceItem eingesetzt:
$createUploadJobRequest->uploadJobType = 'ReviseFixedPriceItem';
Außerdem ändern sich natürlich noch die Dateinamen der hochzuladenen Datei und der Antwort von eBay:
$uploadFileRequest->attachment(file_get_contents(__DIR__.'/ReviseFixedPriceItem.xml.gz'));
...
$tempFilename = tempnam(sys_get_temp_dir(), 'revise-fixed-price-item-responses-').'.zip';
Natürlich kann man auch jede beliebige Änderung über ReviseFixedPriceItem vornehmen. Allerdings funktioniert alles außer Verfügbarkeit und Preis nur, solange noch keine Variation des Artikels gekauft wurde. Manchmal kann es auch gut sein, den Artikel einfach ganz zu löschen und noch einmal neu hochzuladen (Achtung: in Production kann das Geld kosten!). Dafür braucht man den folgenden API Call.
4.3. EndFixedPriceItem
Möchte man ein Angebot komplett löschen, kann man einen einfachen Feed für diese Items schreiben (für Varianten reicht es die Quantity auf 0 zu setzen). Ist bei allen Varianten die Quantity auf 0, wird der Artikel automatisch entfernt (und muss ggf. mit kostenpflichtig wieder erstellt werden), außer man hat beim Einstellen, wie in Teil 1 erwähnt, die Option OutOfStockControl gesetzt. In diesem Fall wird der Artikel bloß ausgeblendet. Die SKU ist hier dementsprechend die Eltern-/Parent-SKU. Der Feed sieht wie folgt aus:
<?xml version="1.0" encoding="utf-8"?>
<BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents">
<Header>
<Version>659</Version>
<SiteID>77</SiteID>
</Header>
<EndFixedPriceItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<EndingReason>NotAvailable</EndingReason>
<SKU>4711</SKU>
<ErrorLanguage>de_DE</ErrorLanguage>
<WarningLevel>High</WarningLevel>
<Version>859</Version>
</EndFixedPriceItemRequest>
...
<!-- Mehr EndFixedPriceItemRequests -->
</BulkDataExchangeRequests >
Das Prinzip ist dasselbe wie bei AddFixedPriceItem und ReviseFixedPriceItem: einfach die Strings im Quellcode ändern und man kann die Datei auch für EndFixedPriceItem benutzen.