3

我在使用带有 PHP 的亚马逊 MWS API 检索已处理提要文件的结果时遇到问题。准确地说,我正在使用 getFeedSubmissionResult 类。问题是,当我按照文档的指示使用 API 时,没有我可以访问的类读取的相关数据(或者看起来如此)。所以我的问题是:我如何检索亚马逊发回的原始 XML 文件并将其存储到我计算机上的文件中?

我一直在追溯 MWS 使用的代码,并试图找到他们从亚马逊提取 XML 文件的位置并对其进行解析以尝试将其保存到一个文件中,但没有成功。如果有人可以指导我解决此问题,我将不胜感激,如果没有,那么解决方法可能会更好。

所以这就是我一直在做的事情:

我使用了 MWS 示例中提供的 getFeedSubmissionResultSample.php。据说,这应该给我数据,告诉我处理了多少项目以及成功处理了多少项目。但事实并非如此。所以我尝试对响应变量进行 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),因为我已经使用亚马逊便笺簿完成了这项工作。

您的帮助将不胜感激!:)

问候, 迦勒

4

2 回答 2

8

我有同样的问题。问题是响应返回结果供您比较接收到的文件,以验证传输过程中没有损坏。要获得带有 Message 的 xml 响应,您应该将其保存到文件而不是 php://memory。所以下一个代码对我来说很好

$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 文件中找到的结果 对我有帮助

于 2013-08-14T14:31:44.517 回答
1

如果您不想使用文件。然后在你的 try 语句结束时。
$xml = stream_get_contents($request->getFeedSubmissionResult());

这会将 xml 数据放入 $xml

于 2015-03-04T03:49:35.793 回答