3

以下是亚马逊看似清晰的说明。

只需发送以下信息: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
)

这将返回以下错误:

{"errors"=>
  [{"message"=>"Access to requested resource is denied.",
    "code"=>"MissingAuthenticationToken"}]}

我已经调整了每次看到的呼叫。我读过以下文章: 这个 这个

在 github 上为这个 API 翻阅了 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 凭证?

4

1 回答 1

4

不幸的是,您链接到的特定 Amazon 文档并不能说明全部情况。为了获得authorizationCode您正在寻找的响应,您还需要满足一些其他要求:

亚马逊 OAuth 令牌

您需要来自 Amazon 的 OAuth API(完全不同的 API)的访问令牌。您可以为此使用工作grantless流程,因为在您的情况下,用户尚未实际授权 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'
}

这将返回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标头添加到您的/authorization/v1/authorizationCode请求中。

签署您的请求

这是您收到错误背后的实际原因。未签名的请求将不包括提示您输入的“授权令牌”。

您需要使用 Amazon 的SigV4签名机制对您的请求进行签名。看起来您正在使用 Ruby (HTTParty),因此您可以为此使用aws-sdkAws ::Sigv4::Signer。您需要按照通用开发人员指南中的说明设置 IAM 凭证,并且这些凭证以Aws::Sigv4::Signer某种方式提供给您(硬编码、环境变量、Aws::SharedCredentials等)

请求签名将导致一些专有标头添加到您的请求中。完成此操作后,您应该拥有成功发出请求所需的一切。

于 2021-08-23T15:03:04.540 回答