AMAZON API gibt Fehler bei XML Response

creativeheadz

Erfahrenes Mitglied
Hallo zusammen,

ich möchte folgende Klasse nutzen, um Daten eines Amazon Produktes auszulesen.

PHP:
class Amazon
{

	// public key
	var $publicKey = "xxxxxxxxxxxxxx";
	// private key
	var $privateKey = "xxxxxxxxxxxxx";
	// affiliate tag
	var $affiliateTag='XXX-21';
		
		/**
		*Get a signed URL
		*@param string $region used to define country
		*@param array $param used to build url
		*@return array $signature returns the signed string and its components
		*/
	public function generateSignature($param)
	{
		// url basics
		$signature['method']='GET';
		$signature['host']='ecs.amazonaws.'.$param['region'];
		$signature['uri']='/onca/xml';

	    // necessary parameters
		$param['Service'] = "AWSECommerceService";
	    $param['AWSAccessKeyId'] = $this->publicKey;
	    $param['Timestamp'] = gmdate("Y-m-d\TH:i:s\Z");
	    $param['Version'] = '2009-10-01';
		ksort($param);
	    foreach ($param as $key=>$value)
	    {
	        $key = str_replace("%7E", "~", rawurlencode($key));
	        $value = str_replace("%7E", "~", rawurlencode($value));
	        $queryParamsUrl[] = $key."=".$value;
	    }
		// glue all the  "params=value"'s with an ampersand
	    $signature['queryUrl']= implode("&", $queryParamsUrl);
		
	    // we'll use this string to make the signature
		$StringToSign = $signature['method']."\n".$signature['host']."\n".$signature['uri']."\n".$signature['queryUrl'];
	    // make signature
	    $signature['string'] = str_replace("%7E", "~", 
			rawurlencode(
				base64_encode(
					hash_hmac("sha256",$StringToSign,$this->privateKey,True
					)
				)
			)
		);
	    return $signature;
	}
		/**
		* Get signed url response
		* @param string $region
		* @param array $params
		* @return string $signedUrl a query url with signature
		*/
	public function getSignedUrl($params)
	{
		$signature=$this->generateSignature($params);

		return $signedUrl= "http://".$signature['host'].$signature['uri'].'?'.$signature['queryUrl'].'&Signature='.$signature['string'];
	}
}


$Amazon=new Amazon();

$parameters=array(
"region"=>"com",
"AssociateTag"=>'XXX-21',
'ResponseGroup'=>'Images',
"Operation"=>"ItemSearch",
"SearchIndex"=>"Books",
"Keywords"=>"harry potter"
);

$queryUrl=$Amazon->getSignedUrl($parameters);

echo $queryUrl;


die URL die dann erzeugt wird sieht so aus:

Code:
http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=XXX&AssociateTag=XXX-21&Keywords=harry%20potter&Operation=ItemSearch&ResponseGroup=Medium&SearchIndex=All&Service=AWSECommerceService&Timestamp=2013-12-11T15%3A31%3A08Z&Version=2009-10-01®ion=com&Signature=mjQRJbHObcbD4q%2FuwX8yxy%2Fdws5Vi0G4MKddelK0A1s%3D


Wenn ich dann eine Ausgabe abrufen will bekomme ich immer einen Fehler von AMAZON:

Code:
<?xml version="1.0"?>
<ErrorResponse><Error><Code>InternalError</Code><Message>We encountered an internal error. Please try again.</Message></Error><RequestId>1aab54ef-22c8-46e9-aef7-3698af7d96fe</RequestId></ErrorResponse>

Hatte jemand von euch schonmal diesen Fehler? bzw. kann mir jemand sagen was ich falsch mache?


Gruß

c
 
Internal error heißt ja eigentlich, dass Amazon grade nen Problem hat, oder?

AWS.InternalError

You will receive this error if Product Advertising API is unable to complete your request due to an internal problem or outage. For SOAP, this will be presented as a SOAP fault rather than an error.
http://docs.aws.amazon.com/AWSECommerceService/latest/DG/ErrorMessages.html

Ansonsten probier mal ne fertige Library. Vielleicht hast du irgendwas total vergeigt (ich hab keine Lust den code jetzt durchzuarbeiten. hab da schon zuviel zeit mit verschwendet mit der API)

https://github.com/Exeu/Amazon-ECS-PHP-Library
 
Zurück