我正在制作会员订购系统,我想让用户无需注册,他们可以直接登录Facebook。
问题是,此方法中的数据流是什么?例如,Facebook是否返回用户帐户/ ID /电子邮件或任何其他信息,以便我可以将它们插入我的系统,或者它只是一个表明他/她已登录的会话?
另外,我想收集他们的电话号码(订单确认)。如果访问者没有在Facebook帐户中具体说明,如何处理案例?
以下是我研究后的代码,但似乎只能返回会员ID?
<?php
define('YOUR_APP_ID', 'YOUR APP ID');
//uses the PHP SDK. Download from https://github.com/facebook/php-sdk
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => 'YOUR APP SECRET',
));
$userId = $facebook->getUser();
?>
<html>
<body>
<div id="fb-root"></div>
<?php if ($userId) {
$userInfo = $facebook->api('/' . $userId); ?>
Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<fb:login-button></fb:login-button>
<?php } ?>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR_APP_ID', // App ID
channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
</body>
</html>
答案 0 :(得分:4)
你有没有注意到你的线上有这个:
<?php if ($userId) {
$userInfo = $facebook->api('/' . $userId); ?>
Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<fb:login-button></fb:login-button>
<?php } ?>
您可以执行以下操作,而不是使用$ userId:
$userInfo = $facebook->api('/me','GET');
这将为您提供有关当前登录用户的信息。
现在,当用户授予您的网站权限时,facebook API返回的数据取决于您向用户请求的权限。 在这里,您可以找到用户对象数据的列表,如果需要,可以返回该数据以及相应的权限。 https://developers.facebook.com/docs/reference/api/user/
由于您需要的某些数据,例如手机号码或电子邮件地址,在Facebook上不是强制性的,也许最适合您的方法是使用注册表格: https://developers.facebook.com/docs/plugins/registration/
注册插件可让人们轻松注册您的网站 用他们的Facebook帐户。该插件是一个简单的iframe 可以放入你的页面。登录Facebook后,人们会看到一个表单 在适当的情况下,这预先填写了他们的Facebook信息。
注册插件让您可以灵活地索取 Facebook API无法提供的其他信息 (例如,某人最喜欢的电影)。该插件还可以让人们 谁没有Facebook帐户 - 或者不想注册 您的网站使用Facebook - 使用与其相同的表单 与Facebook连接。这样就无需您提供 两个单独的登录体验。
答案 1 :(得分:2)
您可以使用以下网址查看您可以从Facebook获得的所有信息。
https://developers.facebook.com/tools/explorer
很容易理解我们可以从Facebook获得的信息。
我的个人建议是坚持使用java-script API进行Facebook集成,我发现它更有用。 要使用Facebook图形API来获取有关任何用户的信息,您将需要一个访问令牌,因此流量显然应从那里开始,然后初始化您的每个请求,如果在处理完您的响应后电话号码不在Facebook帐户中应该以另一种方式请求电话号码, 我希望上面的URL可以帮助您了解您可以向Facebook请求的所有用户信息。
答案 2 :(得分:1)
我建议您使用经过良好测试的图书馆,例如Opauth或HybridAuth。
通过它们,您可以要求Facebook存储的任何额外数据。您还可以使用其他网站(如Google或Twitter)进行身份验证。
请务必遵循Facebook recommendations,并且不要立即要求所有权限。至少,尝试以Facebook用户身份登录,看看是否只向用户显示了一个要求权限的对话框。某些权限(例如,创建事件)不止一次要求用户授权。这是让他们退出你网站的可靠方法。
看到它看起来像you can't be sure that the email address has been verified by Facebook。
答案 3 :(得分:1)
虽然这不是一个直接的答案我会建议你在github研究这个cake-php插件的实现
答案 4 :(得分:1)
如果您使用PHP,为什么不使用FB提供的PHP包装器API而不是JS。 我一直在使用HybridAuth作为我的PHP项目,你应该尝试一下,好处是,你可以轻松添加更多提供商,如谷歌,Twitter,而不必去当您认为是时候整合更多社交功能时,通过每个API。
答案 5 :(得分:1)
我现在正在项目中使用Facebook SDK for PHP,这是我请求用户数据的方式:
// If user is not logged in, set the login URL asking for permissions
if( $userId == 0 ) {
// Generate a login url
$url = $facebook->getLoginUrl( array( 'scope' => 'email, user_status' ) );
... Your Login button ...
} else {
// Get user's info
$userdata = $facebook->api( '/me' );
$data = array(
'first_name' => $userdata['first_name'],
'last_name' => $userdata['last_name'],
'username' => $userdata['username'],
'email' => $userdata['email'],
'languages' => $userdata['languages'],
'locale' => $userdata['locale'],
'timezone' => $userdata['timezone'],
'gender' => $userdata['gender'],
'location' => $userdata['location'],
'hometown' => $userdata['hometown'],
);
print_r( $data );
}