Facebook图形API - OAuth令牌

我正在尝试使用新的图形API检索数据,但是我从OAuth中恢复的令牌似乎没有起作用。 我正在做的电话如下;
$token = file_get_contents('https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=<app_id>&client_secret=<app secret>');
这将返回一个字符串长度为41的标记。为了给出一个示例,我在下面提供了一个示例(将所有数字转换为0,将所有大写字母转换为'A',将小写字母转换为'a'
access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.
我使用此访问令牌并将其附加到数据的调用请求,它似乎不是正确的令牌,因为它什么都不返回。我按如下方式进行数据调用;
file_get_contents('https://graph.facebook.com/<my_page's_id>/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仅用作重定向一次(第一次),使用“代码”标记重定向回依赖方。第二次,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
    
请注意 'type'=>'client_cred', 只是一种规避下面的方法,尽管如此,上述方法也有效 在用户授权您的应用程序之后,我们将用户重定向回您在参数代码中使用验证字符串指定的重定向URI,该验证字符串可以交换为oauth访问令牌。通过获取https://graph.facebook.com/oauth/access_token将其交换为访问令牌。传递与上一步完全相同的redirect_uri: 来自:http://developers.facebook.com/docs/api 另见:http://forum.developers.facebook.net/viewtopic.php?pid = 238371     
尝试遵循API,即没有
type
但添加
redirect_uri
code
(即使我们不需要它):
$token = file_get_contents('https://graph.facebook.com/oauth/access_token?client_id=<app_id>&client_secret=<app secret>&redirect_uri=<url>&code=<code>');
    
也许你的问题已经解决,但我还没有找到你接受的答案,也许这个答案可以帮助那些面临类似问题的人 首先,我们必须创建我们的Application实例。
$facebook = new Facebook(array(
  'appId' => '149865361795547',
  'secret' => 'ee827a8df6202e1857b3fc28f3185a61',
  'cookie' => true,
)); 
获取access_token的简便方法
$token = $facebook->getAccessToken();
获得您在问题中提出的页面状态
$response = $facebook->api($pageID . '/feed','get',$token);
谢谢..     
确保您的url编码了您的查询参数,您的实际应该是:
000000000000%7CAaaAaaAaaAAaAaaaaAaaAa0aaAA
注意:似乎也需要type参数,没有它你也会得到500错误消息:
{
   "error": {
   "type": "OAuthException",
   "message": "Error validating verification code."
   }
}
而不是你得到的其他缺少参数的消息。看不出文档中提到的那个。     
如果您的连接URL不是重定向URI的基础,也可能会出现此错误。例如
Connect URL: http://www.example.com/fb/connect/

Redirect URI: http://www.example.com/fb/connect/redirect
我遇到了一个问题,我的重定向URI与连接URL相同,但是我忘记了重定向URI上的尾随/因此FB将它们视为不同并且未通过身份验证。     
很抱歉在旧问题中发帖。 由于最近fb访问的变化。 我有这个代码工作,并认为我会发布给其他需要帮助的人。 这个方法适用于jQuery ajax,并从facebook中删除了redirect_uri给出的示例。
$ch = curl_init("https://graph.facebook.com/oauth/access_token?client_id=INSERT_YOUR_APP_ID_HERE&client_secret=INSERT_YOUR_APP_SECRET_HERE&grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 30000);
$data = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
curl_close($ch);

if ($curl_errno > 0) 
{
        echo "cURL Error ($curl_errno): $curl_errorn";
} 
else 
{
    echo $data;
}
输出公共可用的access_token以显示给非Facebook用户。即网站的图表api的Facebook页面供稿墙。 =的access_token 191648007534048 | eVilnMh585rlQLZLvBAmqM6s-1G phpfacebookoauth2facebook-accesstokenfacebook-的OAuth     
您需要输入实际值而不是&lt; app_id>和一个秘密值。 代码是您需要生成的唯一值,然后您提供的重定向URL将验证代码是否正确。     

要回复问题请先登录注册