簡體   English   中英

Facebook訪問令牌

[英]Facebook Access Tokens

我正在嘗試使用以下代碼獲取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.");
     }
}

來自服務器端身份驗證,但我一直收到此錯誤:

    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

有人知道解決辦法嗎?

file_get_contents方法可能存在問題,因為您正在構建的url看起來不錯。

如果您搜索"facebook file_get_contents failed to open stream"您將在此問題上獲得很多結果,而在堆棧溢出的地方很多。
看起來像HTTPS問題, file_get_contents作為此線程中的狀態: [function.file-get-contents]:無法打開stream

也許嘗試發出HTTP請求的其他方法? 也許卷曲?
只是為了進行測試,請嘗試使用命令行中的curl與php腳本中嘗試過的URL相同,然后看看會得到什么。

查看請求響應,您尚未定義Facebook應用程序設置。

當您請求令牌時,您正在使用FB_APP_IDFB_SECRET_IDFB_PAGE_URL ,但是在響應中,我可以看到它們分別定義為:“ ID HERE”,“ SECRECT”和“ URLHERE”。

我已經設法使用PHP SDK來解決此問題,並且在與SDK進行了長時間的爭奪之后,使其能夠執行我想要的操作。

我的確也提出了一個同樣想法但又有另一個問題的問題。 現在已經解決了這個問題。

查看此問題以獲取此問題的答案: Facebook訪問令牌服務器端身份驗證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM