我正在尝试使用最近发布的新的Graph API Facebook,但我似乎无法让它正常工作。
我已经完成了这些步骤,在/ authorize调用之后,我收到了access_token:
access_token=109002049121898|nhKwSTJVPbUZ5JYyIH3opCBQMf8.
当我尝试使用该令牌时,我得到:
{
"error": {
"type": "QueryParseException",
"message": "An active access token must be used to query information about the current user."
}
}
我也很难过......
-AC
答案 0 :(得分:12)
使用Facebook应用程序的令牌时
如果您使用me
中的https://graph.facebook.com/me/
别名,但是您的代币是针对 Facebook应用获取的,则“我”不再是您了 - 它是应用程序或可能没有。无论如何,这不是你打算让应用程序与自己进行交互。
在这种情况下,您需要通过应用与个人用户帐户进行互动。您需要做什么(在应用程序向用户提出要求时在UI中请求的权限之后)找到您的facebook用户ID#并将其替换为“我”来访问您自己的信息。例如Mark Zuckerberg的facebook用户名是4,所以他是https://graph.facebook.com/4/
别名me
仅在你是你的情况下才有效!有时很难记住当前用户在编程Facebook时是谁(即你,页面,应用程序等),因为我们习惯于在大多数时候习惯使用facebook UI。从编程的角度来看,它取决于所获得的令牌代表什么。
一篇很有帮助纠正我的博客文章是Ben Biddington | Facebook Graph API — getting access tokens。
答案 1 :(得分:7)
这里也是一样的。我跟随Ben Biddington的blog获取访问令牌。尝试使用它时出现相同的错误。 Facebook的OAuth实现并没有完全遵循规范,只要文档清晰,我就可以了,显然情况并非如此。如果使用访问令牌返回用户标识和用户名,那将会很好。
答案 2 :(得分:4)
在您致电
之后澄清一下https://graph.facebook.com/oauth/authorize?
您应该收到一个CODE,它与您的CLIENT_ID和CLIENT_SECRET(假设您已注册您的应用程序)一起可以在
交换access_tokenhttps://graph.facebook.com/oauth/access_token?
如果您的ACCESS_TOKEN确实如此,那么您应该可以请求
https://graph.facebook.com/me/
答案 3 :(得分:2)
添加类型参数会返回应用程序级别的auth_token,因此最好是OMIT。经过无数次尝试和组合后,对我来说,在redirect_url
的调用中使用的/oath/access_token
参数与调用/oath/authorize
时使用的参数相同。
因此,代表某人授权您的应用程序的完整序列是:
1。致电或重定向到:
"https://graph.facebook.com/oauth/authorize?client_id=" + my_clientId + "&scope=publish_stream,offline_access,manage_pages" + "&redirect_uri=" + "http://my_redirect_url?blah"
2。在位于上方return_url
的页面中,向此网址发出请求或其他任何内容:
"https://graph.facebook.com/oauth/access_token?client_id=" + client_id + "&client_secret=" + secret + "&code=" + Request.QueryString["code"] + "&redirect_uri=" + "http://my_redirect_url?blah"
答案 4 :(得分:1)
我在IE8中只有同样的问题。 我的解决方案是在API请求中发送access_token。 像这样:
FB.api('/me/friends?access_token=<YOUR TOKEN>
我通过PHP获得了我的令牌:
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => '<API_ID>',
'secret' => '<SECRET>',
'cookie' => false,
));
$session = $facebook->getSession();
$token = $session['access_token'];
答案 5 :(得分:0)
我一直有同样的问题。我已经做了几件事来解决它:
答案 6 :(得分:0)
我想指出Ben Biddington的博客上有什么说法,以及我在初始问题中查看“格式错误”的access_token时注意到的内容。其他人在这个帖子中说过类似的事情,但我想要明确。
令牌实际上并不是格式错误,而是一个允许您代表APP而不是用户执行操作的令牌。如果您想要获取应用的所有用户,或者查看应用的见解等,这是您使用的令牌,请求通常来自您的服务器,而不是客户端。通过使用type = client_cred参数获得此类型的令牌。如果您想代表用户执行操作,请不要指定type = client_cred,并确保在调用http://graph.facebook.com/oauth/access_token时指定以下参数:
'client_id' => APP_ID
'redirect_uri' => REDIRECT_URI
'client_secret' => APP_SECRET
'code' => $_GET['code']
我把它写成PHP数组的键值对,但我认为你明白了。使用以下参数初始调用http://graph.facebook.com/oauth/authorize后,将获得代码GET值:
'client_id' => APP_ID
'redirect_uri' => "http://your.connect.url/some/endpoint"
我希望这有帮助! Facebook文档所说的,但不能说得好,是获取access_token是一个双请求过程。
答案 7 :(得分:0)
我实际上注意到,如果你的返回uri最后没有斜线你就会遇到问题。我目前正在浏览器中测试并且return_uri = https://mydomain.com不起作用但return_uri = https://mydomain.com/确实有效。如果我使用第一个,我会收到“验证验证码的错误。”
这看起来有点奇怪,但我只是错过了spec / instructions中的一个字。虽然失去了我生命中的两个小时。
答案 8 :(得分:0)
我遇到了同样的问题,但是在删除type=client_cred
并确保redirect_uri参数在进行授权和access_token call
修复问题时是相同的。