Facebook(フェイスブック)連携モジュール

モジュールFacebookはOAuth認証を行ってFacebookのAPIを呼び出し、Facebookと連携するためのクラスです。

メソッド

getAppAccessToken(string $app_id = NULL, string $app_secret = NULL)
(returns string) facebookアプリの認証をし、Application Tokenを取得します。
引数$app_idでApp IDを、$app_secretでApp Secretを指定します。これらを指定しない場合、設定ファイルFacebook.phpapp_idapp_secretの設定が採用されます。
callAppApi(string $path, string $method, array $params = NULL, string $app_id = NULL, string $access_token = NULL, $accesss_token_auto_flag = FALSE)
(returns array) Application tokenを用いてfacebookアプリのGraph APIを呼び出し、結果を取得します。
$pathでGraph APIのpathを、$methodでAPIを呼び出すHTTPメソッドを'GET''POST''DELETE'から指定します。$paramsでAPIに渡す引数を連想配列で指定します。詳細はfacebook開発者ガイド「PHP SDK api」を参照してください。エラーの場合はFALSEを返します。
$app_idでApp IDを、$access_tokenでApplication Tokenを指定して認証します。これらを指定しない場合、設定ファイルFacebook.phpapp_idapp_access_tokenの設定が採用されます。accesss_token_auto_flagをTRUEにしておくと設定ファイルのapp_idapp_secretからApplication Tokenを自動生成して認証します。
認証に関する引数の有無と設定ファイルの関係について整理すると以下のようになります。
引数設定ファイル
$app_id$access_token$accesss_token_auto_flagapp_idapp_secretapp_access_token
ありありなし(FALSE)不要不要不要
なしなしなし(FALSE)必要不要必要
なし(NULL)なし(NULL)TRUE必要必要不要(自動生成)
getUserAccessToken($expires_return_flag = FALSE, string $app_id = NULL, string $app_secret = NULL, string $scope = NULL)
(returns string or array) ユーザの認証をし、User Access Tokenを取得します。
expires_return_flagTRUEにすると結果に有効期限を含め、以下の形式の連想配列で返します。
array(
	'access_token'	=> 'User Access Token',
	'expires'		=> '有効期限',
)
FALSEもしくは指定しない場合、戻り値はUser Access Tokenのみ文字列となります。
引数$app_idでApp IDを、$app_secretでApp Secretを、$scopeでユーザから許諾を得る(permissionをもらう)機能をカンマ区切り文字列で指定します。これらを指定しない場合、設定ファイルFacebook.phpapp_idapp_secretscopeの設定が採用されます。
callUserApi(string $path, string $method, array $params = NULL, string $access_token = NULL, $accesss_token_auto_flag = FALSE)
(returns array) User Access Tokenを用いてfacebookアプリのGraph APIを呼び出し、結果を取得します。
$pathでGraph APIのpathを、$methodでAPIを呼び出すHTTPメソッドを'GET''POST''DELETE'から指定します。$paramsでAPIに渡す引数を連想配列で指定します。詳細はfacebook開発者ガイド「PHP SDK api」を参照してください。エラーの場合はFALSEを返します。
$access_tokenでUser Access Tokenを指定して認証します。これを指定しない場合、accesss_token_auto_flagをTRUEにしておくことで設定ファイルFacebook.phpapp_idapp_secretの設定からApplication Tokenを自動生成し、それに基づいた認証が行われます(callAppApi(string $path, string $method, array $params = NULL, string NULL, NULL, TRUE)と同じ)。

使用例

facebookのアカウントで認証をするプログラムの例です。

<?php
final class ctrlFacebook extends CZCtrl {
	public function loginIndex() {
		if ($facebook_user = $this->newModule('facebook')->callUserApi('/me', 'get', NULL, NULL, TRUE)) {
			// 重複ログインを防止するため、ログアウト
			$this->newModule('login')->logout();

			$auth_values = array(
				'facebook_uid' => $facebook_user['id'],
			);
			$auth_column_names = array(
				'facebook_uid',
			);

			// FacebookのIDでログイン
			if ($this->newModule('login')->login($this->newModel('v_user'), $auth_values, $auth_column_names)) {
				// ログイン成功なら、遷移元のページへリダイレクト
				$this->newModule('login')->redirectSrcUrl();
			}


			/*
			 * 以下、ログイン失敗時の処理
			 */

			$condition_sentences = array(
				'mail_addr = :mail_addr',
			);
			$condition_values = array(
				'mail_addr' => $facebook_user['email'],
			);
			if ($user_id = $this->newModel('m_user')->getValue('user_id', $condition_sentences, $condition_values)) {
				// Facebookのメールアドレスがユーザ情報にあるなら、FacebookのIDと紐付け
				$this->newModel('m_user')->updateById($user_id, array(
					'facebook_uid' => $facebook_user['id'],
				));
			} else {
				// Facebookのメールアドレスがユーザ情報にないなら、ユーザ情報を新規登録
				$this->newModel('m_user')->insert(array(
					'mail_addr'			=> $facebook_user['email'],
					'last_name'			=> $facebook_user['last_name'],
					'first_name'		=> $facebook_user['first_name'],
					'facebook_uid'		=> $facebook_user['id'],
					'regist_datetime'	=> array('sql' => 'NOW()'),
				));
			}

			// 再度、FacebookのIDでログインし、遷移元のページへリダイレクト
			$this->newModule('login')->login($this->newModel('v_user'), $auth_values, $auth_column_names);
			$this->newModule('login')->redirectSrcUrl();
		}

		$this->newModule('err')->save('認証に失敗しました。');
		$this->redirect(array('index', 'login'), TRUE);
	}
}
?>

前後のページ

ページトップへ