Kategorien
Amazon MWS PHP

Amazon API Migration: SOAP/AIM Migration nach Amazon MWS

Wer die Amazon API nutzt um seine Artikel zu verkaufen, der muss diese nach Amazon MWS migrieren, weil am 8. Oktober 2012 die AIM- und SOAP-Dienste heruntergefahren werden. Bis dahin gibt es eine Übergangsfrist, die gilt, wenn die API  im Zeitraum vom 9.9.2011 und 9.10.2011 benutzt wurde.

Den offiziellen Amazon MWS Developer Guide über die Amazon API gibt es hier.

Die Anmeldung und Aktivierung von MWS für Europa kann hier durchgeführt werden. (Amerika hier)

Das Request Limit System von Amazon MWS

Wieviele Requests man machen kann bei Amazon pro Stunde hängt von 3 Faktoren ab (siehe Amazon MWS Developer Guide S.10):

  1. Request Quota: Wie viele Requests können zur selben Zeit gesendet werden ohne Verzögerung. Sie steigt an entsprechend der Restore Rate und sinkt mit jedem Request wieder.
  2. Restore Rate/Recovery Rate: Wie schnell steigt die Request Quotawieder an.
  3. Maximum Request Quota: Wie groß kann die Rquest Quota maximal werden (das Guthaben an Requests).

Das absolute stündliche Limit liegt bei 10000 Requestspro Stunde pro Account. Eine Liste der Request Limits ist hier zu finden.

Bsp:

Ein RequestReport (Amazon Report abholen) hat

Maximum Request Quota:15

Restore Rate: 1 pro Minute

Wenn man mit einem mal 20 Reports abholen will, kann man erst 15 abrufen, dann 5 Minuten warten und dann die restlichen 5 abrufen, weil die Restore Rate in den 5 Minuten wieder 5 Reports möglich gemacht hat.

 

PHP Bibliothek

Die praktische Bibliothek für PHP von Amazon u.a. macht die Migration einfach. Im Ordner Sample befindet sich Beispielcode, mit dem bspw. Reports abgeholt und werden können. Dazu müssen in den Beispielen ein paar Zeilen entkommentiert werden und die .config-Datei mit den Account Einstellungen aktualisiert werden.

Reports abholen mit MWS

Die Vorgehensweise zum Abholen von Reports von Amazon ist in 3 Schritte unterteilt:

  1. Einen Report Request senden mit RequestReport. Damit wird ein Auftrag zur Generierung eines Reports gesendet. Die Fertigstellung des Reports durch Amazon erfolgt in unbestimmter Zeit danach, d.h. es muss gewartet werden oder das Ergebnis per Cronjob später  abgeholt werden.
  2. Status Überwachung durch GetReportRequestList. Damit kann der Status und die ReportRequestId des Reports bestimmt werden. Wenn der Report auf Status  _DONE_ gesetzt ist, kann dieser abgeholt werden und er erhält eine GeneratedReportId.
  3. Download des Reports mit GetReport mit Hilfe der GeneratedReportId.

Eine Übersicht der möglichen Funktionen gibt es im Developer Guide S.96 ff.(Feed Types, Report Types).

Artikel aus dem Sortiment löschen

Dazu sind noch mehr Schritte nötig:)

  1. SubmitFeed mit Type _POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_ und zu löschende Daten anhängen, es wird eine FeedProcessingId zurückgeliefert
  2. Mit Hilfe dieser FeedProcessingId kann der Status der Bearbeitung mit GetFeedSubmissionList abgefragt werden.
  3. Wenn Amazon mit dem bearbeiten fertig ist, kann das Ergebnis mit GetFeedSubmissionResult abgeholt werden.
  4. Wenn keine Fehler in dem Report sind, ist alles ok, ansonsten Korrektur und noch mal von vorne.

Debugging  von Requests – Caught Exception: Internal Error Response Status Code: 0 – und jetzt?

Auch Amazon hat aus Sicherheitsgründen keine ordentlichen Fehlermeldungen, wenn der Request nicht richtig gesendet wurde. Um eine Fehlermeldung zu erhalten, die brauchbar ist, also das Gegenteil von:

Caught Exception: Internal Error Response Status Code: 0

muss man diesem genialen Tipp folgen. Zusammengefasst sollte dieser Code eingefügt werden und die Debug-Url im Browser aufgerufen werden:

  private function performRequest($action, array $converted, $dataHandle = null, $contentMd5 = null) {

    $curlOptions = $this->configureCurlOptions($action, $converted, $dataHandle, $contentMd5);

    //if (is_null($curlOptions[CURLOPT_RETURNTRANSFER]) || !$curlOptions[CURLOPT_RETURNTRANSFER]) {
        $curlOptions[CURLOPT_RETURNTRANSFER] = true;
        $curlOptions[CURLOPT_SSL_VERIFYPEER] = false;
        $curlOptions[CURLOPT_VERBOSE] = true;
    //}
    $url = $curlOptions['10002']."?".$curlOptions['10015'];
    print_r("DEBUG-URL: <a href='$url'>Link</a><br>");

Damit das funktioniert muss unbedingt darauf geachtet werden die IF-Schleife auch auszukommentieren, dann läuft das System auch lokal unter localhost.

Wenn man Probleme hat kann man sich immer an das Forum Amazon Seller Community wenden.