我正在尝试使用新的图形API检索数据,但是我从OAuth中恢复的令牌似乎没有起作用.
我正在做的电话如下;
$token = file_get_contents('https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=&client_secret= ');
这将返回一个字符串长度为41的标记.为了给出一个示例,我在下面提供了一个示例(将所有数字转换为0,将所有大写字母转换为'A',将小写字母转换为'a'
access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.
我使用此访问令牌并将其附加到数据的调用请求,它似乎不是正确的令牌,因为它什么都不返回.我按如下方式进行数据调用;
file_get_contents('https://graph.facebook.com//statuses?access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.')
当我直接通过浏览器手动检索此页面时,我收到500 /内部服务器错误消息.
任何帮助都将得到很好的赞赏.
更新:
我已经将方法从file_get_contents()更改为curl.通过检索标题我得到以下错误消息...
{"error":{"type":"OAuthException","message":"Missing client_id"}}
但我的帖子数组包括'client_id'?!
不要使用type = client_cred,这不是用户授予您的应用使用的访问令牌.您不需要redirect_uri或代码或任何批准来获取client_cred类型访问令牌.
Facebook目前实施了OAuth 2的早期草案.所以还没有对"国家"的支持.
但是你可以将你的状态后缀为redirect_uri很不错,这里要注意的重点是你指定的网站网址(这是redirect_uri)
不应该有
最后的问号或任何后缀为客户端状态,编码与否的任何地方.如果你这样做,你会得到可怕的"错误验证验证码"
不要那样用
http://www.Redirect.com?
正确的网址是http://www.Redirect.com/
希望能帮助到你.
这对我有用:-)
header('Location: https://graph.facebook.com/oauth/access_token?' . http_build_query(array( 'client_id' => FB_APP_ID, 'type' => 'client_cred', 'client_secret' => FB_SECRET, 'code' => $code)));
当然,您将使用file_get_contents并从响应中解析令牌
我遇到了完全相同的问题,但事实证明问题不是redirect_uri参数的编码,或者我有一个尾随斜杠或问号只是我传入了两个不同的重定向网址(没有读过那个规范)时间).
redirect_uri仅用作重定向一次(第一次),使用"代码"标记重定向回依赖方.第2次,在REDIRECT_URI传递给auth服务器,但这个时候你会期望它不使用(重定向),而它的使用认证服务器来验证码.服务器使用access_token进行响应.
http://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.5.2
你会注意到facebook文档(这很糟糕)说fetch "通过获取 https://graph.facebook.com/oauth/access_token来为访问令牌交换它".
总而言之,我没有必要对Uri进行编码或执行任何特殊操作,只需传入相同的redirect_uri两次,然后获取第二页以获取内部的access_token.
您可以使用curl通过终端(OSX用户)请求访问令牌:
curl -F type=client_cred -F client_id=xxxxxxxxxxxxxxx -F client_secret=c0f88xxxxxxxxxxxxxxxxxx1b949d1b8 https://graph.facebook.com/oauth/access_token
获得访问令牌后,您可以在将来的curl请求中使用它来通过新的图API进行更改:
将消息发布到个人资料ID:
curl -F 'access_token=xxxxxxxxxxxxx|mGVx50lxxxxxxxxxxxxhzC2w.' -F 'message=Hello Likers' -F 'id=1250000000000905' https ://graph.facebook.com/feed