微擎-人人商城接入Facebook授权登录

本文详细介绍了如何在人人商城中集成Facebook登录功能,包括使用PHP SDK进行设置的步骤,从获取FB_APP_ID与FB_APP_SECRET到实现OAuth回调的完整过程。

人人商城接入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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值