易趣oauth令牌和刷新令牌[关闭]

问题描述 投票:11回答:3

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

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

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

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

token access-token ebay ebay-api
3个回答
31
投票

This details the OAuth process of the "New Sell" API, not auth 'n' auth or the legacy Trading API. It is also for the sandbox, although the procedure for Production is the same.

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

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

  1. here收集您的客户ID和客户端密码(不要公开分享这些)
  2. 通过单击“通过您的应用程序从eBay获取令牌”并填写表单,从here生成RuName(重定向URL名称)。此表单用于构建登录页面的外观,用户将被重定向以允许您的应用程序访问其帐户。然后,RuName将直接显示在列标题“RuName(eBay重定向URL名称)”下方
  3. 收集您需要的范围列表。每个API端点都需要具有相应范围权限的OAuth令牌。例如,Create or Replace Inventory Item端点需要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` 还建议您添加astate查询字符串,为了便于使用,我省略了该字符串,但您应该研究what they are以及为什么建议将它们用于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刷新的正常过程,通常每次使用旧刷新令牌时都会返回新的刷新令牌。
  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

我希望这有帮助!


4
投票

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

我几乎失去了理智,试图弄清楚出了什么问题,因为ebay返回了解码的刷新令牌


1
投票

对于任何挣扎的人,请注意步骤4中的URL与eBay上提供的URL不同。 eBay上的URL以https://auth.sandbox.ebay.com/oauth2/authorize开头,但第4步中的URL以https://signin.sandbox.ebay.com/authorize开头

© www.soinside.com 2019 - 2024. All rights reserved.