温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - eBay oauth token and refresh tokens
access-token oauth token ebay-api

其他 - eBay oauth令牌和刷新令牌

发布于 2020-04-22 13:22:37

通过eBay令牌认证苦苦挣扎了几天。我发现很难理解如何获取新令牌,在注册开发人员程序帐户后,我请求了密钥集并获得了它们,之后我授予对Auth'n'Auth令牌的访问权限,该令牌将持续18个月,是的,该令牌仅适用于Trading,Shopping和Finding API。

但是,当您需要执行Buy,Sell和Commerce API时,您必须获取oauth令牌。您可以通过用户令牌工具在oauth上进行所谓的“单一用户应用”风格和登录,并在2小时后获得oauth。

稍后,令牌将过期,您可能会失去对上述api的访问权限。我尝试从“交易”>“获取会话ID”,“交易”>“获取令牌”中获取令牌,但是在为“获取令牌”提供会话ID后,它说:“最终用户尚未完成Auth&Auth登录流程。” 尽管有一个有效的18个月令牌,但它会不断返回此错误。

是否有任何人可能读过或写过的示例文章?

查看更多

提问者
mentorgh
被浏览
95
FullStackFool 2018-10-25 21:21

这详细说明了“新销售” API(而不是auth'n'auth或旧版Trading API)的OAuth流程。尽管生产过程相同,但也适用于沙箱。

您的困惑并非没有根据。我自己在使用此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`
    

    还建议您添加一个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)
    

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

    {
        "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
      }
    

    我们正在使用oauth令牌,该令牌将持续2个小时第二个令牌是刷新令牌,将持续约18个月。确保此令牌安全,不要共享它,也不要在您的应用中对其进行硬编码。从那时起,您的应用应使用此令牌执行刷新调用,以在需要时获取新的oauth。18个月结束后,或者如果用户再次执行“允许访问”过程,则需要执行上述所有操作来生成新的刷新令牌。假设此时API尚未更改。

    值得注意的是,18个月的寿命不是OAuth刷新的正常过程,通常,每次使用旧的令牌时,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
    

我希望这有帮助!