Php Amazon Web服务签名错误 “项目搜索”,“服务”=>“AWSECommerceService”, 'AWSAccessKeyId'=>$AWS\u访问\u密钥\u ID,'AssociateTag'=>“AssociateTag”, “版本”=>“2011-08-01”、“可用性”=>“可用性”、“条件”=>“全部”, 'ItemPage'=>“1”、'ResponseGroup'=>“图像、ItemAttributes、编辑评论”, “关键词”=>“亚马逊”); //添加时间戳 $url_params['Timestamp']=gmdate(“Y-m-d\TH:i:s.\\0\\0\\Z”,time()); //对URL参数进行排序 $url_parts=array(); foreach(数组_键($url_参数)作为$key) $url\u parts[]=$key.“=”$url\u参数[$key]; 排序($url\u部分); //构造要签名的字符串 $string_to_sign=“GET\webservices.amazon.com\n/onca/xml?\n”。内爆(&),$url_部分); $string_to_sign=str_replace('+','%20',$string_to_sign); $string_to_sign=str_replace(“:”、“%3A”、$string_to_sign); $string_to_sign=str_replace(“;”,urlencode(“;”),$string_to_sign); //签署请求 $signature=hash_hmac(“sha256”,$string_to_sign,$AWS_SECRET_ACCESS_KEY,TRUE); //Base64对签名进行编码并使其URL安全 $signature=base64_编码($signature); $signature=str_replace('+','%2B',$signature); $signature=str_replace('=','%3D',$signature); $url\u string=内爆(&,$url\u部分); $url=$base\u url.$url\u string.&Signature=“.$Signature; 打印$url; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$URL); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_超时,15); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0); $xml\u response=curl\u exec($ch); echo$xml_响应; ?>

Php Amazon Web服务签名错误 “项目搜索”,“服务”=>“AWSECommerceService”, 'AWSAccessKeyId'=>$AWS\u访问\u密钥\u ID,'AssociateTag'=>“AssociateTag”, “版本”=>“2011-08-01”、“可用性”=>“可用性”、“条件”=>“全部”, 'ItemPage'=>“1”、'ResponseGroup'=>“图像、ItemAttributes、编辑评论”, “关键词”=>“亚马逊”); //添加时间戳 $url_params['Timestamp']=gmdate(“Y-m-d\TH:i:s.\\0\\0\\Z”,time()); //对URL参数进行排序 $url_parts=array(); foreach(数组_键($url_参数)作为$key) $url\u parts[]=$key.“=”$url\u参数[$key]; 排序($url\u部分); //构造要签名的字符串 $string_to_sign=“GET\webservices.amazon.com\n/onca/xml?\n”。内爆(&),$url_部分); $string_to_sign=str_replace('+','%20',$string_to_sign); $string_to_sign=str_replace(“:”、“%3A”、$string_to_sign); $string_to_sign=str_replace(“;”,urlencode(“;”),$string_to_sign); //签署请求 $signature=hash_hmac(“sha256”,$string_to_sign,$AWS_SECRET_ACCESS_KEY,TRUE); //Base64对签名进行编码并使其URL安全 $signature=base64_编码($signature); $signature=str_replace('+','%2B',$signature); $signature=str_replace('=','%3D',$signature); $url\u string=内爆(&,$url\u部分); $url=$base\u url.$url\u string.&Signature=“.$Signature; 打印$url; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$URL); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_超时,15); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0); $xml\u response=curl\u exec($ch); echo$xml_响应; ?>,php,curl,amazon-web-services,Php,Curl,Amazon Web Services,这将返回一个签名错误; 为什么? 这是输出,为了隐私,密钥和标签被替换 TAG&Availability=Available&Condition=All&ItemPage=1&Keywords=Amazon&Operation=ItemSearch&ResponseGroup=Images,ItemAttributes,EditorialReview&Service=AWSECommerceService&Timestamp=2012-05-27T09:35:43.000Z&Version=20

这将返回一个签名错误; 为什么?

这是输出,为了隐私,密钥和标签被替换


TAG&Availability=Available&Condition=All&ItemPage=1&Keywords=Amazon&Operation=ItemSearch&ResponseGroup=Images,ItemAttributes,EditorialReview&Service=AWSECommerceService&Timestamp=2012-05-27T09:35:43.000Z&Version=2011-08-01&Signature=Kevlbw6G9YGVhetF5M0YMGUE64LeayGDTQZQE0BCLQ%3D

不确定您是否仍需要帮助,但它很可能失败,因为在您的通话中没有提供有效的助理标签

<?php
error_reporting(E_ALL); 
ini_set("display_errors", 1); 
$AWS_ACCESS_KEY_ID = "KEY";
$AWS_SECRET_ACCESS_KEY = "ACCESS KEY";

$base_url = "http://webservices.amazon.com/onca/xml?";
$url_params = array('Operation'=>"ItemSearch",'Service'=>"AWSECommerceService",
 'AWSAccessKeyId'=>$AWS_ACCESS_KEY_ID,'AssociateTag'=>"associateTag",
 'Version'=>"2011-08-01",'Availability'=>"Available",'Condition'=>"All",
 'ItemPage'=>"1",'ResponseGroup'=>"Images,ItemAttributes,EditorialReview",
 'Keywords'=>"Amazon");

// Add the Timestamp
$url_params['Timestamp'] = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time());

// Sort the URL parameters
$url_parts = array();
foreach(array_keys($url_params) as $key)
    $url_parts[] = $key."=".$url_params[$key];
sort($url_parts);

// Construct the string to sign
$string_to_sign = "GET\webservices.amazon.com\n/onca/xml?\n".implode("&",$url_parts);
$string_to_sign = str_replace('+','%20',$string_to_sign);
$string_to_sign = str_replace(':','%3A',$string_to_sign);
$string_to_sign = str_replace(';',urlencode(';'),$string_to_sign);

// Sign the request
$signature = hash_hmac("sha256",$string_to_sign,$AWS_SECRET_ACCESS_KEY,TRUE);

// Base64 encode the signature and make it URL safe
$signature = base64_encode($signature);
$signature = str_replace('+','%2B',$signature);
$signature = str_replace('=','%3D',$signature);

$url_string = implode("&",$url_parts);
$url = $base_url.$url_string."&Signature=".$signature;
print $url;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

$xml_response = curl_exec($ch);
echo $xml_response; 
    ?>
因此,您需要将此值更改为:

'AssociateTag'=>"associateTag"
您必须使用Amazon提供给您的associate标签。我认为关联标签通常以数字“20”结尾,但我无法验证这一点。如果您不知道您的会员标签,请在此处登录您的会员帐户:


…它将是页面左上角的“作为/Tracking ID登录”值。

签名错误主要是由于访问密钥ID和密钥ID不匹配

请交叉验证此ID

同时检查associateTag

'AssociateTag'=>"(my-assigned-associate-tag)"