Facebook图形登录 - 网站集成,失败获取令牌

时间:2013-09-07 17:25:01

标签: php facebook login opengraph connect

我已经阅读过有关facebook opengraph连接的内容 - 据我所知,登录程序分3步进行:

  1. 从facebook api调用中获取登录URL以创建自定义登录按钮 点击链接后,我们将被重定向到facebook登录页面

  2. 进行实际登录并重定向到我们在app facebook开发者页面中定义的网站

  3. 在此页面中,我们必须处理实际结果。问题出在这里:我明白我们必须使用令牌并向fb页面发出新请求以验证令牌(见下文)。

  4. 在此之后,我假设我们得到了用户的实际细节,但我从未设法执行此令牌请求,因此我不确定如何继续。

    $ch = curl_init("http://graph.facebook.com/oauth/access_token?    client_id=".$facebook_config['appId']."    
                                                              &client_secret=".$facebook_config['secret']."
                                                              &redirect_uri=".urlencode(SITE_DOMAIN)."/facebook_login_processor.php
                                                              &code=".$_GET['code']);
    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_error\n";
    } 
    else 
    {
        echo $data;
    }
    

    我收到关于redirect_uri的错误 - 不知怎的,它没有得到验证。

    {"error":{"message":"Missing redirect_uri parameter.","type":"OAuthException","code":191}}
    

    请记住,我在非公共网站上尝试此操作(域只在服务器和我的主机文件中注册)。这会产生问题吗?

    感谢您的帮助,感谢您的关注和帮助

    里卡多

    Ps:抱歉有任何错误 - 我正在打电话

1 个答案:

答案 0 :(得分:1)

基于facebook php sdk,下面的脚本在我的网站上运行良好。

    <?php
    require_once "lib/facebook.php";

    $scope = "create_note,email friends_groups,friends_interests";
    $redirecturl = "https://www.mysite.com/callback.php";

    $facebook = new Facebook(array('appId' => APP_ID,'secret' => APP_SECRET));
    $authurl = $facebook->getLoginUrl( array( 'scope' => $scope, 'redirect_uri' => $redirecturl );

    header("Location:$authurl");

    ?>

然后在callback.php

    <?php
    require_once "lib/facebook.php";

    $facebook = new Facebook(array('appId' => APP_ID,'secret' => APP_SECRET));
    $user = $facebook->getUser();
    if ($user) {
      try {
        $user_profile = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }

      if (!empty($user_profile)) {
         print_r($user_profile);
         // or do something here
      }
    }
    ?>

注意:您应该定义APP_ID和APP_SECRET。