【问题标题】:Something wrong, with my facebook graph URL出了点问题,我的 Facebook 图表 URL
【发布时间】:2012-02-08 18:29:24
【问题描述】:

我在尝试从 facebook graph 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 帐户设置中转到我的授权应用时,它显示“此应用需要您的电子邮件地址”blahblah@yahoo.co.uk”

【问题讨论】:

  • 虽然您的“愿意付出一点”受到赞赏,但这不会鼓励您回答您的问题。事实上,它很可能会适得其反。
  • 如果您编辑问题并添加输出,这将有助于诊断。此外,使用 isset 检查 $graph['email'] 以查看它实际上是 null 还是空。
  • 它确实说它可以正确输出除电子邮件以外的所有信息,如果我使用令牌手动访问图形 url,则不会显示电子邮件地址..

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


【解决方案1】:

对于任何请求,您都有一个 $_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; ?>

【讨论】:

  • 非常感谢,言语无法解释我现在对你有多少爱!现在已经坚持了 4/5 天了!再次感谢您!
  • 抱歉,要将这些详细信息添加到数据库中,我会在以下行下添加查询:$useremail = $user_profile['email'];谢谢,杰克
  • 简短回答 - 不。详细信息在这里Facebook Platform Policies 它说:对于通过使用 Facebook API 获得的所有其他数据,您必须先获得向我们提供数据的用户的明确同意,然后才能将其用于任何目的,而不是将其显示回您的应用程序上的用户。此时您没有此明确同意,因此您不能将其存储在数据库中。
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多