人人商城接入facebook授权登录
解决办法
网上有很多种引入, 像js ios android等, 这里介绍的是用php sdk引入 因为PHP是世界上最好的语言
先上fb dev登录文档: FB develop
下面是接入前准备的东西:
-
FB_APP_ID 与FB_APP_SECRET

-
回调链接: 如域名/xxx/fb-callback.php
登录后, 新增应用程式: 填写名称-选择网站接入模式
配置好有效的OAuth重新导向URI与取消授权回呼地址

-
facebook-php-sdk github-fb-php-sdk

所有东西准备好后, 开始有码操作
在登录入口方法生成fb的loginUrl链接
session_start(); // 需要开启session
try {
$fb = new \Facebook\Facebook([
'app_id' => $wapset['facebook_app_id'],
'app_secret' => $wapset['facebook_secret'],
'default_graph_version' => 'v2.10',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email']; // Optional permissions 'first_name', 'last_name'
$loginUrl = $helper->getLoginUrl(mobileUrl('account/fbCallback', array('i' => $_GPC['uniacid']), true), $permissions);
} catch (Exception $e) {
$this->message($e->getMessage());
}
编写回调方法
public function fbCallback() {
global $_W,$_GPC;
load()->func('logging');
$uniacid = intval($_GET['i']);
$wapset = m('common')->getSysset('wap', $uniacid);
require EWEI_SHOPV2_PATH . '/vendor/autoload.php';
// fb 回调
session_start();//启用session,防止facebook报错,不启用session会报错,可以自行尝试,不会最好了
if($_REQUEST['error'] == 'access_denied'){
header('location: ' . mobileUrl());
}
$facebookConfig = [
'app_id' => $wapset['facebook_app_id'],
'app_secret' => $wapset['facebook_secret'],
'default_graph_version' => 'v2.10',
];
$fb = new \Facebook\Facebook($facebookConfig);
// 登录助手, 我管他叫
$helper = $fb->getRedirectLoginHelper();
if(isset($_GET['state'])){
$_SESSION['FBRLH_state']=$_GET['state'];
}
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
$message = 'Graph returned an error: ' . $e->getMessage();
logging_run('facebook login failed'.$message);
echo '<script>alert("'.$message.'");location.href="'. mobileUrl('account/login', [], true) . '"</script>';
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
$message = 'Facebook SDK returned an error: ' . $e->getMessage();
logging_run('facebook login failed'.$message);
echo '<script>alert("'.$message.'");location.href="'. mobileUrl('account/login', [], true) . '"</script>';
}
// 验证token
if (!isset($accessToken)) {
if ($helper->getError()) {
$message = "Error: " . $helper->getError() . "\n";
$message .= "Error Code: " . $helper->getErrorCode() . "\n";
$message .= "Error Reason: " . $helper->getErrorReason() . "\n";
$message .= "Error Description: " . $helper->getErrorDescription() . "\n";
} else {
$message = 'Bad request';
}
logging_run('facebook login failed'.$message);
echo '<script>alert("'.$message.'");location.href="'. mobileUrl('account/login', [], true) . '"</script>';
}
$oAuth2Client = $fb->getOAuth2Client();
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
$tokenMetadata->validateAppId($wapset['facebook_app_id']);
$tokenMetadata->validateExpiration();
if (! $accessToken->isLongLived()) {
try {
$accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
} catch (Facebook\Exceptions\FacebookSDKException $e) {
$message = 'Error getting long-lived access token'. $e->getMessage();
logging_run('facebook login failed'.$message);
echo '<script>alert("'.$message.'");location.href="'. mobileUrl('account/login', [], true) . '"</script>';
}
}
$_SESSION['fb_access_token'] = (string) $accessToken;
$fb->setDefaultAccessToken($accessToken);
// id,name,email 这里的字段根据自己想要的来填取
$response = $fb->get('/me?locale=en_US&fields=id,name,email');
$userNode = $response->getGraphUser();
$email = $userNode->getField('email');
$name = $userNode->getField('name');
$fb_user_id = $userNode->getField('id');
pp($userNode);
// TODO 添加自主授权流程, 插入member表
}
打印$userNode 如下图

经过一轮的操蛋流程后, 效果如图:




附加的想法
正常的网站授权流程是, 授权成功后, 还是需要注册的,这个注册也可以叫绑定, 这里的人人授权也可以做成,用wap端的来注册.
授权完成后, 跳转到一个页面(叫绑定或者注册). 用手机号或者邮箱来作为唯一的openid. 一般用手机号来绑定, 比如: wap_18819990000
本文详细介绍了如何在人人商城中集成Facebook登录功能,包括使用PHP SDK进行设置的步骤,从获取FB_APP_ID与FB_APP_SECRET到实现OAuth回调的完整过程。
3598

被折叠的 条评论
为什么被折叠?



