2013-06-18 2 views
2

У меня возникла проблема с получением результатов обработанного файла фида с использованием API Amazon MWS с PHP. Если честно, я использую класс getFeedSubmissionResult. Проблема в том, что, когда я использую API, как указано в документации, нет соответствующих данных, которые читаются классом, к которому я могу получить доступ (или, как кажется). Поэтому мой вопрос: как я могу получить необработанный XML-файл, который amazon отправляет обратно и сохраняет его в файл на моем компьютере?Amazon MWS API w/PHP: альтернатива getFeedSubmissionResult

Я исправляю код, используемый MWS, и пытаюсь найти, где они тянут в XML-файл с amazon, и проанализировать его, чтобы попытаться сохранить его в файл без везения. Я был бы очень признателен, если бы кто-то мог направить меня на исправление, а если нет, то, возможно, работа может быть лучше.

Так это то, что я делал:

Я использовал getFeedSubmissionResultSample.php представлены в образцах MWS. Предположительно, это должно дать мне данные, которые сообщают мне, сколько элементов было обработано и сколько обработанных элементов были успешными. Но это не так. Так что я пытался сделать print_r переменной отклика:

function invokeGetFeedSubmissionResult(MarketplaceWebService_Interface $service,$request) { 
    try { 
      $response = $service->getFeedSubmissionResult($request); 
      echo "<br />Var dump here: <pre>"; 
      print_r($response); 
      echo ("<pre>Service Response\n"); 
      echo ("=============================================================================\n"); 

      echo("  GetFeedSubmissionResultResponse\n"); 
      if ($response->isSetGetFeedSubmissionResultResult()) { 
       $getFeedSubmissionResultResult = $response->getGetFeedSubmissionResultResult(); 
       echo ("   GetFeedSubmissionResult\n"); 
       if ($getFeedSubmissionResultResult->isSetContentMd5()) { 
       echo ("    ContentMd5\n"); 
       echo ("    " . $getFeedSubmissionResultResult->getContentMd5() . "\n"); 
       } 
      } 
      if ($response->isSetResponseMetadata()) { 
       echo("   ResponseMetadata\n"); 
       $responseMetadata = $response->getResponseMetadata(); 
       if ($responseMetadata->isSetRequestId()) 
       { 
        echo("    RequestId\n"); 
        echo("     " . $responseMetadata->getRequestId() . "\n"); 
       } 
      } 

      echo("   ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n"); 
} catch (MarketplaceWebService_Exception $ex) { 
    echo("Caught Exception: " . $ex->getMessage() . "\n"); 
    echo("Response Status Code: " . $ex->getStatusCode() . "\n"); 
    echo("Error Code: " . $ex->getErrorCode() . "\n"); 
    echo("Error Type: " . $ex->getErrorType() . "\n"); 
    echo("Request ID: " . $ex->getRequestId() . "\n"); 
    echo("XML: " . $ex->getXML() . "\n"); 
    echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n"); 
} 
} 

И выход дает мне это:

Service Response

GetFeedSubmissionResultResponse 
     GetFeedSubmissionResult 
      ContentMd5 
      G5Sw+2ooONEZU1iQoqdEOQ== 
     ResponseMetadata 
      RequestId 
       f9d4be45-6710-42eb-850e-f437224f9938 
     ResponseHeaderMetadata: RequestId: f9d4be45-6710-42eb-850e-f437224f9938, ResponseContext: EM/RH7RHQhLSc47Tj2a2Uv2CGKEfvxaKOijjcaKeoh8dGISci3yqo9OHZs7dpLDIszJVz4Jt4z8=,9SYUaktMzcOG6UyuyhXu/kJPl0gpLeenslL2rkugDLhDYftMleRx1XIexbVWNxuYl7cO6901Foiv Kp7hvaLeAQ==, Timestamp: 2013-06-18T07:29:37.393Z 

Я опустил результаты var_dump, потому что я не знайте, может ли это быть проблемой безопасности с моей стороны. Но в любом случае var_dump не предоставил никаких данных, к которым я мог бы получить доступ. Я также проследил код, где классы и их методы, чтобы увидеть, могу ли я получить к нему доступ оттуда, но вышел с пустыми руками.

Обратите внимание, что у меня есть правильные параметры для вызова результатов (т. Е. FeedSubmissionId), потому что я сделал это с помощью амазонной царапины.

Ваша помощь будет принята с благодарностью! :)

С уважением, Халев

ответ

7

У меня была такая же проблема. Проблема заключается в том, что ответ возвращает результат, чтобы вы могли сравнить полученный файл с целью проверки отсутствия коррупции во время передачи. Чтобы получить ответ xml с сообщением, вы должны сохранить его в файл, а не в память php: //. Так что следующий код работает для меня отлично

$filename = __DIR__.'/file.xml'; 
$handle = fopen($filename, 'w+'); 
$request = new MarketplaceWebService_Model_GetFeedSubmissionResultRequest(); 
$request->setMerchant(MERCHANT_ID); 
$request->setFeedSubmissionId(ID_TO_CHANGE); 
$request->setFeedSubmissionResult($handle); 


try { 
    $response = $service->getFeedSubmissionResult($request); 
    fclose($handle); 

    echo ("Service Response\n"); 
    echo ("=============================================================================\n"); 

    echo("  GetFeedSubmissionResultResponse\n"); 
    if ($response->isSetGetFeedSubmissionResultResult()) { 
     $getFeedSubmissionResultResult = $response->getGetFeedSubmissionResultResult(); 
     echo ("   GetFeedSubmissionResult"); 

     if ($getFeedSubmissionResultResult->isSetContentMd5()) { 
      echo ("    ContentMd5"); 
      echo ("    " . $getFeedSubmissionResultResult->getContentMd5() . "\n"); 
     } 
    } 
    if ($response->isSetResponseMetadata()) { 
     echo("   ResponseMetadata\n"); 
     $responseMetadata = $response->getResponseMetadata(); 
     if ($responseMetadata->isSetRequestId()) 
     { 
      echo("    RequestId\n"); 
      echo("     " . $responseMetadata->getRequestId() . "\n"); 
     } 
    } 

    echo("   ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n"); 
} catch (MarketplaceWebService_Exception $ex) { 
    echo("Caught Exception: " . $ex->getMessage() . "\n"); 
    echo("Response Status Code: " . $ex->getStatusCode() . "\n"); 
    echo("Error Code: " . $ex->getErrorCode() . "\n"); 
    echo("Error Type: " . $ex->getErrorType() . "\n"); 
    echo("Request ID: " . $ex->getRequestId() . "\n"); 
    echo("XML: " . $ex->getXML() . "\n"); 
    echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n"); 
} 

результат, который вы можете найти в файле ./file.xml this помог мне

+0

Ничего себе! Это прекрасно работает! :) Это невероятно! Спасибо огромное! Просто разочаровывает, что нет никакой документации, чтобы лучше объяснить, как добиться результата. Это даже не в руководстве MWS от Amazon. Еще раз спасибо! – Caleb

+0

Я согласен с тобой, что это было слишком сложно для меня :), поэтому я разместил его. – 1nstinct

+0

, и я все время искал MWS! haha, Спасибо за помощь снова! ваш рейтинг репутации должен быть на 100% выше!:) – Caleb

1

Если вы не хотите использовать файл. Затем в конце вашего утверждения try.
$ xml = stream_get_contents ($ request-> getFeedSubmissionResult());

Это будет помещать данные xml в $ xml

Смежные вопросы