2012-11-18 101 views
8

我試圖按照示例創建一個從here到Facebook的服務器端登錄,但沒有運氣。在第7步,當我嘗試用輔幣代碼並將其存儲在供以後使用會話,我總是得到這樣的錯誤:Facebook登錄錯誤:無法打開流:HTTP請求失敗! HTTP/1.0 400錯誤請求

file_get_contents(): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request 

我知道這已經問了很多次,但我仍然無法解決這個問題,根據this question,我嘗試使用cURL,但它仍然不起作用,它只是返回false。

Other question告訴我使用PHP SDK,但我不知道使用哪種方法。所以我完全迷失在這裏。


這裏是我的調用登錄表單代碼:

<a href="<?php echo LOGIN_URL; ?> ?>" class="btn btn-primary">Login with Facebook</a> 

其中LOGIN_URL被定義爲:

define("LOGIN_URL", $facebook->getLoginUrl(array("redirect_uri" => APP_URL . "fb_login"))); 
在fb_login

,我有這樣的代碼:

$app->get("/fb_login", function() use($app, $facebook) 
{ 
    $code = $_REQUEST["code"]; 

    $token_url = "https://graph.facebook.com/oauth/access_token?" 
     . "client_id=" . APP_ID . "&redirect_uri=" . APP_URL . $_SESSION["request_uri"] // Previous URL 
     . "&client_secret=" . APP_SECRET . "&code=" . $code; 

    $response = file_get_contents($token_url); // Doesn't work 
    $params = null; 
    parse_str($response, $params); 

    $_SESSION["access_token"] = $params["access_token"]; 

    // Let's try with cURL... 
    // $ch = curl_init(); 
    // curl_setopt($ch, CURLOPT_URL, $token_url); 
    // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    // $output = curl_exec($ch); // Returns false 
    // curl_close($ch); 

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

    $user = json_decode(file_get_contents($graph_url)); 
    echo("Hello " . $user->name); 

    var_dump($code); die(); 
}); 

任何幫助表示讚賞。以前感謝。

+0

您可以粘貼'$ token_url'的全部值,以便在追加所有不同的變量後可以看到變量的最終值? –

+2

_你自己的任何調試工作...? – CBroe

+0

我遇到同樣的問題 –

回答

6

要直接回答這個問題,問題很可能是您沒有urlencode(確保URL傳輸安全)重定向網址。最快的修復將是:

$token_url = "https://graph.facebook.com/oauth/access_token?" 
    . "client_id=" . APP_ID . "&redirect_uri=" . urlencode(APP_URL . $_SESSION["request_uri"]) 
    . "&client_secret=" . APP_SECRET . "&code=" . $code; 

但是,我也建議你看看Facebook的SDK,因爲這一切都爲你。

2

你檢查的PHP SDK ......它相當廣泛,不錯..你只需要設置你的Facebook SDK文檔如下

$facebook = new Facebook(array(
       'appId' => 'your app id', 
       'secret'=> 'your app secret')); 

然後你可以檢索登錄網址爲

$loginURL = $facebook->loginUrl(array(
       'scope' => 'read_stream', 
       'redirect_uri' => 'http://yourdomain/path/to/page')); 

而且,它可以讓你更好地描述你的錯誤,這可能是由於重定向URI與應用的配置不匹配或者應用ID錯誤或者祕密或者完全不同的事情造成的。從here下載SDK

相關問題