【发布时间】:2015-10-14 19:12:14
【问题描述】:
我不熟悉使用 API,目前正在尝试在我正在开发的新应用程序上使用 Trade Me API。
他们的authorisation guidelines 说他们使用 OAuth 来验证 API 调用,这些可以在查询字符串或授权标头中指定。
作为 API 调用的新手,我尝试使用 guzzlehttp/oauth-subscriber,但在尝试调用时失败了。
所以目前我只是想将详细信息附加到查询字符串中。
我尝试拨打的电话需要:
- oauth_consumer_key
- oauth_signature
- oauth_signature_method
oauth_consumer_key 是消费者密钥,oauth_signature 是消费者密钥。
当我尝试访问此 URL 以测试 URL 是否正确时 - https://api.tmsandbox.co.nz/v1/Listings/123.json?oauth_consumer_key=XXX&oauth_signature=XXX&oauth_signature_method=PLAINTEXT
我收到一个错误:
"ErrorDescription":"无效的 PLAINTEXT 签名。"
我显然已经替换了上面 URL 中的密钥,但我看不出上面有什么问题,它似乎与他们的文档相匹配。
谁能指出我做错了什么?
【问题讨论】:
-
您是否在签名后附加了 & 符号?如果您通过
Authorization标头发送授权会更容易。尝试通过 curl 手动执行此操作:curl https://api.tmsandbox.co.nz/v1/Listings/123.json -H 'Authorization: OAuth oauth_consumer_key="<consumer-key>", oauth_signature_method="PLAINTEXT", oauth_signature="<consumer-secret>&"'。您也可以尝试在签名后添加&amp;。 -
@Dencker 好的,我稍后会尝试使用
curl。我的意思是,如果我能弄清楚如何在标题中发送授权,或者如果有人可以帮助我这样做,那么我更愿意这样做。但是我无法完全理解如何通过 Laravel 做到这一点。这就是为什么我一直在寻找使用查询字符串的解决方案。 -
您使用哪个库来发出请求?它们中的大多数,比如 Guzzle 或 Requests,都提供了一个简单的
->addHeader("Authorization", 'OAuth oauth_consumer_key="<consumer-key>".....')方法或类似的东西。 -
@Dencker 我使用的是
Guzzle。您是否可以仅使用基本的Guzzle库 - github.com/guzzle/guzzle 来做到这一点,或者您是否需要使用特殊的东西,例如 github.com/guzzle/oauth-subscriber -
通过您在那里拨打的电话,您应该可以单独使用 Guzzle。如果您想访问特定于成员的信息,您可以只使用 Guzzle,尽管有些库提供了围绕 oauth 事务的包装器。为了更好地理解 OAuth 标准,我建议您尝试手动进行几次身份验证,然后继续使用一些包装库。这将使您更好地了解幕后发生的事情。