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 Php Sdk Laravel Laravel Package

martinbean/facebook-php-sdk-laravel

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require martinbean/facebook-php-sdk-laravel
    

    Publish the config file:

    php artisan vendor:publish --provider="MartinBean\Facebook\FacebookServiceProvider"
    
  2. Configure .env Add your Facebook App credentials:

    FACEBOOK_APP_ID=your_app_id
    FACEBOOK_APP_SECRET=your_app_secret
    FACEBOOK_REDIRECT_URI=http://your-app.test/callback
    
  3. First Use Case: Login with Facebook Add the login route in routes/web.php:

    Route::get('/login/facebook', 'Auth\FacebookController@redirectToFacebook')->name('facebook.login');
    Route::get('/callback/facebook', 'Auth\FacebookController@handleFacebookCallback');
    

    Create a controller:

    use MartinBean\Facebook\Facades\Facebook;
    
    public function redirectToFacebook()
    {
        return Facebook::getRedirectLoginUrl(['email']);
    }
    
    public function handleFacebookCallback()
    {
        try {
            $user = Facebook::getUser();
            // Handle user data (e.g., create/update Laravel user)
        } catch (\Exception $e) {
            return redirect('/login')->with('error', $e->getMessage());
        }
    }
    

Implementation Patterns

Common Workflows

1. User Authentication

  • Redirect to Facebook Login:
    $loginUrl = Facebook::getRedirectLoginUrl(['email', 'public_profile']);
    return redirect()->to($loginUrl);
    
  • Handle Callback:
    $user = Facebook::getUser();
    $email = $user->getEmail();
    $name = $user->getName();
    

2. API Requests

  • Fetch User Data:
    $user = Facebook::getUser();
    $posts = $user->getPosts();
    
  • Post to User’s Timeline:
    $user->postToTimeline('Hello from Laravel!');
    

3. Graph API Calls

  • Generic API Requests:
    $response = Facebook::api('/me/feed', 'get', ['limit' => 5]);
    

4. Integration with Laravel Auth

  • Custom User Model:
    public function handleFacebookCallback()
    {
        $user = Facebook::getUser();
        $laravelUser = User::firstOrCreate(
            ['email' => $user->getEmail()],
            ['name' => $user->getName(), 'facebook_id' => $user->getId()]
        );
        Auth::login($laravelUser);
    }
    

5. Permissions Handling

  • Request Extended Permissions:
    $loginUrl = Facebook::getRedirectLoginUrl(['email', 'user_birthday', 'user_friends']);
    

Integration Tips

  • Middleware for Authenticated Requests: Use Laravel middleware to ensure Facebook user data is available in routes:

    public function handleKernel()
    {
        $this->appendToMiddlewarePriority(FacebookMiddleware::class);
    }
    
  • Caching Facebook Responses: Cache API responses to reduce calls:

    $posts = Cache::remember("facebook_posts_{$user->getId()}", now()->addHours(1), function () use ($user) {
        return $user->getPosts();
    });
    
  • Logging Errors: Log Facebook API errors for debugging:

    try {
        $response = Facebook::api('/me');
    } catch (\Exception $e) {
        Log::error('Facebook API Error: ' . $e->getMessage());
    }
    

Gotchas and Tips

Pitfalls

  1. Redirect URI Mismatch

    • Ensure FACEBOOK_REDIRECT_URI in .env matches the callback URL in Facebook Developer Dashboard.
    • Fix: Double-check the URI in both places and use absolute URLs (e.g., https://your-app.test/callback).
  2. Permissions Not Requested

    • If you request email but don’t include it in the login URL, the SDK will throw an error.
    • Fix: Always specify required permissions in getRedirectLoginUrl():
      $loginUrl = Facebook::getRedirectLoginUrl(['email', 'public_profile']);
      
  3. Token Expiry

    • Short-lived tokens expire quickly. Use the getLongLivedAccessToken() method to extend them.
    • Fix:
      $longLivedToken = Facebook::getLongLivedAccessToken($shortLivedToken);
      
  4. Deprecated SDK Methods

    • The underlying Facebook PHP SDK may change. Check the official SDK docs for breaking changes.
    • Fix: Update the package and test thoroughly after major SDK updates.
  5. CORS Issues

    • If making API calls from a frontend app, ensure CORS is configured on the Facebook App Dashboard.
    • Fix: Add valid domains to "App Domains" and "Valid OAuth Redirect URIs."

Debugging Tips

  1. Enable Debug Mode Add this to your config/facebook.php:

    'debug' => env('APP_DEBUG', false),
    

    This will log detailed errors and help identify issues.

  2. Inspect the Facebook User Object Dump the user object to see available methods:

    dd(Facebook::getUser());
    
  3. Check the SDK Logs Enable logging in config/facebook.php:

    'logging' => true,
    

    Logs will appear in storage/logs/facebook.log.

  4. Validate Token Ensure the access token is valid before making API calls:

    if (Facebook::isValidAccessToken()) {
        // Proceed with API calls
    }
    

Extension Points

  1. Custom User Model Extend the FacebookUser class to add custom methods:

    namespace App\Services;
    
    use MartinBean\Facebook\FacebookUser as BaseFacebookUser;
    
    class CustomFacebookUser extends BaseFacebookUser
    {
        public function getCustomField()
        {
            return $this->getGraphNode('/me/custom_field');
        }
    }
    

    Bind it in a service provider:

    Facebook::extend('custom', function () {
        return new CustomFacebookUser();
    });
    
  2. Override API Requests Extend the Facebook facade to add custom API endpoints:

    Facebook::extend('customApi', function ($path, $method = 'GET', $params = []) {
        return Facebook::getClient()->request($method, $path, $params);
    });
    
  3. Webhook Handling Use Laravel’s HasApiTokens trait to handle Facebook webhooks:

    public function handleWebhook(Request $request)
    {
        $data = $request->json()->all();
        // Process webhook data (e.g., page subscriptions)
    }
    
  4. Testing Mock the Facebook SDK in tests:

    Facebook::shouldReceive('getUser')->andReturn($mockUser);
    
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.
make-dev/orca
dmstr/symfony-system-resources-bundle
dmstr/symfony-job-queue-bundle
dmstr/openapi-json-schema-bundle
dmstr/keycloak-security-bundle
dmstr/doctrine-audit-log-bundle
dmstr/api-platform-utils-bundle
dmstr/api-configuration-bundle
chrisdev/ux-components
baks-dev/finances
emuniq/filament-browser-notifications
syriable/filament-translator
hungnm28/livewire-form
wenprise/eloquent
crudly/encrypted
fadion/bouncy
cuci/prototurk-sdk
gos/pubsub-router-bundle
cuci/prototurk-sdk-symfony
clementtalleu/easyadmin-markdown-bundle