问题描述
这里是格式化时间戳的函数,它使用秘密密钥和“ string_to_sign”(在我的情况下为“ request_description”)计算签名。
def get_timestamp():
"""Return correctly formatted timestamp"""
return strftime("%Y-%m-%dT%H:%M:%sZ",gmtime())
def calc_signature():
"""Calculate signature to send with request"""
sig_data = method + '\n' + domain.replace('https://','').lower() + '\n' + URI + '\n' + request_description
hmac_obj = hmac.new(codecs.encode(SECRET_KEY,'utf-8'),codecs.encode(sig_data,hashlib.sha256)
# return urllib.parse.quote(base64.b64encode(hmac_obj.digest()),safe='-_.~')
return hmac_obj.digest()
Blockquote 这是我定义“ string_to_sign”的方式。我正在尝试从订单API部分访问“ ListOrders”。我已经使用暂存器验证了所有凭据,并且相同的API正在暂存器上工作。
SECRET_KEY = 'xxxxx'
AWS_ACCESS_KEY = 'xxxx'
SELLER_ID = 'xxxx'
MARKETPLACE_ID = 'xxxx'
Action = 'ListOrders'
SignatureMethod = 'HmacSHA256'
Signatureversion = '2'
Timestamp = get_timestamp()
Version = '2013-09-01'
CreatedAfter = '2020-09-02T23:00:57Z'
URI = '/Orders/2013-09-01'
domain = 'https://mws.amazonservices.in'
method = 'POST'
payload = {'AWSAccessKeyId': AWS_ACCESS_KEY,'Action': Action,'SellerId': SELLER_ID,'Signatureversion': Signatureversion,'Timestamp': Timestamp,'Version': Version,'SignatureMethod': SignatureMethod,'CreatedAfter': '2014-08-26T23:00:00Z','MarketplaceId.Id.1': MARKETPLACE_ID
}
request_description = '&'.join(['%s=%s' % (k,urllib.parse.quote(payload[k],safe='-_.~').encode('utf-8')) for k in sorted(payload)])
sig = calc_signature()
payload['Signature']= sig;
print(payload)
encodedURL = urllib.parse.urlencode(payload)
Blockquote 使用以下命令创建我的帖子请求:
url = '%s%s?%s' % (domain,URI,encodedURL)
print(url)
headers = {'Host': 'mws.amazonservices.in','Content-Type': 'text/xml','x-amazon-user-agent': 'python-requests/1.2.0 (Language=Python)'}
# response = request(method,url,headers=headers,data=payload)
response = requests.post(url,headers=headers)
Blockquote 我的帖子通话看起来像签名一样
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)