私のFacebookグラフURLで何か問題があります
-
27-10-2019 - |
質問
FacebookグラフAPIから情報にアクセスしようとするとき、私は明らかに何か間違ったことをしています。ここに私のページのコードがあります。
ユーザーのメールアドレス以外に必要なものすべてを取得します。以下のコードで見られるように、要求した拡張許可が必要だと思います。
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; ?>
$ Graph変数配列をダンプして、それが保持している情報を確認しました。これが結果でした。
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" }
メールアドレスが含まれていないため、アクセストークン /アクセストークンを使用してグラフにアクセスすることに明らかに問題があります。
このアプリの下にあるFacebookアカウント設定で認定アプリに行くと、「このアプリにはメールアドレスが必要です」と書かれています。
解決
あなたが持っている $_REQUEST["signed_request"]
どんなリクエストでも、ユーザーがアプリを承認したかどうかは関係ありません。 Facebookにまったくログインしていないユーザーにもあります。
PHP-SDKを使用して、ユーザーのプロフィールを取得します http://developers.facebook.com/docs/reference/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; ?>
所属していません StackOverflow