Written by Manabu Bannai

【2016年11月更新】facebook/graph-sdkの使い方【PHPでFBログイン】

PHP PROGRAMMING

久しぶりにFacebookログインをいじったら、仕様が変わっててダルかったので備忘録メモです。公式ドキュメントを見るのがいいかもしれませんが、どうにも分かりづらいので…。同じ気持ちの方は下記を参考にどうぞ。

php-graph-sdkをcomposerでインストール

まずは、composer.jsonを作成して下記を記載します。
» 参考:facebook/php-graph-sdk (github)

{
  "require" : {
    "facebook/php-sdk-v4": "~5.0"
  }
}

次にcomposer updateを実行します。

$ composer update

これでインストール完了。

Facebookログインフォームを作成する

Facebookアプリ登録を完了しておいてください。
» 参考:Facebookシェアのサンプルアプリを作成する

登録完了後にapp_idとapp_secretをメモっておきます。

login.phpのサンプルコード

$fb = new Facebook\Facebook([
	'app_id' => '【ここにapp_idを入力】',
	'app_secret' => '【ここにapp_secretを入力】',
	'default_graph_version' => 'v2.5',
	'default_access_token' => isset($_SESSION['facebook_access_token']) ? $_SESSION['facebook_access_token'] : 'APP-ID|APP-SECRET'
]);

session_start();
$helper = $fb->getRedirectLoginHelper();
$permissions = ['user_hometown']; // optional
$loginUrl = $helper->getLoginUrl($home_url . 'fb-callback.php', $permissions);
echo htmlspecialchars($loginUrl);

fb-callback.phpを作成する

fb-callback.phpはほぼマニュアルコピペでOKかと。
下記のとおりで、ログイン完了したらリダイレクトするようにしておきます。

<?php
$fb = new Facebook\Facebook([
	'app_id' => '【ここにapp_idを入力】',
	'app_secret' => '【ここにapp_secretを入力】',
	'default_graph_version' => 'v2.5',
]);

$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)) {
  // Logged in!
  $_SESSION['facebook_access_token'] = (string) $accessToken;
} elseif ($helper->getError()) {
  // The user denied the request
}

header('Location: add.php?loggedin');

Facebookログイン済みのユーザー情報を取得する

つぎに、ログイン完了しているユーザーデータを表示する方法です。
下記をそのままコピペで動きます。

// 訪問者がすでにFacebookログインしているかどうかを確認
if (isset($_SESSION['facebook_access_token'])) {

	try {
		$response = $fb->get('/me?fields=id,email,gender,link,locale,name,timezone,updated_time,verified,last_name,first_name,middle_name', $_SESSION['facebook_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;
	}

	$user = $response->getGraphUser();
	var_dump($user);
}

以上で完了です。

※P.S:無料メルマガで発信中:過去の僕は「ブログ発信で5億円」を稼ぎました。次は「30億円」を目指します。挑戦しつつ、裏側の思考を「メルマガ」から発信します。不満足なら1秒で解約できます。無料登録は「こちら」です。