Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Facebook Graph Sdk Laravel Package

martin1982/facebook-graph-sdk

PHP 7.4+ Facebook Graph SDK (v7) for accessing the Facebook Platform. Install via Composer, initialize with app ID/secret, and make Graph API requests with built-in helpers for login flows and access tokens. Includes docs and PHPUnit tests.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation: Run composer require martin1982/facebook-graph-sdk in your Laravel project.

  2. Service Provider: Register the SDK in config/app.php under providers:

    'providers' => [
        // ...
        Facebook\Laravel\FacebookServiceProvider::class,
    ],
    
  3. Configuration: Publish the config file:

    php artisan vendor:publish --provider="Facebook\Laravel\FacebookServiceProvider"
    

    Update config/facebook.php with your app_id, app_secret, and default_graph_version (e.g., v18.0).

  4. First Use Case: Fetch a user’s profile in a controller:

    use Facebook\Facebook;
    use Facebook\Exceptions\FacebookResponseException;
    
    public function getUserProfile()
    {
        $fb = app(Facebook::class);
        try {
            $response = $fb->get('/me', $this->getAccessToken());
            $user = $response->getDecodedBody();
            return response()->json($user);
        } catch (FacebookResponseException $e) {
            return response()->json(['error' => 'Graph returned an error: ' . $e->getMessage()], 500);
        }
    }
    

Implementation Patterns

Core Workflows

  1. Authentication:

    • Use Laravel’s session to store tokens (e.g., after OAuth redirect):
      // In a callback route after Facebook redirect
      $helper = $fb->getRedirectLoginHelper();
      $accessToken = $helper->getAccessToken();
      session(['facebook_token' => (string) $accessToken]);
      
    • Retrieve token in subsequent requests:
      $token = session('facebook_token');
      
  2. API Calls:

    • GET Requests:
      $response = $fb->get('/me/friends', $token);
      $friends = $response->getDecodedBody();
      
    • POST Requests (e.g., publishing a feed):
      $data = ['message' => 'Hello Facebook!'];
      $response = $fb->post('/me/feed', $data, $token);
      
    • Batch Requests (for efficiency):
      $batch = new \Facebook\FacebookBatch([
          $fb->request('GET', '/me'),
          $fb->request('GET', '/me/friends'),
      ]);
      $results = $fb->sendBatch($batch, $token);
      
  3. Webhooks:

    • Configure webhooks in Facebook Developer Dashboard to point to a Laravel route (e.g., facebook/webhook).
    • Verify signatures in Laravel middleware:
      public function handle($request, Closure $next)
      {
          $input = $request->all();
          $fb = app(Facebook::class);
          $fb->validateWebhook($input['hub_challenge'] ?? '', $input['hub_verify_token'] ?? '');
          return $next($request);
      }
      
  4. Pagination:

    • Handle paginated responses (e.g., long lists of posts):
      $response = $fb->get('/me/posts', $token, ['limit' => 10]);
      $posts = $response->getDecodedBody();
      $nextUrl = $response->getNextUrl(); // Fetch next page if needed
      
  5. Laravel Integration:

    • Service Container: Bind the SDK to Laravel’s container in FacebookServiceProvider:
      $this->app->singleton(Facebook::class, function ($app) {
          return new Facebook([
              'app_id' => config('facebook.app_id'),
              'app_secret' => config('facebook.app_secret'),
              'default_graph_version' => config('facebook.default_graph_version'),
          ]);
      });
      
    • Facade: Create a facade for cleaner syntax (optional):
      // app/Facades/Facebook.php
      namespace App\Facades;
      use Illuminate\Support\Facades\Facade;
      class Facebook extends Facade { protected static function getFacadeAccessor() { return 'facebook'; } }
      
      Update config/app.php to bind the facade.

Gotchas and Tips

Pitfalls

  1. Token Expiry:

    • Access tokens expire (typically 1–2 hours for user tokens, 60 days for app tokens).
    • Implement token refresh logic using the getLongLivedAccessToken() method:
      $shortLivedToken = session('facebook_token');
      $longLivedToken = $fb->getLongLivedAccessToken($shortLivedToken);
      session(['facebook_token' => (string) $longLivedToken]);
      
    • Store refresh tokens securely (e.g., encrypted in the database).
  2. Graph API Versioning:

    • Always specify a default_graph_version (e.g., v18.0). Facebook deprecated v2.0 in 2021.
    • Check Facebook’s API changelog for breaking changes.
  3. Error Handling:

    • Catch specific exceptions:
      catch (\Facebook\Exceptions\FacebookSDKException $e) {
          // Handle SDK errors (e.g., network issues)
      }
      
    • Validate responses:
      if (!$response->isSuccess()) {
          throw new \Exception('Facebook API error: ' . $response->getError());
      }
      
  4. Rate Limiting:

    • Facebook enforces rate limits (e.g., 200 calls/hour for Graph API).
    • Use exponential backoff for retries:
      $fb->setDefaultRetryPolicy(new \Facebook\RetryPolicy\ExponentialBackoffRetryPolicy());
      
  5. Webhook Verification:

    • Always verify webhook challenges in development to avoid security risks:
      $fb->validateWebhook($challenge, config('facebook.verify_token'));
      

Tips

  1. Logging:

    • Enable debug mode for troubleshooting:
      $fb = new Facebook([...]);
      $fb->setDefaultHttpClient(new \Facebook\HttpClients\CurlHttpClient(['debug' => true]));
      
    • Log raw responses for debugging:
      \Log::debug('Facebook response:', $response->getRawResponse());
      
  2. Testing:

    • Use Facebook’s Graph API Explorer to test endpoints before coding.
    • Mock the SDK in Laravel tests:
      $mockFb = Mockery::mock(Facebook::class);
      $mockFb->shouldReceive('get')->andReturn(new \Facebook\GraphNodes\GraphNode(['id' => '123']));
      $this->app->instance(Facebook::class, $mockFb);
      
  3. Performance:

    • Cache frequent API calls (e.g., user profiles) using Laravel’s cache:
      $user = cache()->remember("facebook_user_{$userId}", now()->addHours(1), function () use ($fb, $token) {
          return $fb->get("/{$userId}", $token)->getDecodedBody();
      });
      
  4. Extensions:

    • Extend the SDK for custom endpoints:
      class CustomFacebook extends Facebook {
          public function getCustomData($path, $token) {
              return $this->get("/custom/{$path}", $token);
          }
      }
      
    • Override HTTP clients for custom headers or proxies.
  5. Security:

    • Never hardcode app_secret in config. Use Laravel’s .env:
      FACEBOOK_APP_SECRET=your_secret_here
      
    • Use HTTPS for all Facebook API calls (enforced by Facebook).
  6. Deprecation:

    • Monitor deprecations (e.g., /me/feed is deprecated; use /me/posts instead).
    • Test changes in a staging environment before production.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
craftcms/url-validator
directorytree/privacy-filter-classifier
directorytree/privacy-filter
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata
splash/openapi
splash/scopes
splash/toolkit
testo/output-teamcity
testo/bridge-symfony