Запрос Amazon ItemSearch «Действителен», но результаты не возвращаются с помощью PHP SoapClient - PullRequest
1 голос
/ 09 февраля 2012

Я разместил это на форуме рекламы продуктов Amazon, но никто не отвечает, поэтому, возможно, кто-то здесь может мне помочь.

Я пытаюсь показать несколько элементов на основе ключевого слова, покаУ меня есть этот код, и когда он запускается, он говорит, что запрос действителен , но элементы не возвращаются, я пытаюсь использовать 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);

?>

А вот ответ, который я получаю по ключевому слову book :

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, поэтому я совершенно сбит с толку, почему я получаю что-то совершенно другое.

1 Ответ

2 голосов
/ 12 февраля 2012

Итак, очевидно, проблема заключалась в том, что вы должны указать SearchIndex, который не просто используется по умолчанию для All, или даже сказать, что он необходим, просто не возвращает никаких результатов.

Таким образом, запрос на замену выше:

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