The Facebook SDK for PHP is a library with capable elements that empower PHP designers to effortlessly incorporate Facebook login and make solicitations to the Graph API. Today we are going to see how to log in with facebook API SDK v5 in PHP. Facebook SDK old version some response are deprecated. Now use should follow the latest version of SDK V5, It will be more efficient and extend a powerful class. Follow the below script implement facebook latest version SDK.
For using new SDK version you can get the more information about the user.
- Retrieve User’s Profile Information like id, email, birthday
- Get User’s Profile Picture based on large, medium, small size image
- Publish to User’s Timeline Like share button process.
- Retrieve User’s Timeline based on their profile privacy.
- Upload a File Photo, Video user timeline.
How to create the app and implement complete video tutorial.
Link: https://www.youtube.com/watch?v=UlqCL-I6jYw
Link: https://www.youtube.com/watch?v=UlqCL-I6jYw
1.First, create the facebook app and get the app secret id and key.
Once created the app you will get some unique id and key. For getting more about create facebook watch a youtube video.
Now create a new folder in your host, Download latest version SDK file. Extract with your local path.
Complete guidelines video
facebook_config.php
Create a new file called facebook_config.php. include the SDK new version code and set the config of your facebook app.
<?php session_start(); require_once __DIR__ . '/src/Facebook/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => '********', // Replace {app-id} with your app id 'app_secret' => '*********', 'default_graph_version' => 'v2.2', ]); ?>
Database
Create a new table called 'facebook_users' with the below structure column.This table we will store facebook users response.CREATE TABLE `facebook_users` ( `id` int(11) NOT NULL, `oauth_id` varchar(100) NOT NULL, `name` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `gender` varchar(5) NOT NULL, `picture` varchar(250) NOT NULL, `link` varchar(250) NOT NULL, `cover` varchar(300) NOT NULL, `last_update` timestamp NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Database Connection
Create a new file 'db_config.php' for database connection.Set your database connection.<?php $db = new mysqli("localhost","user","password","database"); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } ?>
Index.php
Create a new index file include facebook config file. this page will check the user response information. In case your access token already exists the session, the page will be redirected to profile page.<?php include_once("facebook_config.php"); if(!isset($_SESSION['fb_access_token'])) : $helper = $fb->getRedirectLoginHelper(); $permissions = ['email']; $redirect = 'http://yourhost/yourfolder/fb-callback.php'; $loginUrl = $helper->getLoginUrl($redirect,$permissions); echo '<a href="' . htmlspecialchars($loginUrl) . '">Login with Facebook!</a>'; else : header('Location: member.php'); endif; ?>
FB-callback.php
After getting the facebook response, We are storing the particular user access token to the session. Because based the access token only we can get the facebook user response.
<?php include_once("facebook_config.php"); $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"; } else { header('HTTP/1.0 400 Bad Request'); echo 'Bad request'; } exit; } // Logged in echo '<h3>Access Token</h3>'; 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 '<h3>Metadata</h3>'; echo '<pre>'; print_r($tokenMetadata); // Validation (these will throw FacebookSDKException's when they fail) $tokenMetadata->validateAppId("1721283891461664"); // 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 "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; exit; } echo '<h3>Long-lived</h3>'; var_dump($accessToken->getValue()); echo '<pre>'; print_r($accessToken->getValue()); } $_SESSION['fb_access_token'] = (string) $accessToken; // User is logged in with a long-lived access token. // You can redirect them to a members-only page. header('Location:member.php'); ?>
member.php
$fb->get() this function it will get the particular user response based on their access token.
<?php include_once("db_config.php"); include_once("facebook_config.php"); if(!isset($_SESSION['fb_access_token'])) : $helper = $fb->getRedirectLoginHelper(); $permissions = ['email']; $redirect = 'http://localhost/demo/sales/facebook/fb-callback.php'; $loginUrl = $helper->getLoginUrl($redirect,$permissions); echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>'; else : $user_token = $_SESSION['fb_access_token']; try { $response = $fb->get('/me?fields=id,name,email,birthday,gender,picture,cover,link',
$user_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; } $user = $response->getGraphUser(); $profile = $user->getPicture(); $oauth_id = $user["id"]; $user_information = array( 'name' => $user["name"], 'email' => $user["email"], 'gender' => $user["gender"], 'picture' => $user['picture']['url'], 'link' => $user["link"], 'cover' => $user['cover']['source'] ); ?>
Users information
After getting the response from facebook. store the user information to the database. if the user data already exists the just update the user information.
$user_check = $db->query("SELECT oauth_id FROM facebook_users WHERE oauth_id=$oauth_id"); $user_check_count = mysqli_num_rows($user_check); if($user_check_count) : $update =$db->query("UPDATE `facebook_users` SET `name`='".$user_information['name']."',`email`='".$user_information['email']."', `gender`='".$user_information['gender']."',`picture`='".$user_information['picture']."', `link`='".$user_information['link']."',`cover`='".$user_information['cover']."' WHERE oauth_id ='".$oauth_id."'"); else : $insert = $db->query("INSERT INTO `facebook_users` SET `oauth_id`='".$oauth_id."', `name`='".$user_information['name']."', `email`='".$user_information['email']."',`gender`='".$user_information['gender']."',`picture`='".$user_information['picture']."',`link`='".$user_information['link']."',`cover`='".$user_information['cover']."'"); endif; $query_user = $db->query("SELECT * FROM facebook_users WHERE oauth_id=$oauth_id"); $user_data = mysqli_fetch_assoc($query_user); echo '<pre>'; print_r($user_data); exit;
logout.php
Unset the access token session value.
<?php session_start(); session_unset($_SESSION['fb_access_token']); header("Location:index.php"); ?>
Reference
All the above PHP code and SDK file everything I have referred facebook site.
No comments:
Post a Comment