2012-05-28 103 views
0

我试图让Facebook访问令牌使用以下代码: 我之前创建了自己的函数,但它返回时出现了相同的错误,我无法弄清楚问题所在。Facebook访问令牌

function getAccessToken(){ 
     $app_id = FB_APP_ID; 
     $app_secret = FB_SECRET_ID; 
     $my_url = FB_PAGE_URL; 
     $code = $_REQUEST["code"]; 


     if(empty($code)) { 
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
     $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" 
     . $_SESSION['state']; 

     echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
    }  
    if($_REQUEST['state'] == $_SESSION['state']) { 
     $token_url = "https://graph.facebook.com/oauth/access_token?" 
     . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) 
     . "&client_secret=" . $app_secret . "&code=" . $code; 

     $response = file_get_contents($token_url); 
     $params = null; 
     parse_str($response, $params); 

     $graph_url = "https://graph.facebook.com/me?access_token=" 
     . $params['access_token']; 

     $user = json_decode(file_get_contents($graph_url)); 
     echo("Hello " . $user->name); 
    } 
    else { 
     echo("The state does not match. You may be a victim of CSRF."); 
    } 
} 

Server-Side Authentication中获得,但我不断收到此错误:

Warning: file_get_contents(https://graph.facebook.com/oauth/access_token? 
client_id=ID HERE&redirect_uri=URLHERE&cli 
ent_secret=SECRECT&code=AQCI5rNgw9zCPHWGozeT59asg7_022u5tVc5XSef49BiX 
IaF5_MAMqFwsqOAquUHgjOu_99ONwUV6IC7k-jV6DsWf9ni3jm8t59aHCBp1jrFaDthPbIKLNLQ- 
fZgB5MLh1le5BAPKj_l57jhTLTBfOdxRU30mFCMYzMch8MYFpCmJ9GrjSSGwt0OKb_LNqMoRf8) [function.file- 
get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request 

任何人都知道的修复?

回答

0

我已经设法解决这个问题,使用PHP SDK, ,并与SDK经过长时间的争斗,让它做我想做的事情。

我也用同样的想法打开了另一个问题,但有另一个问题。 此问题现已解决。

退房这个问题的回答这个问题:Facebook Access Token Server Side Authentication

0

这可能是file_get_contents方法的问题,因为您构建的网址看起来没问题。

如果你搜索"facebook file_get_contents failed to open stream"你会在这件事上得到不少结果,这里就很多关于堆栈溢出的问题。
它看起来像一个HTTPS问题,file_get_contents作为此线程中的状态:[function.file-get-contents]: failed to open stream

也许尝试一些其他的方法来发出HTTP请求?也许卷曲?
只是为了测试东西,尝试从命令行中使用curl与您使用php脚本尝试过的相同url进行比较,并查看您得到的结果。

0

查看请求响应,您尚未定义您的Facebook应用程序设置。

您使用FB_APP_IDFB_SECRET_IDFB_PAGE_URL当你请求一个道理,但在回应我可以看到这些被定义为:分别为“ID HERE”,“朱鸿”和“URLHERE”。

+0

没有把他们赶走的原因,你不能换货,得到的信息了。 –