1,在Facebook页面创建自己的应用
2,选择应用的类型
3,填写好app的名字与app的归类
4,配置及其他填写可以先暂时不填,返回应用页。如图。
5,在setting页面配置自己的app(localhost处需要填写自己服务器的地址)
6,这样Facebook页面的app配置就OK了。。从setting页面我们可以获取App ID和App Secret
APP ID:111xxxxx232*****12
App Secret:bbd4XXXXX15b04*****11c21b5b
7,Facebook进行登录
7-1:controller
<?php
class test extends MY_Controller{
public function __construct() {
parent::__construct();
session_start();
}
//此处为Facebook登录授权页面
public function facebook_login(){
$config = $this->config->item('facebook');//此处为Facebook的app id和app secret,保存在配置文件中,你也可以保存到其他地方
$this->load->library('fb_share_service', $config);
$url = $this->fb_share_service->login_url(base_url().'fb_callback');
$this->session->set_userdata('FBRLH_state', $_SESSION['FBRLH_state']);
if (!empty($url)) {
redirect($url);//此处在向Facebook发送请求,获取access token。
}
}
//此处为Facebook回调函数页面
public function facebook_callback(){
$_SESSION['FBRLH_state'] = $this->session->userdata('FBRLH_state');
$config = $this->config->item('facebook');
$this->load->library('fb_share_service', $config);
$facebook_user_info = $this->fb_share_service->login_callback(base_url() . 'fb_callback');
if (!empty($facebook_user_info)) {
$token['fb_token'] = $facebook_user_info['token'];
$token['fb_id'] = $facebook_user_info['user_id'];
log_message('debug', 'fb_token:'.$token['fb_token']);
log_message('debug', 'fb_id:'.$token['fb_id']);
} else {
$handler_flg = FALSE;
}
}
}
7-2:library
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once(APPPATH.'third_party/facebook/FacebookSession.php');
require_once(APPPATH.'third_party/facebook/FacebookRequest.php');
require_once(APPPATH.'third_party/facebook/GraphUser.php');
require_once(APPPATH.'third_party/facebook/FacebookRequestException.php');
require_once(APPPATH.'third_party/facebook/FacebookRedirectLoginHelper.php');
class fb_share_service
{
private $app_id;
private $app_secret;
public function fb_share_service($config)
{
$this->app_id = $config['appId'];
$this->app_secret = $config['secret'];
log_message('debug', 'Facebook_config_appId:'.$config['appId']);
log_message('debug', 'Facebook_share_appId:'.$this->app_id);
log_message('debug', 'Facebook_config_secret:'.$config['secret']);
log_message('debug', 'Facebook_share_secret:'.$this->app_secret);
FacebookSession::setDefaultApplication($this->app_id, $this->app_secret);
}
/**
* create login url for facebook
* @param string $callback_url 此处的callback url是在服务器自定义的回调函数
*/
public function login_url($callback_url)
{
$helper = new FacebookRedirectLoginHelper($callback_url, $apiVersion = NULL);
return $helper->getLoginUrl(array('publish_actions'));
}
/**
* get access_token from callback
* @param string $callback_url
*/
public function login_callback($callback_url)
{
$helper = new FacebookRedirectLoginHelper($callback_url);
try {
$session = $helper->getSessionFromRedirect();
if (!empty($session)) {
$token = $session->getToken();
if (!empty($token)) {
$appsecret_proof= hash_hmac('sha256', $token, $this->app_secret);
$request = new FacebookRequest(
$session,
'GET',
'/me/permissions',
array('appsecret_proof' => $appsecret_proof)
);
$response = $request->execute();
$response_data = $response->getResponse()->data;
if (is_array($response_data)) {
foreach ($response_data as $key => $value) {
$permission = $value->permission;
if ('publish_actions' == $permission) {
$user_profile = (new FacebookRequest(
$session,
'GET',
'/me',
array('appsecret_proof' => $appsecret_proof)
))->execute()->getGraphObject(GraphUser::className());
$res['user_id'] = $user_profile->getId();
$res['token'] = $token;
return $res;
}
}
}
}
}
return NULL;
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
log_message('debug', 'FacebookRequestException');
log_message('error', $ex->getMessage());
return NULL;
} catch(\Exception $ex) {
log_message('debug', 'Exception');
log_message('error', $ex->getMessage());
// When validation fails or other local issues
return NULL;
}
}
}