creativeheadz
Erfahrenes Mitglied
Hallo zusammen,
ich möchte folgende Klasse nutzen, um Daten eines Amazon Produktes auszulesen.
die URL die dann erzeugt wird sieht so aus:
Wenn ich dann eine Ausgabe abrufen will bekomme ich immer einen Fehler von AMAZON:
Hatte jemand von euch schonmal diesen Fehler? bzw. kann mir jemand sagen was ich falsch mache?
Gruß
c
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