如何解决在python中对MWS API的调用后问题我已经在便签本上验证了我的凭据我收到错误消息“签名不匹配”
这里是格式化时间戳的函数,它使用秘密密钥和“ 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 举报,一经查实,本站将立刻删除。