易趣oauth令牌和刷新令牌

men*_*shi 18 token access-token ebay-api

使用eBay令牌认证已经挣扎了几天.我发现很难理解如何获取新令牌,在注册开发者计划帐户后,我请求了密钥集并获得了它们,之后我授权访问Auth'n'Auth令牌,该令牌有望持续18个月,是的,令牌仅适用于交易,购物和寻找API.

但是当你需要执行购买,销售和商业API时,你必须获得oauth令牌.您可以执行所谓的"单用户应用程序"样式并从用户令牌工具登录oauth,并获得2小时到期的oauth.

稍后,令牌过期,你有点失去了上面提到的api的访问权限.我尝试从交易>获取会话ID,交易>获取令牌中获取令牌,但在向Fetch令牌提供会话ID后,它说:"最终用户尚未完成Auth&Auth签名流程." 虽然有一个有效的18个月令牌,但它会一直返回此错误.

有没有关于此的任何示例文章,任何人都可能阅读或写过?

Ful*_*ool 37

这详细介绍了"新销售"API的OAuth流程,而不是auth'n'auth或旧版Trading API.它也适用于沙箱,虽然生产程序是相同的.

你的困惑并非毫无根据.我自己对这个API流程的体验,以及大部分官方开发论坛的经验都给人留下了压力.下面详细介绍了生成您是连接到单个,专用帐户还是多个用户帐户无关的oauth的过程.

官方指南,它解释了整个过程,所以我在这里重新创建整个指南犹豫不决.我可以提供一个摘要(我建议你在尝试通过你的应用程序之前使用Postman进行以下操作):

  1. 这里收集您的客户ID和客户端密钥(不要公开分享这些)
  2. 通过单击"通过您的应用程序从eBay获取令牌"并填写表单,从此处生成RuName(重定向URL名称).此表单用于构建登录页面的外观,用户将被重定向以允许您的应用程序访问其帐户.然后,RuName将直接显示在列标题"RuName(eBay重定向URL名称)"下方
  3. 收集您需要的范围列表.每个API端点都需要具有相应范围权限的OAuth令牌.例如,创建或替换库存项目端点需要https://api.ebay.com/oauth/api_scope/sell.inventory范围.找出您需要的端点,并转到每个端点的API文档,然后找到范围部分.
  4. get请求现在看起来像这样:

    `https://signin.sandbox.ebay.com/authorize?
    client_id=<your-client-id-value>&
    redirect_uri=<your-RuName-value>&
    response_type=code&
    scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20
    https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory`
    
    Run Code Online (Sandbox Code Playgroud)

    还建议您添加一个state查询字符串,为了便于使用,我省略了该字符串,但您应该研究它们是什么以及为什么建议它们用于OAuth.

  5. 浏览器中的此URL会将您重定向到用户的登录页面,以允许您的应用程序访问其帐户,但仅限于URL中的范围.从PHP curl请求中转出,您将获得重定向URL本身. 重要提示:即使您的应用程序只有一个用户,也需要最终用户签名.例如,您有一个客户的电子商务网站,您想将他们的产品发送到他们的单一eBay帐户.你仍然需要每18个月至少做一次这个过程(尽快找出原因).
  6. 用户登录并确认后,浏览器将显示"您现在可以关闭此窗口"页面.下一步所需的授权代码位于此页面的URL中作为code查询字符串.如果您正在为多个用户开发应用程序并计划让他们在此页面上登录,那么您需要配置您的应用程序以获取确认响应,该响应将是上述URL,并从中提取代码.这段代码非常短暂.如果您通过浏览器手动检索它,则需要快速完成后续步骤.
  7. 您现在需要对https://api.sandbox.ebay.com/identity/v1/oauth2/token执行POST请求.请参阅以下结构:

    HTTP method:   POST
    URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token
    
    HTTP headers:
    Content-Type = application/x-www-form-urlencoded
    Authorization = Basic <B64-encoded-oauth-credentials> (A base64-encoded value made from your client ID and client secret, separated by colon. For example, in PHP you could generate it with: `base64_encode ("fakeclientid123:fakeclientsecret123")`)
    
    Request body (wrapped for readability):
    grant_type=authorization_code& (literally the string "authorization_code")
    code=<authorization-code-value>& (code retreived in previous step)
    redirect_uri=<RuName-value> (same RuName as earlier)
    
    Run Code Online (Sandbox Code Playgroud)

    如果成功,此请求将返回如下内容:

    {
        "access_token": "v^1.1#i^1#p^3#r^1...XzMjRV4xMjg0",
        "token_type": "User token",
        "expires_in": 7200,
        "refresh_token": "v^1.1#i^1#p^3#r^1...zYjRV4xMjg0",
        "refresh_token_expires_in": 47304000
      }
    
    Run Code Online (Sandbox Code Playgroud)

    有我们追求的oauth令牌,将持续2个小时.第二个令牌是刷新令牌,持续约18个月.保持此令牌安全,不要共享它,也不要在您的应用程序中对其进行硬编码.从此时起,您的应用应使用此令牌执行刷新调用,以便在需要时获取新的oauth.一旦18个月启动,或者用户再次执行"允许访问"过程,您将需要执行上述所有操作以生成新的刷新令牌.假设API没有改变那一点.

    值得注意的是,18个月的生命周期不是OAuth刷新的正常过程,通常每次使用旧刷新令牌时都会返回一个新的刷新令牌.

  8. 刷新oauth:

      HTTP method:   POST
      URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token
    
      HTTP headers:
        Content-Type = application/x-www-form-urlencoded
        Authorization = Basic <B64-encoded-oauth-credentials>
    
       Request body (wrapped for readability):
          grant_type=refresh_token&
          refresh_token=<your-refresh-token-value>&
          scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20
          https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory
    
    Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

  • 巨大的帮助.....发布1.5年后! (5认同)
  • 我希望在我自己花 15 个小时做之前就找到了这份指南!这也可能是“官方”指南...... (4认同)
  • 有时,refresh_token 在 18 个月过去之前就失效了。eBay API 太糟糕了... (3认同)
  • @tar,在撰写本文时,传递会话 ID 不是检索 oauth 令牌和刷新令牌的过程的一部分。在我自己使用 api 开发的任何时候,我都不需要考虑会话 ID。如果这已经改变,或者如果我以某种方式成功使用了没有这个关键部分的 api,请指向相关文档。 (2认同)
  • 事实证明,ebay 的 oauth 不像他们的 auth&amp;auth 那样支持会话 ID。这是最愚蠢的事情,因为这意味着它与不能接受 URL 的桌面客户端不兼容。对于那个很抱歉。 (2认同)
  • 官方指南是一个死链接 (2认同)
  • 我不确定,为什么 eBay 将其搞得如此复杂?应该有一种简单的方法来获取应用程序令牌并使用该令牌访问连接的帐户。就像许多其他系统使用令牌一样。 (2认同)

Dej*_*ell 7

对于那些与之斗争的人 - 确保您使用的是编码/令牌编码。

我几乎失去了理智,试图找出问题所在,因为 ebay 返回了解码后的刷新令牌