Installation
Add the SDK via Composer (though note this is an archived package; consider alternatives like facebook/graph-sdk):
composer require facebook/php-sdk:v5.0.0
Basic Configuration
Initialize the SDK in config/services.php:
'facebook' => [
'app_id' => env('FACEBOOK_APP_ID'),
'app_secret' => env('FACEBOOK_APP_SECRET'),
'default_graph_version' => 'v12.0',
],
First Use Case: Login with Facebook In a controller, use the SDK to authenticate:
use Facebook\Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
$fb = new Facebook([
'app_id' => config('facebook.app_id'),
'app_secret' => config('facebook.app_secret'),
'default_graph_version' => config('facebook.default_graph_version'),
]);
// Redirect user to Facebook for login
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl(config('app.url') . '/callback');
return redirect()->to($loginUrl);
OAuth Flow
public function callback()
{
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
$fb->get('/me', $accessToken);
// Store token and fetch user data
} catch (FacebookSDKException $e) {
// Handle errors
}
}
API Calls
$response = $fb->get('/me?fields=name,email', $accessToken);
$userData = $response->getDecodedBody();
$data = [
'message' => 'Check this out!',
'link' => 'https://example.com',
'picture' => '@' . realpath('path/to/image.jpg'),
];
$fb->post('/me/feed', $data, $accessToken);
Webhooks
$challenge = $fb->verifyWebhookSignature(
file_get_contents('php://input'),
$_SERVER['HTTP_X_HUB_SIGNATURE'],
config('facebook.app_secret')
);
Laravel Facade: Create a facade for cleaner syntax:
// app/Facebook.php
namespace App;
use Facebook\Facebook;
class Facebook extends \Illuminate\Support\Facades\Facade {
protected static function getFacadeAccessor() { return 'facebook'; }
}
Register the facade in AppServiceProvider.
Middleware: Protect routes requiring Facebook auth:
public function handle($request, Closure $next)
{
if (!$request->session()->has('facebook_token')) {
return redirect()->route('facebook.login');
}
return $next($request);
}
Caching Tokens: Use Laravel’s cache to store tokens and reduce API calls:
$token = cache()->remember('facebook_token', now()->addHours(1), function () {
return $fb->getLongLivedAccessToken($shortToken);
});
Deprecation Warnings
facebook/graph-sdk for newer features (Graph API v12+).FacebookSession is deprecated; use Facebook\Facebook directly.Token Expiry
$longToken = $fb->getLongLivedAccessToken($shortToken);
Graph API Versioning
default_graph_version in config to avoid breaking changes. Example:
'default_graph_version' => 'v12.0', // Use the version you’re testing against
Error Handling
try {
$response = $fb->get('/me', $accessToken);
} catch (FacebookResponseException $e) {
// Handle HTTP errors (e.g., 404)
dd($e->getMessage());
} catch (FacebookSDKException $e) {
// Handle SDK errors (e.g., invalid token)
dd($e->getMessage());
}
CSRF Issues
Invalid redirect_uri errors.'debug' => true to the Facebook SDK config to log errors.dd($response->getGraphNode()->asArray()) to debug API responses.$fb->getDebugToken($accessToken);
Custom Fields
$response = $fb->get('/me?fields=id,name,custom_field', $accessToken);
Batch Requests
$batch = new FacebookRequestBatch([
new FacebookRequest($fb, 'GET', '/me'),
new FacebookRequest($fb, 'GET', '/me/friends'),
]);
$requests = $batch->requests;
$fb->sendBatch($requests, $accessToken);
Webhook Verification
message or comment):
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if ($data['object'] === 'page') {
// Handle page events
}
How can I help you explore Laravel packages today?