【问题标题】:Amazon Selling Partner API Signature亚马逊销售合作伙伴 API 签名
【发布时间】:2020-12-11 03:38:40
【问题描述】:
method = 'GET'
service = 'execute-api'
user_agent = 'My Selling Tool/2.0 (Language=Python3; Platform=Windows/10)'
region = 'us-east-1'
host = 'sellingpartnerapi-na.amazon.com'
endpoint = 'https://sellingpartnerapi-na.amazon.com'
request_parameters = '/fba/inbound/v0/shipments/shipmentId1/preorder/confirm?MarketplaceId=ATVPDKIKX0DER&NeedByDate=2020-10-10'

acess_token = 'xxx'

access_key = 'xxx'
secret_key = 'xxx'

def sign(key, msg):
    return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest()

def getSignatureKey(key, dateStamp, regionName, serviceName):
    kDate = sign(('AWS4' + key).encode('utf-8'), dateStamp)
    kRegion = sign(kDate, regionName)
    kService = sign(kRegion, serviceName)
    kSigning = sign(

def getSignatureKey(key, dateStamp, regionName, serviceName):

t = datetime.datetime.utcnow()
amzdate = t.strftime('%Y%m%dT%H%M%SZ')
datestamp = t.strftime('%Y%m%d') 

canonical_uri = '/'

canonical_querystring = request_parameters

canonical_headers = 'host:' + host + '\n' + 'user-agent:' + user_agent + '\n' + 'x-amz-access-token:' + acess_token + '\n' + 'x-amz-date:' + amzdate 

signed_headers = 'host;user-agent;x-amz-access-token'

payload_hash = hashlib.sha256(('').encode('utf-8')).hexdigest()

canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash

algorithm = 'AWS4-HMAC-SHA256'
credential_scope = datestamp + '/' + region + '/' + service + '/' + 'aws4_request'
string_to_sign = algorithm + '\n' + amzdate + '\n' + credential_scope + '\n' + hashlib.sha256(canonical_request.encode('utf-8')).hexdigest()

signing_key = getSignatureKey(secret_key, datestamp, region, service)

signature = hmac.new(signing_key, (string_to_sign).encode(
    'utf-8'), hashlib.sha256).hexdigest()

authorization_header = algorithm + ' ' + 'Credential=' + access_key + '/' + credential_scope + ', ' + 'SignedHeaders=' + signed_headers + ', ' + 'Signature=' + signature

headers = {'Authorization': authorization_header,
           'host':host,
           'user-agent': user_agent,
           'x-amz-access-token': acess_token, 
           'x-amz-date': amzdate}

request_url = endpoint + '' + canonical_querystring
r = requests.get(request_url, headers=headers)

我关注了sp-apisignatureV4,但得到了回复“InvalidSignature”

此错误发生在第 4 步。创建并签署您的请求。

2 个月了我都不知道,我猜是标题的问题?

我的代码需要更正还是问题不在这里?

【问题讨论】:

  • 你找到答案了吗?

标签: python amazon-product-api


【解决方案1】:

你可以使用pip install aws-requests-authThere is Pip install link

from aws_requests_auth.aws_auth import AWSRequestsAuth
import json
import sys
AWS_AUTH = AWSRequestsAuth(
    aws_access_key=config[0]["aws_access_key"],
    aws_secret_access_key=config[0]["aws_secret_access_key"],
    aws_host=config[0]["aws_host"],
    aws_region=config[0]["aws_region"],
    aws_service=config[0]["aws_service"],
)
AUTH_URL = config[0]["AUTH_URL"]
REFRESH_TOKEN = config[0]["REFRESH_TOKEN"]

CLIENT_ID = config[0]["CLIENT_ID"]
CLIENT_SECRET = config[0]["CLIENT_SECRET"]
AUTH_BODY = {
    "grant_type": "refresh_token",
    "refresh_token": REFRESH_TOKEN,
    "client_id": CLIENT_ID,
    "client_secret": CLIENT_SECRET,
}

headers = {
    "content-type": "application/x-www-form-urlencoded;charset=UTF-8",
    "host": "sellingpartnerapi-fe.amazon.com",
}
auth_login = requests.post(AUTH_URL, headers=headers, data=AUTH_BODY)

response = auth_login.json()
reponseCode = auth_login.status_code

if reponseCode == 200:
    print("====== AWS AUTH SIGN ====== OK", reponseCode)
    return response["access_token"], AWS_AUTH, config[0]
else:
    print("AUTH SIGN Error", response)
    return False

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 2021-08-20
    • 1970-01-01
    • 2022-07-29
    • 2022-09-23
    • 2021-05-26
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    相关资源
    最近更新 更多