【2016年11月更新】facebook/graph-sdkの使い方【PHPでFBログイン】
久しぶりに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);
}
以上で完了です。