如何从Facebook页面标签中登录用户,并在服务器端获得access_令牌,以便向提要发送旋转木马?
我有一个页面标签facebook应用程序。我想发布给用户从它的时间线 使用javascript sdk在客户端登录后(我使用angularjs模块访问Ciul/angular facebook(抱歉,无法在此处发布github链接)): 我在服务器端检索access_令牌,并尝试将转盘发送到用户提要: 我有两个问题:如何从Facebook页面标签中登录用户,并在服务器端获得access_令牌,以便向提要发送旋转木马?,facebook,facebook-graph-api,facebook-javascript-sdk,facebook-php-sdk,Facebook,Facebook Graph Api,Facebook Javascript Sdk,Facebook Php Sdk,我有一个页面标签facebook应用程序。我想发布给用户从它的时间线 使用javascript sdk在客户端登录后(我使用angularjs模块访问Ciul/angular facebook(抱歉,无法在此处发布github链接)): 我在服务器端检索access_令牌,并尝试将转盘发送到用户提要: 我有两个问题: 当我接到第一个电话时 图形返回错误:(#210)参数id必须是页面 浏览之后,我发现这可能是由于错误使用令牌造成的。非用户访问令牌。但是我在客户端登录用户 接下来我接到的电话
Vsevolod在花了一些时间之后,我正在写我的解决方案,因为它不是很明显,至少对我来说是这样。但是,实际上,所有信息都存在于文档中。 从问题编号2开始:对于下一个调用,我得到一个返回错误:此授权码已被使用。 正如评论中提到的,我确实混淆了access_令牌和授权代码。正如我以非常简单的形式理解的那样,机制是:
授权代码
写入Cookie访问\u令牌。此帮助程序具有getAccessToken()
方法,该方法使用授权代码
从Cookie中检索访问令牌
。这就是我困惑的地方。我试图在每个请求上使用getAccessToken()
。由于请求是用AJAX发出的,授权代码
没有更改,而且您只能在我收到错误时使用它互联网上的许多地方都指出了解决方案,但不知怎的,我还是误解了这一点。
下面是代码摘录,它使用会话存储access\u token
,并且仅当会话中未设置access\u token
时才使用getAccessToken()
方法
$fb = new Facebook([
'app_id' => $widget->app_id,
'app_secret' => $widget->app_secret,
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getJavaScriptHelper();
if ($request->session()->has('facebook_access_token')) {
$accessToken = $request->session()->get('facebook_access_token');
} else {
$accessToken = $helper->getAccessToken();
// OAuth 2.0 client handler
$oAuth2Client = $fb->getOAuth2Client();
// Exchanges a short-lived access token for a long-lived one
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
$request->session()->put('facebook_access_token', (string) $longLivedAccessToken);
$request->session()->save();
}
if ($accessToken) {
$fb->setDefaultAccessToken($accessToken);
} else {
die('No Access Token');
}
child_附件
。虽然您可以将这样的帖子发送到'{page id}/feed'
,但对于'{user id}/feed'
,您不能这样做因此,目前您无法向用户提要发布旋转木马。
因此,当Graph Api获取适用于
'{page id}/feed'
的Post数据时,它假设我已通过{page id}
。相反,当获取{user id}
时,Graph Api会喊回“(#210)Param id必须是一个页面。”。“我发现为了符合OAuth,令牌只能使用一次”-您混淆了令牌和代码。代码是您需要交换的令牌,并且您只能执行一次。您完全正确。谢谢你的评论。