・共通(google.phpとする)
define('GG_CONSUMER_KEY', '(googleから取得)');
define('GG_CONSUMER_SECRET', '(googleから取得)');
define('GG_AUTHURL', 'https://accounts.google.com/o/oauth2/auth');
define('GG_CALLBACK', '(自分のCALLBACK)'); 


・呼び出し
session_start();
require_once('google.php');

$google_t = array(
  'client_id' => GG_CONSUMER_KEY,
  'redirect_uri' => GG_CALLBACK,
  'scope' => 'profile email',
  'response_type' => 'code',
  'access_type' => 'offline'
);
$gg_link = GG_AUTHURL .'?'. http_build_query($google_t); 

<a href="<?= htmlspecialchars($gg_link); ?>">google login</a>


・CALLBACK
session_start();
require_once('google.php');

$TOKEN_URL = 'https://accounts.google.com/o/oauth2/token';
$INFO_URL = 'https://www.googleapis.com/oauth2/v1/userinfo';
$APP_URL = $_GET["state"];

$params = array(
  'code' => $_GET['code'],
  'grant_type' => 'authorization_code',
  'redirect_uri' => GG_CALLBACK,
  'client_id' => GG_CONSUMER_KEY,
  'client_secret' => GG_CONSUMER_SECRET,
);

$options = array('http' => array(
  'method' => 'POST',
  'content' => http_build_query($params))
);

$res = file_get_contents($TOKEN_URL, false, stream_context_create($options));
$token = json_decode($res, true);
if (isset($token['error'])) {
  // エラー処理
  // どっかへ戻る。
}

$access_token = $token['access_token'];
$params = array('access_token' => $access_token);

$profile = file_get_contents($INFO_URL . '?' . http_build_query($params));
$profile = json_decode($profile, true);

if (isset($profile['id']) && isset($profile['email'])) {
  // 成功
  // id, name, emailを書き込もう。
  // どっかへ戻る。
}
else {
  // エラー処理
  // どっかへ戻る。
}
google login