【问题标题】:How to convert Amazon MWS credentials to SP-API creds如何将亚马逊 MWS 凭证转换为 SP-API 凭证
【发布时间】:2021-08-20 22:13:03
【问题描述】:

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
)

这会返回以下错误:

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

我已经调整了每次看到的调用。我已阅读以下文章: This This

在 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 凭证?

【问题讨论】:

    标签: amazon-web-services amazon-mws amz-sp-api


    【解决方案1】:

    不幸的是,您链接到的特定 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'
    }
    

    这将返回一个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 请求中。

    签署您的请求

    这是您收到错误的实际原因。未签名的请求不会包含系统提示您输入的“授权令牌”。

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

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

    【讨论】:

    • 不可能!!你是认真的吗??哇,你到底是怎么想出来的?非常感谢,我马上试试。
    • 公平地说,我链接的通用开发人员指南中提到了这些要求。这些文档的问题在于,通常有 3-5 种方法来做任何一件事,而关于何时做某事以及为什么做某事几乎没有相关的记录。您的原始文档链接就是一个很好的例子。太多的反复试验让我走到了这一步,我还没有用这个 API 做得更进一步。
    • 是的,亚马逊的文档太可怕了
    • 我目前正在等待亚马逊支持人员帮助我了解 sp-api 文档。太糟糕了...
    猜你喜欢
    • 2023-03-30
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多