Хранение токена доступа - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь решить эту проблему уже три дня, это действительно просто для тех, кто хорошо знает API открытого графика. Я новичок в интеграции с Facebook, но у меня есть некоторый опыт работы с PHP.

По сути, все, что я пытаюсь сделать, это получить следующую информацию от пользователей и сохранить ее в базе данных.

Идентификатор пользователя Facebook: название Пол E-mail

Я сделал идентификатор пользователя, имя и пол, используя:

$contents = file_get_contents ('https://graph.facebook.com/'.$user);
$json=json_decode($contents,true);
$userid = $json['id'];
$username = $json['name'];
$usergender = $json['gender'];
$useremail = $json['email'];

Это работает, и я понимаю, что мне нужно запросить разрешения на доступ к электронной почте, которые я сделал с помощью этого кода:

$app_id = "211665122244023";

     $canvas_page = "http://apps.facebook.com/midcitymafia/";

     $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,publish_actions";

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

Но как мне получить токен доступа, а затем использовать его для получения электронной почты из графика?

## ОБНОВЛЕНИЕ, ЭТО МОЙ ТЕКУЩИЙ КОД, ЕЩЕ НЕ ВИДИТЕ, ЧТОБЫ ЭТО РАБОТАЕТ
require 'src/facebook.php';
$app_id = "211665122244023";

     $canvas_page = "http://apps.facebook.com/midcitymafia/";

     $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,publish_actions";

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);


     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
         $graph = json_decode(file_get_contents("https://graph.facebook.com/".$user_id . "/?accesstoken=" .$data['access_token']));
     }

$userid = $graph->id;
$username = $graph->name;
$usergender = $graph->gender;
$useremail = $graph->email;

?>

<br>

<?php echo 'ID: ' . $userid; ?>
<br>
<?php echo 'Name: ' . $username; ?>
<br>
<?php echo 'Gender: ' . $usergender; ?>
<br>
<?php echo 'Email: ' . $useremail; ?>

1 Ответ

1 голос
/ 11 января 2012

signed_request содержит пользователя access_token внутри себя.

В вашем случае access_token в $data['access_token']

Хранение пользователя access_token не самая лучшая идея, так как они предоставлены на короткий период времени и истекли позже. Чтобы получить постоянный access_token, вам необходимо запросить разрешение offline_access у пользователя (лично я бы не рекомендовал его, поскольку вы можете достичь большинства целей, не требуя offline_access, во многих случаях приложение access_token может соответствовать вашим потребностям).

...