Amazon MWS API с PHP: альтернатива getFeedSubmissionResult


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

Я прослеживал код, используемый 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");
 }
}

И результат дает мне следующее:

Ответ службы

    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), потому что я сделал это с помощью блокнота amazon.

Мы будем очень признательны за вашу помощь!:)

С уважением, Калеб

Author: PaulG, 2013-06-18

2 answers

У меня была та же проблема. Проблема в том, что ответ возвращает результат, с которым вы можете сравнить полученный файл, чтобы убедиться в отсутствии повреждений во время передачи. Чтобы получить 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 файл это помогло мне

 7
Author: 1nstinct, 2014-02-26 08:10:34

Если вы не хотите использовать файл. Затем в конце вашего заявления о попытке.
$xml =поток_гет_контенты($запрос->getfeedsubmissionresult());

Это поместит xml-данные в $xml

 1
Author: mgwalk, 2015-03-04 03:49:35