我用PHP创建了一个简单的Facebook应用程序,用户名来迎接用户, 我也希望有电子邮件ID,以便显示。但我无法做到这一点。我正在使用的代码是,
require_once('facebook.php');
require_once('config.php');
$facebook = new Facebook(APIKEY, SECRETKEY);
$user=$facebook->require_login();
echo $user; // displaying the ID
<div style="padding: 10px;" id="greeting">
<fb:if-is-app-user uid="loggedinuser">
<h2>Hi <fb:name firstnameonly="true" uid="loggedinuser" useyou="false"/>! welcome to facebook</h2>
<fb:else>
<h2>Hi <fb:name firstnameonly="true" uid="loggedinuser" useyou="false"/>! welcome to facebook</h2>
</fb:else>
</fb:if-user-has-added-app>
</div>
我得到的输出是,
1000002020202020
Hi User! welcome to facebook
我希望电子邮件地址与用户名一起显示,我搜索了许多代码,但没有得到任何解决方案。如果你有任何好的Facebook教程网站,请发布链接..
答案 0 :(得分:8)
您可以直接获取电子邮件地址,而无需使用FQL。
// initialize facebook
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret' => APP_SECRET));
$session = $facebook->getSession();
if ($session) {
try {
$fbme = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
else
{
echo "You are NOT Logged in";
}
//getting the login page if not signned in
if (!$fbme) {
$loginUrl = $facebook->getLoginUrl(array('canvas' => 1,
'fbconnect' => 0,
'req_perms' => 'email,user_birthday,publish_stream',
'next' => CANVAS_PAGE,
'cancel_url' => CANVAS_PAGE ));
echo '<fb:redirect url="' . $loginUrl . '" />';
} else {
// $fbme is valid i.e. user can access our app
echo "You can use this App";
}
// getting the profile data
$user_id = $fbme[id];
$name=$fbme['name'];
$first_name=$fbme['first_name'];
$last_name=$fbme['last_name'];
$facebook_url=$fbme['link'];
$location=$fbme['location']['name'];
$bio_info=$fbme['bio'];
$work_array=$fbme['work'];
$education_array=$fbme["education"];
$email=$fbme['email'];
$date_of_birth=$fbme['birthday'];
此代码对我有用..我会使用电子邮件ID获取所需的所有信息。
NOTE: User has to allow us to get their Information during the Approval of Application.
答案 1 :(得分:2)
当用户授权您的应用程序时,您需要请求扩展权限,以便您可以访问用户电子邮件。
以下是使用新的PHP SDK和Graph API的示例:
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/config.php');
// initialize facebook
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret' => APP_SECRET));
$user = $facebook->getUser();
$session = $facebook->getSession();
// in case we don't have a valid session, we redirect asking for email extended permissions
if ($user == null || $session == null) {
$params = array();
$params["canvas"] = "1";
$params["fbconnect"] = "0";
$params["next"] = CANVAS_URL;
$params["req_perms"] = "email";
$loginUrl = $facebook->getLoginUrl($params);
echo '<fb:redirect url="' . $loginUrl . '"/>';
exit();
}
// get user email via the new graph api, using the fql.query method
$url = "https://api.facebook.com/method/fql.query";
$url .= "?access_token=" . $session['access_token'];
$url .= "&query=SELECT email FROM user WHERE uid={$user}";
$userData = simplexml_load_file($url);
$userEmail = $userData->user->email;
echo 'The user ID is: ' . $user;
echo 'The user name is: <fb:name uid="' . $user . '" />';
echo 'The user email is: ' . $userEmail;
答案 2 :(得分:1)
感谢所有帮助。我终于想出了如何做到这一点。
首先,我需要获取访问令牌,而不是用户会话,而是管理员。
所以,这是代码:
$url = 'https://graph.facebook.com/oauth/access_token';
$ch = curl_init();
$params = array(
'grant_type'=>'client_credentials',
'client_id'=>$appId,
'client_secret'=>$secret,
);
$opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
// set URL and other appropriate options
curl_setopt_array($ch, $opts);
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_HEADER, 0);
// grab URL and pass it to the browser
$adminAccessToken = curl_exec($ch);
// close cURL resource, and free up system resources
curl_close($ch);
然后,我可以使用facebook API来接收任何接受该应用程序的用户和扩展权限:
$fql = "select name, hometown_location, sex, pic_square, email from user where uid=1000000001";
$param = array(
'method' => 'fql.query',
'query' => $fql,
'access_token' =>$adminAccessToken ,
'callback' => ''
);
$fqlResult2 = $facebook->api($param);
使用访问令牌,我也可以将内容发布到用户的墙上。 :)