Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Ahmed Alaa's avatar

How to connect facebook pages to my app using Graph API and PHP SDK kit in Laravel 11

I'm working on a new project working as Social Media Planner. I want to connect users' accounts to my App to be able to publish on their behalf. I created the app on facebook, and it has been approved. I'm using Laravel 11 + Vue 3 + PHP SKD kit suggested by Facebook Docs. The Consent page is loaded successfuly. But after redirection I'm getting error message "Authorization headers are required".

// FacebookController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\FacebookService;
use Facebook\Facebook;

class FacebookController extends Controller
{

    public function __construct(private Facebook $fb)
    {
    }

    /**
     * Connect a user with Facebook.
     */
    public function connect(Request $request)
    {
        $loginUrl = FacebookService::getFacebookLoginUrl($this->fb);

        return response()->json([
            'status' => 'success',
            'message' => 'Facebook login URL retrieved successfully',
            'loginUrl' => $loginUrl
        ], 200);
    }

    /**
     * Callback for Facebook login.
     */
    public function callback(Request $request)
    {
        $accessToken = FacebookService::getFacebookAccessToken($this->fb, $request->code);

        return response()->json([
            'status' => 'success',
            'message' => 'Facebook login callback',
            'code' => $accessToken
        ], 200);
    }
}
// FacebookService
<?php

namespace App\Services;

use Facebook\Facebook;

class FacebookService
{
    /**
     * Create a new class instance.
     */
    public function __construct()
    {
    }

    /**
     * Get Facebook login URL 
     * @param Facebook $fb
     * @return string
     */
    public static function getFacebookLoginUrl(Facebook $fb): string
    {
        $helper = $fb->getRedirectLoginHelper();

        $scopes = ['public_profile','email','pages_show_list', 'pages_manage_posts', 'pages_read_engagement', 'instagram_content_publish'];

        $loginUrl = $helper->getLoginUrl(config('services.facebook.redirect_url'), $scopes);

        return $loginUrl ?? '';
    }

    /**
     * Get Facebook access token
     * @param Facebook $fb
     * @param string $code
     * @return string
     */
    public static function getFacebookAccessToken(Facebook $fb, string $code): string
    {
        $helper = $fb->getRedirectLoginHelper();

        $accessToken = $helper->getAccessToken();

        return $accessToken->getValue() ?? '';
    }
}
// FacebookServiceProvider
<?php

namespace App\Providers;

use Facebook\Facebook;
use Illuminate\Support\ServiceProvider;

class FacebookServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     */
    public function register(): void
    {
    }

    /**
     * Bootstrap services.
     */
    public function boot(): void
    {
        $this->app->singleton(Facebook::class, function () {
            return new Facebook([
                'app_id' => config('services.facebook.app_id'),
                'app_secret' => config('services.facebook.app_secret'),
                'default_graph_version' => config('services.facebook.default_graph_version'),
            ]);
        });
    }
}
0 likes
7 replies
martinbean's avatar
Level 80

@ahmed alaa You should use Socialite to get an OAuth access token for Facebook users.

If you want users to connect pages, then you can use the user access token to list the pages of the user. Each page will then have its own access token. So if your planner lets people post to Facebook pages that they’re admins of, then you’d store the page access token, and use that token to create posts via Facebook’s Graph API:

// Redirect to Facebook with scopes to list pages
return Socialite::driver('facebook')->scopes(['pages_manage_posts', 'pages_show_list'])->redirect();
// Get access token for Facebook user, and list their pages
$facebookUser = Socialite::driver('facebook')->user();

$response = Http::baseUrl('https://graph.facebook.com')
    ->get('/me/accounts?access_token=' . $user->token())
    ->throw()
    ->json();

foreach ($response['data'] as $page) {
    // Each page access token is in $page['access_token']
    // Show list of page names, and let user pick which page they want to connect
}
// Post to a page using a saved page (not user) access token
$response = Http::baseUrl('https://graph.facebook.com')
    ->post('/{page_id}/feed?access_token=' . $token, [
        'message' => 'This is a test post.',
    ])
    ->throw()
    ->json();
1 like
Ahmed Alaa's avatar

Hi @martinbean Thanks for help, I tried you suggestion but still getting the same error

{"status":"error","message":"Authorization headers are required"}
martinbean's avatar

I tried you suggestion but still getting the same error

@Ahmed Alaa At which point?

Ahmed Alaa's avatar

@martinbean I got the consent page asking for permission, and I accepted it, during the redirect I got that

Please or to participate in this conversation.