2013-06-18 112 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中