通过eBay令牌认证苦苦挣扎了几天。我发现很难理解如何获取新令牌,在注册开发人员程序帐户后,我请求了密钥集并获得了它们,之后我授予对Auth'n'Auth令牌的访问权限,该令牌将持续18个月,是的,该令牌仅适用于Trading,Shopping和Finding API。
但是,当您需要执行Buy,Sell和Commerce API时,您必须获取oauth令牌。您可以通过用户令牌工具在oauth上进行所谓的“单一用户应用”风格和登录,并在2小时后获得oauth。
稍后,令牌将过期,您可能会失去对上述api的访问权限。我尝试从“交易”>“获取会话ID”,“交易”>“获取令牌”中获取令牌,但是在为“获取令牌”提供会话ID后,它说:“最终用户尚未完成Auth&Auth登录流程。” 尽管有一个有效的18个月令牌,但它会不断返回此错误。
是否有任何人可能读过或写过的示例文章?
您的困惑并非没有根据。我自己在使用此API流程以及大部分官方开发论坛中所经历的过程令人感到压力重重。下面详细说明了生成与您是否要连接到单个,专用,帐户还是多个用户帐户无关的oauth的过程。
有一个官方指南,它确实说明了整个过程,因此,我不愿意在此处重新创建整个指南。不过,我可以提供摘要(建议您在尝试通过您的应用前,先使用Postman遵循以下内容):
https://api.ebay.com/oauth/api_scope/sell.inventory
范围。找出所需的端点,并转到每个端点的API文档,然后找到“作用域”部分。现在,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。
code
查询字符串。如果您要为多个用户开发一个应用程序,并计划让他们实际在此页面上登录,则需要配置您的应用程序以获取确认响应(即上述URL),并从中提取代码。此代码是非常短暂的。如果要通过浏览器手动检索它,则需要快速完成下一步。现在,您需要对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都会返回一个新的刷新令牌。
刷新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
我希望这有帮助!
在撰写本文时,@ tar传递会话ID并不是检索oauth令牌和刷新令牌的过程的一部分。在使用api开发自己的任何时候,我都不需要考虑会话ID。如果情况有所改变,或者如果我在没有此关键部分的情况下成功地使用了api,请指向相关文档。
事实证明,ebay的oauth不像auth&auth那样支持会话ID。这是最愚蠢的事情,因为这意味着它与不能接受URL的桌面客户端不兼容。对于那个很抱歉。
@Roro应该这样做,尽管自从我看过已经有一段时间了:)
官方指南是一个死链接
巨大的帮助.....发布1.5年后!