2011-09-07 3 views
0

아래 코드에는 정의되지 않은 변수가 있습니다. 그 변수는 $ access_token입니다. 프로그램이 예외를 생성하지 않고 실행할 수 있도록 새로운 액세스 토큰을 얻는 코드를 추가해야합니다. oauth flow 등에서 Facebook 문서를 읽고 있었지만이 코드가 받아 들일만한 토큰 중 하나를 얻는 방법을 알 수없는 것 같습니다. 아무도 이것으로 할 수있는 것을 알고 있습니까?서명 된 요청 예제 및 액세스 토큰 가져 오기

<?php 

define('YOUR_APP_ID', 'x'); 
define('YOUR_APP_SECRET', 'x'); 

function get_facebook_cookie($app_id, $app_secret) { 
    $args = array(); 
    parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
    ksort($args); 
    $payload = ''; 
    foreach ($args as $key => $value) { 
    if ($key != 'sig') { 
     $payload .= $key . '=' . $value; 
    } 
    } 
    if (md5($payload . $app_secret) != $args['sig']) { 
    return null; 
    } 
    return $args; 
} 

$cookie = get_facebook_cookie(YOUR_APP_ID, YOUR_APP_SECRET); 

$access_token="214620421927216|fAAieRnJoDaWmBsG1stxfq4zKN4"; 
$url = 'https://graph.facebook.com/me?access_token=' . $access_token; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
$response = curl_exec($ch); 
curl_close($ch); 

$user = json_decode($response); 
print_r($user); 

?> 
<html> 
    <body> 
    <?php if ($cookie) { ?> 
     Welcome <?php ?> 
    <?php } else { ?> 
     <fb:login-button></fb:login-button> 
    <?php } ?> 
    <div id="fb-root"></div> 
    <script src="http://connect.facebook.net/en_US/all.js"></script> 
    <script> 
     FB.init({appId: '<?= YOUR_APP_ID ?>', status: true, 
       cookie: true, xfbml: true}); 
     FB.Event.subscribe('auth.login', function(response) { 
     window.location.reload(); 
     }); 
    </script> 
    </body> 
</html> 

답변

0

이 코드는 적절한 액세스 토큰을 얻는 데 훨씬 유용합니다.

<?php 

$app_id = "YOURS"; 
$app_secret = "YOURS"; 
$my_url = "YOURS"; 

session_start(); 
$code = $_REQUEST["code"]; 
echo $code . "</br>"; 

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."); 
} 

?> 
관련 문제