如何从Facebook手动建立登录流程获取访问代码

时间:2014-06-29 12:17:32

标签: php facebook facebook-graph-api facebook-login facebook-access-token

我正在尝试manually build a login flow,以便我们的用户可以通过他们的Facebook帐户登录我们的网站。

无论如何,我已经陷入了“确认身份”的步骤,我已经通过使用$_GET["code"]传递了我收到的代码来获取带有网址的access_token

https://graph.facebook.com/oauth/access_token?client_id={app-id}&redirect_uri={redirect-uri}&client_secret={app-secret}&code={code-parameter}

访问此网址时,我可以看到access_code和过期。无论如何,我想要做的是让程序访问页面,然后将整个内容(或只是access_code部分)复制到php代码中的变量中。

我试过这个:

$access_token = readfile("https://graph.facebook.com/oauth/access_token?client_id=834481703238074&redirect_uri=http://example.co/app.php&client_secret={secret_code}&code=$code");

但它不起作用。我该怎么办?解决这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我从问题中理解的是,您只是希望从访问令牌网址获取访问令牌。 (如果我错了,请纠正我)

要做到这一点 -

$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$access_token = $params['access_token'];

答案 1 :(得分:0)

我已经创建了这个PHP函数,你可以使用它:

function getAccessToken($app_id, $secret, $base_url, $code) {
    $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/v2.0/oauth/access_token?'. 'client_id=' . $app_id . '&redirect_uri=' . urlencode($base_url) . '&client_secret=' . $secret . '&code=' . $code);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $r  = curl_exec($ch);
    $r = strstr(str_replace('access_token=', '', $r), '&expires=', true);
    return $r;
}

返回access_token字符串,只需传递app_idapp_secretredirect_uri&来自code

$_GET['code']

您可能想知道为什么我使用strstr()以及str_replace(),因为/oauth/access_token的标头是text/plain而不是JSON请记住,此access_token最多持续2小时,您可以将其延长至持续60天