我有一个页面标签应用程序,我从签名请求中获取页面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;
}
答案 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');