Python 亚马逊产品广告API签名
我正在尝试为亚马逊产品广告API制作一个签名,已经做了几个小时了,但仍然得到一个403-有人能快速查看一下代码并告诉我我是否做错了什么吗 这是我用来创建签名的函数Python 亚马逊产品广告API签名,python,amazon-product-api,Python,Amazon Product Api,我正在尝试为亚马逊产品广告API制作一个签名,已经做了几个小时了,但仍然得到一个403-有人能快速查看一下代码并告诉我我是否做错了什么吗 这是我用来创建签名的函数 def create_signature(service, operation, version, search_index, keywords, associate_tag, time_stamp, access_key): start_string = "GET\n" + \ "webservices
def create_signature(service, operation, version, search_index, keywords, associate_tag, time_stamp, access_key):
start_string = "GET\n" + \
"webservices.amazon.com\n" + \
"/onca/xml\n" + \
"AWSAccessKeyId=" + access_key + \
"&AssociateTag=" + associate_tag + \
"&Keywords=" + keywords + \
"&Operation=" + operation + \
"&SearchIndex=" + search_index + \
"&Service=" + service + \
"&Timestamp=" + time_stamp + \
"&Version=" + version
dig = hmac.new("MYSECRETID", msg=start_string, digestmod=hashlib.sha256).digest()
sig = urllib.quote_plus(base64.b64encode(dig).decode())
return sig;
这是我用来返回请求字符串的函数
def ProcessRequest(request_item):
start_string = "http://webservices.amazon.com/onca/xml?" + \
"AWSAccessKeyId=" + request_item.access_key + \
"&AssociateTag=" + request_item.associate_tag + \
"&Keywords=" + request_item.keywords + \
"&Operation=" + request_item.operation + \
"&SearchIndex=" + request_item.search_index + \
"&Service=" + request_item.service + \
"&Timestamp=" + request_item.time_stamp + \
"&Version=" + request_item.version + \
"&Signature=" + request_item.signature
return start_string;
这是运行代码
_AWSAccessKeyID = "MY KEY"
_AWSSecretKey= "MY SECRET KEY"
def ProduceTimeStamp():
time = datetime.datetime.now().isoformat()
return time;
item = Class_Request.setup_request("AWSECommerceService", "ItemSearch", "2011-08-01", "Books", "harry%20potter", "PutYourAssociateTagHere", ProduceTimeStamp(), _AWSAccessKeyID)
item2 = Class_Request.ProcessRequest(item)
它在403处发出的一个web请求示例如下:-
http://webservices.amazon.com/onca/xml?AWSAccessKeyId=AKIAIY4QS5QNDAI2NFLA&AssociateTag=PutYourAssociateTagHere&Keywords=harry%20potter&Operation=ItemSearch&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2015-02-26T23:53:14.330000&Version=2011-08-01&Signature=KpC%2BUsyJcw563LzIgxf7GkYI5IV6EfmC0%2FsH8LuP%2FEk%3D
还有一个名为ClassRequest的holder类,每个请求字段只有一个字段
如果有人感兴趣,我遵循的说明如下:
我希望有人能帮助我,我是Python新手,有点迷茫你可以简单地使用现有的解决方案之一
例如,您的时间戳看起来有点短。再次检查时间戳是否正确,它的格式应该是2015-03-27T15:10:17.000Z,在您的示例web请求中,它看起来是:2015-02-26T23:53:14.330000 试用链接的一个好工具是Amazon的signed requests helper:,它对我很有用
$str = "Service=AWSECommerceService&Operation=ItemSearch&AWSAccessKeyId={Access Key}&Keywords=Harry%20Potter&ResponseGroup=Images%2CItemAttributes%2COffers&SearchIndex=Books&Timestamp=2019-08-11T17%3A51%3A56.000Z";
$ar = explode("&", $str);
natsort($ar);
$str = "GET
webservices.amazon.com
/onca/xml
";
$str .= implode("&", $ar);
$str = urlencode(base64_encode(hash_hmac("sha256",$str,'{Secret Key Here}',true)));
http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&Operation=ItemSearch&AWSAccessKeyId={Access Key}&Keywords=Harry%20Potter&ResponseGroup=Images%2CItemAttributes%2COffers&SearchIndex=Books&Timestamp=2019-08-11T17%3A51%3A56.000Z&Signature=$str
记住:如果你得到这个错误
您的AccessKey Id未注册为产品广告API。请使用在注册后获得的AccessKey Id
去