如何将亚马逊 MWS 凭证转换为 SP-API 凭证
How to convert Amazon MWS credentials to SP-API creds
Here are the seemingly clear instructions from Amazon.
只需发送以下内容:sellingPartnerId、developerId 和 mwsAuthToken
我用 httparty
这样做:
query = {
sellingPartnerId: "A3Kxxxxx",
developerId: "753xxxx",
mwsAuthToken: "amzn.mws.8abxxxxx-xxxx-xxxx-xxxx-xxxxxx",
}
然后
send = HTTParty.get("https://sellingpartnerapi-na.amazon.com/authorization/v1/authorizationCode",
query: query
)
此returns以下错误:
{"errors"=>
[{"message"=>"Access to requested resource is denied.",
"code"=>"MissingAuthenticationToken"}]}
我已经调整了我所看到的每一个调用。我已阅读以下文章:
This
This
为此 API 在 github 上翻阅了 695 个问题,但仍然没有运气。我已经调整了我的查询,但也没有运气:
query = {
grant_type: "client_credentials",
sellingPartnerId: "A3K98Oxxxxxx",
developerId: "753xxxxxxxx",
mwsAuthToken: "amzn.mws.8abxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx",
client_id: "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxx",
client_secret: "a473e76XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
scope: "sellingpartnerapi::migration"
}
我试过的都没有用。有什么建议吗?有没有人真的成功地将他们的 MWS 迁移到 SP-API 凭证?
不幸的是,您 link 的特定 Amazon 文档并未讲述整个故事。为了获得您正在寻找的 authorizationCode
响应,您还需要满足一些其他要求:
亚马逊 OAuth 令牌
您需要来自 Amazon 的 OAuth API 的访问令牌(完全不同的 API)。您可以为此使用 the grantless
workflow,因为在您的情况下,用户实际上尚未授权 SP-API:
POST https://api.amazon.com/auth/o2/token
body: {
grant_type: 'client_credentials',
scope: 'sellingpartnerapi::migration',
client_id: 'amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxx',
client_secret: 'a473e76XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}
这将 return 一个 access_token
,您需要将其实际迁移到 https://sellingpartnerapi-na.amazon.com/authorization/v1/authorizationCode
。响应将类似于:
{
"access_token": "Atc|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"scope": "sellingpartnerapi::migration",
"token_type": "bearer",
"expires_in": 3600
}
重要提示:从该响应中获取 access_token
值并将其作为 x-amz-access-token
header 添加到您的 /authorization/v1/authorizationCode
请求。
签署您的请求
这是您收到错误的真正原因。未签名的请求将不包含提示您输入的“授权令牌”。
您需要使用亚马逊的 SigV4
签名机制来签署您的请求。看起来你正在使用 Ruby (HTTPParty),所以你可以使用 aws-sdk
的 Aws::Sigv4::Signer for this. You'll need to have setup IAM credentials as documented in the generic developer guide, and those credentials being provided to your Aws::Sigv4::Signer
somehow (hardcoding, env vars, Aws::SharedCredentials,等等)
请求签名将导致一些专有 header 被添加到您的请求中。一旦完成,您应该拥有成功发出请求所需的一切。
Here are the seemingly clear instructions from Amazon.
只需发送以下内容:sellingPartnerId、developerId 和 mwsAuthToken
我用 httparty
这样做:
query = {
sellingPartnerId: "A3Kxxxxx",
developerId: "753xxxx",
mwsAuthToken: "amzn.mws.8abxxxxx-xxxx-xxxx-xxxx-xxxxxx",
}
然后
send = HTTParty.get("https://sellingpartnerapi-na.amazon.com/authorization/v1/authorizationCode",
query: query
)
此returns以下错误:
{"errors"=>
[{"message"=>"Access to requested resource is denied.",
"code"=>"MissingAuthenticationToken"}]}
我已经调整了我所看到的每一个调用。我已阅读以下文章: This This
为此 API 在 github 上翻阅了 695 个问题,但仍然没有运气。我已经调整了我的查询,但也没有运气:
query = {
grant_type: "client_credentials",
sellingPartnerId: "A3K98Oxxxxxx",
developerId: "753xxxxxxxx",
mwsAuthToken: "amzn.mws.8abxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx",
client_id: "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxx",
client_secret: "a473e76XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
scope: "sellingpartnerapi::migration"
}
我试过的都没有用。有什么建议吗?有没有人真的成功地将他们的 MWS 迁移到 SP-API 凭证?
不幸的是,您 link 的特定 Amazon 文档并未讲述整个故事。为了获得您正在寻找的 authorizationCode
响应,您还需要满足一些其他要求:
亚马逊 OAuth 令牌
您需要来自 Amazon 的 OAuth API 的访问令牌(完全不同的 API)。您可以为此使用 the grantless
workflow,因为在您的情况下,用户实际上尚未授权 SP-API:
POST https://api.amazon.com/auth/o2/token
body: {
grant_type: 'client_credentials',
scope: 'sellingpartnerapi::migration',
client_id: 'amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxx',
client_secret: 'a473e76XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}
这将 return 一个 access_token
,您需要将其实际迁移到 https://sellingpartnerapi-na.amazon.com/authorization/v1/authorizationCode
。响应将类似于:
{
"access_token": "Atc|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"scope": "sellingpartnerapi::migration",
"token_type": "bearer",
"expires_in": 3600
}
重要提示:从该响应中获取 access_token
值并将其作为 x-amz-access-token
header 添加到您的 /authorization/v1/authorizationCode
请求。
签署您的请求
这是您收到错误的真正原因。未签名的请求将不包含提示您输入的“授权令牌”。
您需要使用亚马逊的 SigV4
签名机制来签署您的请求。看起来你正在使用 Ruby (HTTPParty),所以你可以使用 aws-sdk
的 Aws::Sigv4::Signer for this. You'll need to have setup IAM credentials as documented in the generic developer guide, and those credentials being provided to your Aws::Sigv4::Signer
somehow (hardcoding, env vars, Aws::SharedCredentials,等等)
请求签名将导致一些专有 header 被添加到您的请求中。一旦完成,您应该拥有成功发出请求所需的一切。