Question

Je suis évidemment en train de faire quelque chose de mal en essayant d'accéder aux informations de l'API graphique de facebook, voici le code de ma page:

Il va chercher tout ce que je besoin autre que l'adresse e-mail des utilisateurs, je comprends que vous avez besoin des autorisations étendues que j'ai demandé comme vu dans mon code ci-dessous.

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);

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



$userid =  $user_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; ?>

Je vidé le tableau de variable graphique $ pour voir les informations qu'elle détenait, ce fut le résultat:

array(7) { ["id"]=> string(10) "1469088864" ["name"]=> string(10) "Jack Brown" ["first_name"]=> string(4) "Jack" ["last_name"]=> string(5) "Brown" ["username"]=> string(11) "thebestjack" ["gender"]=> string(4) "male" ["locale"]=> string(5) "en_GB" }

Il ne contient pas l'adresse e-mail donc il y a évidemment un problème avec le jeton / utilisant l'accès jeton d'accès pour accéder au graphique.

Quand je vais à mes applications autorisées sur mes paramètres de compte Facebook dans cette application, il dit « cette applications a besoin de votre adresse e-mail « blahblah@yahoo.co.uk »

Était-ce utile?

La solution

vous avez une $_REQUEST["signed_request"] pour toute demande, peu importe si l'utilisateur a autorisé votre application ou non. vous avez même pour les utilisateurs qui ne sont pas connectés à Facebook du tout.

utilisation php-sdk pour récupérer le profil de l'utilisateur http: //developers.facebook .com / documents / référence / php / facebook-api /

<?php
require_once('php-sdk/facebook.php');

$config = array(
  'appId' => '211665122244023',
  'secret' => 'YOUR_APP_SECRET',
);

$facebook = new Facebook($config);
$user_id = $facebook->getUser();
$login_url = $facebook->getLoginUrl(array(
    scope => 'email,publish_actions',
    redirect_uri => $canvas_page,));

if($user_id) {
  try {
    $user_profile = $facebook->api('/' . $user_id,'GET');
    $userid =  $user_id;
    $username = $user_profile['name'];
    $usergender = $user_profile['gender'];
    $useremail = $user_profile['email'];

  } catch(FacebookApiException $e) {
    echo("<script> top.location.href='" . $login_url . "'</script>");
    error_log($e->getType());
    error_log($e->getMessage());
  }   
} else {
    echo("<script> top.location.href='" . $login_url . "'</script>");
}
?>
<?php if (isset($useremail)) : ?>
<br>
<?php echo 'ID: ' . $userid; ?>
<br>
<?php echo 'Name: ' . $username; ?>
<br>
<?php echo 'Gender: ' . $usergender; ?>
<br>
<?php echo 'Email: ' . $useremail; ?>
<?php endif; ?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top