php之Facebook第三方登录

  1. 首先需要有一个Facebook的账号,然后打开网站https://developers.facebook.com,Facebook的开发者网站,对于英文不好的人(作者就是),可以选择中文版,或者翻译成中文版

  2. 创建应用,登录进来以后,点击右上角的“添加新应用按钮”,在弹出的框中填写应用名称以及联系邮箱,然后点击创建应用编号,完成图片验证以后点击提交。

  3. 提交完成进入添加产品页面,选择Facebook登录,然后点击左侧栏的控制面板按钮,来到控制面板页面,点击设置下面的基本,可以看到应用编号,应用密钥,显示名称,名称空间,应用域名,联系邮箱等等。。编号和密钥代码中会用到。在应用域名那一栏填写需要第三方登录的域名;填好以后滚动到最下面,点击添加平台,这里会让你输你的网站地址,也就是你的网站入口地址,填上就OK,然后点击保存更改(好像这里的地址是需要加上http的)

  4. 再点击左侧菜单栏的Facebook登录,点击设置,在右侧的选项中有一个“有效 OAuth 跳转 URI”,在这里输入你的登录成功回调地址(貌似这里现在需要HTTPS才行),填写完成以后点击保存即可

  5. 应用配置好以后,选择自己的sdk。点击头部的文档连接,然后翻到网页的底部会看到“跨平台连接各种接口并进行开发”,选择PHP SDK,下载GitHub上的PHP SDK解压以后将Facebook文件夹放在项目目录;然后回到网页,点击示例里面的Facebook 登录 (OAuth 2.0)里面有登录的测试代码

php之Facebook第三方登录_第1张图片

6、废话不多说,上代码:(首先要引入)

①获取登录连接的代码

获取登录链接
//引入自动加载文件
require_once './autoload.php';

//创建实例
$fb = new \Facebook\Facebook(
       'app_id' => APPID, // 这里就是应用的APPID
       'app_secret' => APP_SECRET, //这里填写应用的密钥
       'default_graph_version' => version,//这里sdk的版本号
]);

$helper = $fb->getRedirectLoginHelper();

//需要获取的登录用户参数,有的参数需要权限
$permissions = ['email']; // Optional permissions 

//获取到的登录连接
$loginUrl = $helper->getLoginUrl(这里填回调地址, $permissions);
$loginUrl = htmlspecialchars($loginUrl);

②处理登录回调获取access token

根据回调获取access_token
//引入自动加载文件
require_once './autoload.php';

$fb = new \Facebook\Facebook([
    'app_id' => APPID, // 这里就是应用的APPID        
    'app_secret' => APP_SECRET, //这里填写应用的密钥        
    'default_graph_version' => version,//这里sdk的版本号
]);

$helper = $fb->getRedirectLoginHelper();

try {
    $accessToken = $helper->getAccessToken();
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
    // When Graph returns an error
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
    // When validation fails or other local issues
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

if (! isset($accessToken)) {
    if ($helper->getError()) {
        header('HTTP/1.0 401 Unauthorized');
        echo "Error: " . $helper->getError() . "\n";
        echo "Error Code: " . $helper->getErrorCode() . "\n";
        echo "Error Reason: " . $helper->getErrorReason() . "\n";
        echo "Error Description: " . $helper->getErrorDescription() . "\n";

        $this->redirect('/login');

    } else {
        header('HTTP/1.0 400 Bad Request');
        echo 'Bad request';
    }
    exit;
}

// Logged in
//echo '

Access Token

'; //var_dump($accessToken->getValue()); // The OAuth 2.0 client handler helps us manage access tokens $oAuth2Client = $fb->getOAuth2Client(); // Get the access token metadata from /debug_token $tokenMetadata = $oAuth2Client->debugToken($accessToken); //echo '

Metadata

'; //var_dump($tokenMetadata); // Validation (these will throw FacebookSDKException's when they fail) $tokenMetadata->validateAppId(C('APP_ID')); // Replace {app-id} with your app id // If you know the user ID this access token belongs to, you can validate it here //$tokenMetadata->validateUserId('123'); $tokenMetadata->validateExpiration(); if (! $accessToken->isLongLived()) { // Exchanges a short-lived access token for a long-lived one try { $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); } catch (\Facebook\Exceptions\FacebookSDKException $e) { echo "

Error getting long-lived access token: " . $helper->getMessage() . "

\n\n"; exit; } //echo '

Long-lived

'; //var_dump($accessToken->getValue()); } //这就是回调的access token $_SESSION['fb_access_token'] = (string) $accessToken;

③利用access token获取用户信息

获取用户信息
//引入自动加载文件
require_once './autoload.php';

$fb = new \Facebook\Facebook([
    'app_id' =>'APP_ID', // Replace {app-id} with your app id
    'app_secret' => 'APP_SECRET',
    'default_graph_version' => 'DEFAULT_GRAPH_VERSION',
]);

try {
    // Returns a `Facebook\FacebookResponse` object
    //fields后面的参数是要获取的用户信息
    $response = $fb->get('/me?fields=id,name,email',    $_SESSION['fb_access_token']);//$_SESSION['fb_access_token']
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

//获取用户Facebook信息
$user = $response->getGraphUser();
 

 

 

你可能感兴趣的:(PHP)