我厌倦了挖掘大量的帮助我的教程/文档。
我现在拥有的东西(一切都放在管理员控制面板内):
我想实现:
目前我只使用PHP,但允许使用JS解决方案。
我的代码:
<?php
/*(...)*/
$facebook = new Facebook(array(
'appId' => $apiid,
'secret' => $secret,
'cookie' => true,
));
$session = $facebook->getSession();
$me = null;
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
if($me) {
//In order to post to the page later on we need to generate an Access Token for that page, to do this we get me-accounts in the following api call
$accounts = $facebook->api('/me/accounts');
//Loop through the array off accounts to find the page with a matching ID to the one we need
foreach($accounts['data'] as $account){
if($account['id'] == PAGEID){
$ACCESS_TOKEN = $account['access_token'];
}
}
}
$message=$data['facebook_text'];
$attachment = array(
'message' => $data['facebook_text'],
'name' => $data['name'],
'description' => '',
'link'=>$someurl,
'access_token' => $ACCESS_TOKEN
);
if($image_url != NULL) $attachment['picture'] = $image_url;
try {
if($facebook->api('/PAGEID/feed', 'post', $attachment))
{
//other stuff
}
} catch (FacebookApiException $e) {
error_log($e);
//other stuff
}
}
else
{
$login_url = $facebook->getLoginUrl();
header("Location: $login_url");
exit;
}
/* (...) */
?>
解决方案无法在任何地方重定向,因为它是内部形式,因此所有数据都将丢失。
答案 0 :(得分:0)
我不确定我明白你想在这里做什么,但这是我在类似情况下使用的:
$session = $this->get_admin_session_of_page ($page_id);
$session = unserialize ($session);
$facebook->setSession ($session, false);
在facebook php SDK中有一种手动设置会话的方法setSession。我使用serialize将页面管理用户会话保存在DB中,具有脱机访问和管理页面权限。然后,当您需要应用程序的某些管理员权限时,您只需将其反序列化,然后使用setSession。第二个参数设置为FALSE,因此该会话不会保存在cookie中并注销当前用户。
这样登录的人并不重要,工作总是作为页面的管理员完成。我认为在自动脚本中使用是安全的,例如在页面相册中上传用户照片。 当然,如果它涉及到更多涉及,或者实现自己的安全性,则必须谨慎使用它。