I have created the package to login with social networks to a website using unified interface.
The package is available on Composer with the name gelembjuk/auth

How does it work.

Installation

Code:
composer require gelembjuk/auth
Configuration

PHP Code:
$integrations = array(
    
'facebook' => array(
        
'api_key' => 'fake facebook api key',
        
'secret_key' => 'fake facebook secret key'
        
),
    
'twitter' => array(
        
'consumer_key' => 'fake twitter consumer key',
        
'consumer_secret' => 'fake twitter consumer secret'
        
),
    
'linkedin' => array(
        
'api_key' => 'fake linkedin api key',
        
'api_secret' => 'fake linkedin api secret'
        
),
    
'google' => array(
        
'application_name' => 'Your application name',
        
'client_id' => 'fake google api client id',
        
'client_secret' => 'fake google api client secret'
        
)
    ); 
Start login process (it can be separate PHP file)

PHP Code:
$socialnetwork $_REQUEST['network']; 

// do some check if social network name is correct and allowed

// create social network login object. The second argument is array of API settings for a social network
$network Gelembjuk\Auth\AuthFactory::getSocialLoginObject($socialnetwork,$integrations[$socialnetwork]);

//IMPORTANT. his must be an absolute url of your "social login completion" script
$redirecturl 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['REQUEST_URI']).'/completelogin.php';

// get auth url and use redirect url to back to complete login page
$url $network->getLoginStartUrl($redirecturl);
        
// remember the state. it will be used when complete a social login
$_SESSION['socialloginsate_'.$socialnetwork] = $network->serialize();

// this is optional. you can include a network name in your redirect url and then extract
$_SESSION['socialloginnetwork'] = $socialnetwork;

// redirect to auth url. It will forward a user to a social network login page
header("Location: $url",true,301);
exit; 
Complete login page. It is executed when a social network redirects a user back to your site to a $redirecturl

PHP Code:
// network name was saved in a session. get it from there
$socialnetwork $_SESSION['socialloginnetwork'];

// do everything in a try-catch
try {
    
// create social network login object. The second argument is array of API settings for a social network
    
$network Gelembjuk\Auth\AuthFactory::getSocialLoginObject($socialnetwork,$integrations[$socialnetwork]);
    
    
// read some imput parameters needed to complete auth by this social network
    // some social network will send back extra information like a code to exchange then for a token
    
$arguments = array();
    
    foreach (
$network->getFinalExtraInputs() as $key) {
        
$arguments[$key] = $_REQUEST[$key];
    }
    
    
// restore to a state before redirect
    
$network->unSerialize($_SESSION['socialloginsate_'.$socialnetwork]);
            
    
// if fails then throws exception 
    
$profile $network->completeLogin($arguments);
    
    
// save user info to a session
    
$_SESSION['user'] = $profile;
    
    
// now user is loged in!
    
    //redirect user to home page
    
header("Location: index.php",true,301);
    exit;
    
} catch (
Exception $e) {
    echo 
"Somethign went wrong during the login process<br>";
    echo 
"Error is: ".$e->getMessage();

Returned $profile is an array with keys: `userid`,'name','email','imageurl'