Laravel 5 Facebook签名请求函数获取页面ID

时间:2016-06-21 07:51:31

标签: php laravel facebook-graph-api laravel-5

我有一个页面标签应用程序,我从签名请求中获取页面ID。要获取页面,我称之为此功能。

$facebook_page_id = get_Fb_Page_Id();

问题是这只在我第一次调用函数时才有效。这是为什么?

例如,我有一个返回一些结果的startpage,还有一个返回搜索结果的页面。该功能仅适用于起始页,但不适用于返回搜索结果。

这是我的功能。

function get_Fb_Page_Id()
{

    $fb = App::make('SammyK\LaravelFacebookSdk\LaravelFacebookSdk');
    $helper = $fb->getPageTabHelper();

    try {
        $token = $fb->getCanvasHelper()->getAccessToken();
    } catch (Facebook\Exceptions\FacebookSDKException $e) {
// Failed to obtain access token
        dd($e->getMessage());
    }

// $token will be null if the user hasn't authenticated your app yet
    if (!$token) {
// . . .
    }

    $id = $helper->getPageId();

    return $id;

}

1 个答案:

答案 0 :(得分:1)

只有第一页加载才会从Facebook返回signed_request(因为Facebook会在首次加载时将其作为POST发送给您的应用)。您应用程序中的所有后续页面请求(即提交表单或导航到其他页面)都将丢失signed_request

要处理这种情况,您应该在初始加载时将signed_request数据添加到Session,然后在代码中引用它。

例如,在首次加载时(仅当signed_requests存在时),将页面ID添加到会话中:

Session::put('page_id', $helper->getPageId() ); 

然后,在后续代码和其他页面上,只需使用会话数据:

$page_id = Session::get('page_id');