2012-02-09 18 views
1

我發佈了這個在亞馬遜產品廣告論壇,但沒有人迴應,所以也許有人可以幫助我。亞馬遜物品搜索請求是「有效」但沒有結果返回使用PHP SoapClient

我試圖得到一些項目,顯示基於關鍵字,到目前爲止,我有這樣的代碼,它運行時,它說,該請求是有效但目前還沒有項目回來,我想使用PHP SoapClient。有人能指出我做錯了什麼嗎?

這裏是我的代碼:

<?php 

define("ACCESS_KEY",'###'); 
define("SECRET_KEY",'###'); 
define("ASSOCIATE_TAG",'###'); 

$timeStamp = gmdate("Y-m-d\TH:i:s\Z"); 
$function = "ItemSearch"; 
$string = $function.$timeStamp; 

$signature = base64_encode(hash_hmac("sha256", $string, SECRET_KEY, True)); 

$client = new SoapClient('http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl'); 
//var_dump($client->__getFunctions()); 

$params = array(
    "Operation"=>$function, 
    "AssociateTag"=>ASSOCIATE_TAG, 
    "Request"=>array("Keywords"=>"book","ResponseGroup"=>"Medium") 
); 

$header_arr = array(); 
$header_arr[] = new SoapHeader('http://security.amazonaws.com/doc/2007-01-01/', 'AWSAccessKeyId', ACCESS_KEY); 
$header_arr[] = new SoapHeader('http://security.amazonaws.com/doc/2007-01-01/', 'Timestamp', $timeStamp); 
$header_arr[] = new SoapHeader('http://security.amazonaws.com/doc/2007-01-01/', 'Signature', $signature); 
$client->__setSoapHeaders($header_arr); 

$result=$client->__soapCall($function, array($params)); 
var_dump($result); 

?> 

這裏是我得到的關鍵字響應:

object(stdClass)#5 (2) { 
    ["OperationRequest"]=> 
    object(stdClass)#6 (4) { 
    ["HTTPHeaders"]=> 
    object(stdClass)#7 (1) { 
     ["Header"]=> 
     object(stdClass)#8 (2) { 
     ["Name"]=> 
     string(9) "UserAgent" 
     ["Value"]=> 
     string(26) "PHP-SOAP/5.3.6-13ubuntu3.3" 
     } 
    } 
    ["RequestId"]=> 
    string(36) "###" 
    ["Arguments"]=> 
    object(stdClass)#9 (1) { 
     ["Argument"]=> 
     object(stdClass)#10 (2) { 
     ["Name"]=> 
     string(7) "Service" 
     ["Value"]=> 
     string(19) "AWSECommerceService" 
     } 
    } 
    ["RequestProcessingTime"]=> 
    float(0.085933) 
    } 
    ["Items"]=> 
    object(stdClass)#11 (1) { 
    ["Request"]=> 
    object(stdClass)#12 (2) { 
     ["IsValid"]=> 
     string(4) "True" 
     ["ItemSearchRequest"]=> 
     object(stdClass)#13 (2) { 
     ["Keywords"]=> 
     string(4) "book" 
     ["ResponseGroup"]=> 
     string(6) "Medium" 
     } 
    } 
    } 
} 

正如你可以看到有在響應中沒有實際的項目。從文檔看來,響應中應該有某種TotalResults屬性,所以我非常困惑爲什麼我會得到完全不同的東西。

回答

2

所以顯然問題是你必須指定一個SearchIndex,它不僅僅默認爲All,或者甚至告訴你它是必需的,它根本不會返回任何結果。

所以上述替換請求:

$params = array(
    "Operation"=>$function, 
    "AssociateTag"=>ASSOCIATE_TAG, 
    "Request"=>array("SearchIndex"=>"All","Keywords"=>"book","ResponseGroup"=>"Small") 
); 
相關問題