2017-04-24 69 views
0

我正在嘗試開發使用ListMatchingProducts方法的應用程序。亞馬遜MWS PHP客戶端庫似乎不完整

最終結果將是一個應用程序,該應用程序搜索已在內部庫存數據庫中的給定產品,並將結果呈現給用戶,以便他們可以選擇哪個Amazon產品與其數據庫中的產品是否匹配。

我找到的PHP客戶端庫鏈接到here

我已經編輯樣本/ .config.inc.php正確(我已刪除的評論和節錄敏感信息):

define('AWS_ACCESS_KEY_ID', '/*REDACTED BUT SET CORRECTLY*/'); 
define('AWS_SECRET_ACCESS_KEY', '/*REDACTED BUT SET CORRECTLY*/'); 
define('APPLICATION_NAME', 'STES_MWS_STOCK_SYNC_APP'); 
define('APPLICATION_VERSION', '0.1'); 
define ('MERCHANT_ID', '/*REDACTED BUT SET CORRECTLY*/'); 
define ('MARKETPLACE_ID', 'A1F83G8C2ARO7P'); // Marketplace ID for the UK 

我也未註釋的相應行中的樣品/ ListMatchingProductsSample.php:

$serviceUrl = "https://mws-eu.amazonservices.com/Products/2011-10-01"; 

執行這個腳本,不過,yeilds以下消息(我節錄一些XML響應):

Caught Exception: Required parameter MarketplaceId not found 
Response Status Code: 400 
Error Code: MissingParameter 
Error Type: Sender 
Request ID: /*REDACTED UUID-LIKE STRING*/ 
XML: <?xml version="1.0"?> 
<ErrorResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"><Error><Type>Sender</Type><Code>MissingParameter</Code><Message>Required parameter MarketplaceId not found</Message><Detail/></Error><RequestID>/*REDACTED UUID-LIKE STRING*/</RequestID></ErrorResponse> 
ResponseHeaderMetadata: RequestId: /*REDACTED UUID-LIKE STRING*/, ResponseContext: /*REDACTED LONG STRING*/, Timestamp: 2017-04-24T13:25:33.533Z, Quota Max: 719.0, Quota Remaining: 719.0, Quota Resets At: 2017-04-24T14:03:00.000Z 

由於這個客戶端庫自2011年以來一直存在,我發現很難相信這實際上是代碼中的錯誤代碼,但我似乎無法找到我出錯的地方;通過代碼掃描我無法找到MARKETPLACE_ID常量定義Samples/.config.inc.php

在我寫我自己的客戶端庫(我希望避免這樣一個簡單的應用程序)之前,我想知道:

  • 有沒有其他人遇到過這個問題,並修復它(如果是這樣,如何)?
  • 有沒有更新版本的圖書館我找不到?
  • 任何人都可以建議一個替代圖書館,如果這一個真的被打破?

- 編輯 -

爲了完整起見,這裏是我試圖運行代碼 - 示例代碼 - 零下評論:

require_once('.config.inc.php'); 
$serviceUrl = "https://mws-eu.amazonservices.com/Products/2011-10-01"; 
$config = array (
    'ServiceURL' => $serviceUrl, 
    'ProxyHost' => null, 
    'ProxyPort' => -1, 
    'ProxyUsername' => null, 
    'ProxyPassword' => null, 
    'MaxErrorRetry' => 3, 
); 
$service = new MarketplaceWebServiceProducts_Client(
     AWS_ACCESS_KEY_ID, 
     AWS_SECRET_ACCESS_KEY, 
     APPLICATION_NAME, 
     APPLICATION_VERSION, 
     $config); 
$request = new MarketplaceWebServiceProducts_Model_ListMatchingProductsRequest(); 
$request->setSellerId(MERCHANT_ID); 
invokeListMatchingProducts($service, $request); 
function invokeListMatchingProducts(MarketplaceWebServiceProducts_Interface $service, $request) 
    { 
     try { 
     $response = $service->ListMatchingProducts($request); 

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

     $dom = new DOMDocument(); 
     $dom->loadXML($response->toXML()); 
     $dom->preserveWhiteSpace = false; 
     $dom->formatOutput = true; 
     echo $dom->saveXML(); 
     echo("ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n"); 

    } catch (MarketplaceWebServiceProducts_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"); 
    } 
    } 
+1

也許你應該提供你的代碼來展示你如何使用SDK? –

+0

謝謝 - 我已經添加了它,儘管我不確定它是否提供了有用的信息。 – SteJ

+0

坦率地說,好像「樣本」有點不起眼。看看代碼,看起來您可能需要在構造函數中設置關聯數組中的marketplaceId,或者您可以將它設置爲屬性。 –

回答

2

坦率地說,好像在「樣本」有點尷尬。

看看代碼,看起來您可能需要手動設置marketplaceId,無論是通過關聯數組構造還是作爲setter方法調用。

例如 $request->setMarketplaceId(MARKETPLACE_ID)

+1

我在'$ request-> setSellerId(MERCHANT_ID);'下面加了這個,並且還加了' $ request-> setQuery(「query string」);' – SteJ