我正在使用Yelp的Fusion API。
所有文档都在这里并且看起来很直接,但似乎仍然不起作用。
https://www.yelp.com/developers/documentation/v3/get_started
这是我对令牌的请求。
https://api.yelp.com/oauth2/token?grant_type= OAuth2&client_secret= SECRET&client_id=ID
我收到了这个回复。
{
"error": {
"description": "Bad Request",
"code": "CLIENT_ERROR"
}
}
我重读了文档,并说
“要获取访问令牌,请对以下端点进行POST调用 使用从前一步获得的客户端ID和秘密。然后得到 来自响应正文的访问令牌。“
我提交了这个
https://api.yelp.com/oauth2/token?client_id=ID&client_secret= SECRET
我得到了同样的错误。
我错过了什么?
提前谢谢
答案 0 :(得分:1)
您有三个问题导致您收到错误请求
参数值中有空格
?grant_type= OAuth2
您使用的是错误的grant_type
。在文档页面上,他们指定仅支持client_credentials
,这意味着您必须将其用作值
grant_type string要使用的OAuth2授权类型。 现在,只支持client_credentials。
您使用的是错误的请求方法,它必须是POST而不是GET请求
这些参数应该在application / x-www-form-urlencoded中发送 POST 电话中的格式。
请注意,https://api.yelp.com/oauth2/token?client_id=ID&client_secret=SECRET
仍然将您的参数作为GET参数发送,因为它们位于url查询字符串中。您必须将参数作为POST字段传递,并且这样做的语法因您使用的服务器端脚本语言而异。
此外,您的请求需要在服务器端完成,因为/oauth2/token
端点不发送Access-Control-Allow-Origin
标头,这意味着您无法使用ajax请求来获取数据。
因此,如果您说您使用的是PHP服务器端,则可以使用CURL来获取令牌
$postData = "grant_type=client_credentials&".
"client_id=YOURCLIENTID&".
"client_secret=SECRET";
$ch = curl_init();
//set the url
curl_setopt($ch,CURLOPT_URL, "https://api.yelp.com/oauth2/token");
//tell curl we are doing a post
curl_setopt($ch,CURLOPT_POST, TRUE);
//set post fields
curl_setopt($ch,CURLOPT_POSTFIELDS, $postData);
//tell curl we want the returned data
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
//close connection
curl_close($ch);
if($result){
$data = json_decode($result);
echo "Token: ".$data->access_token;
}
答案 1 :(得分:1)
我使用POSTMAN获取所需的数据,你可以在这里下载 - https://www.getpostman.com/
要获取您的访问令牌 ,参数应位于请求正文 中,而不是请求网址。
在POSTMAN中,您需要提供以下键/值对:
grant_type:支持client_credentials client_id:您使用Yelp的应用的客户端ID client_secret:您使用Yelp进行应用的客户端密码。
要执行此操作,请在Body中输入它们。同时点击 x-www-form-urlencoded 单选按钮。
请参见下面的屏幕截图链接:
How to configure POSTMAN to get your Yelp Access Token
然后,您可以使用 RapidAPI Yelp API 来测试一些端点和参数。