2013-06-18 117 views
2

我在使用亚马逊MWS API检索经过处理的订阅源文件的结果时遇到问题。我正在使用getFeedSubmissionResult类。问题是,当我按照文档的指示使用API​​时,没有相关的数据可以被我可以访问的类读取(或者看起来似乎)。所以我的问题是:如何检索亚马逊发回的原始XML文件并将其存储到我的计算机上的文件中?亚马逊MWS API w/PHP:替代getFeedSubmissionResult

我一直在回溯MWS使用的代码,并试图找到他们从亚马逊拉到XML文件的位置,并解析它以尝试将它保存到文件中,但没有运气。如果有人能指导我解决这个问题,我会深表谢意,如果不是的话,那么也许工作可能会更好。

因此,这是我一直在做:

我用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),因为我已经使用亚马逊便笺本进行了此操作。

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

问候, 迦勒

回答

7

我有同样的问题。问题是,响应返回结果,以便比较接收到的文件,以便在传输过程中验证是否有损坏。要使用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文件 this找到的结果帮我

+0

哇!这完美的作品! :) 这难以置信!非常感谢!令人沮丧的是,没有文档可以更好地解释如何获得结果。这甚至不在亚马逊的MWS手册中。再次感谢! – Caleb

+0

我同意你的观点,那对我来说太难了:)这就是我发布它的原因。 – 1nstinct

+0

我一直拼错MWS!哈哈,再次感谢您的帮助!你的声望得分应该被撞到100!:) – Caleb

1

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

这会将xml数据放入$ xml中