【问题标题】:Facebook Access TokensFacebook 访问令牌
【发布时间】:2012-06-02 22:17:36
【问题描述】:

我正在尝试使用以下代码获取 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

有人知道解决办法吗?

【问题讨论】:

    标签: php facebook


    【解决方案1】:

    file_get_contents 方法可能有问题,因为您正在构建的 url 看起来没问题。

    如果你搜索"facebook file_get_contents failed to open stream",你会得到很多关于这个问题的结果,很多都是关于堆栈溢出的。
    file_get_contents 看起来像一个 HTTPS 问题,正如此线程中的状态:[function.file-get-contents]: failed to open stream

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

    【讨论】:

      【解决方案2】:

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

      您在请求令牌时使用FB_APP_IDFB_SECRET_IDFB_PAGE_URL,但在响应中我可以看到它们分别定义为:“ID HERE”、“SECRECT”和“URLHERE”。

      【讨论】:

      • 没有删除它们,因为您不愿意提供这些信息。
      【解决方案3】:

      我已经设法使用 PHP SDK 解决了这个问题, 在与 SDK 进行了长时间的斗争之后,让它做我想做的事情。

      我也确实提出了另一个具有相同想法但有另一个问题的问题。 现在这个问题已经解决了。

      查看此问题以获得此问题的答案:Facebook Access Token Server Side Authentication

      【讨论】:

        猜你喜欢
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 2012-09-30
        • 2012-06-10
        • 2013-01-11
        • 2012-03-30
        相关资源
        最近更新 更多