我有一个网络应用程序,允许人们直接注册或通过Facebook注册插件使用他们的Facebook凭据。我希望能够将网站上发布的信息复制到我网站的Facebook粉丝页面。到目前为止,如果我有一个没有登录到Facebook的用户,它将发布到我的页面墙上没有问题显示它来自我的网站应用程序。但如果此人登录到Facebook,但尚未授予我的应用程序publish_stream权限,则会收到权限错误。无论如何,如果我没有与用户的适当许可,只是强迫帖子来自我的网站应用程序?如果我的Facebook页面上的每个帖子都来自应用程序而且从来没有来自用户,我会很高兴,但我找不到任何文档显示如何完成或甚至可以完成。
修改
以下是我正在使用的代码,如果此人未登录Facebook,我将发布到我自己的墙上。我已经授权该应用发布。
$attachment = array('message' => $notes,
'name' => 'Backcountryride.com',
'caption' => "Community Driven Transportation",
'link' => 'http://backcountryride.com',
'description' => $description,
'picture' => 'http://backcountryride.com/images/vanlogo.jpg'
);
$result = $facebook->api('/backcountryride/feed/','post',$attachment);
EDIT2
这是我用来实例化$ facebook对象的代码:
$facebook = new Facebook(array(
'appId' => FACEBOOK_APP_ID,
'secret' => FACEBOOK_SECRET,
'cookie' => true,
));
$session = $facebook->getSession();
$me = null;
// Session based API call.
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
谢谢!
答案 0 :(得分:3)
您要找的是“应用登录”。您可以为应用而不是用户获取会话。不容易找到,几周前我偶然发现了它。然后你只需使用你通常使用的功能,但使用“app”会话而不是“用户”会话。
https://developers.facebook.com/docs/authentication/#app-login
答案 1 :(得分:2)
这不再有效。去这里,https://stackoverflow.com/a/11102147/704647
因此,通过一些更多的研究,我能够拼凑出一个解决这个问题的方法。为了做到这一点,我需要使用图形API和传统REST API的组合。在授予我的应用程序发布到我的墙上的权限后,我使用以下代码将我的网站上的条目发布到我的墙上。
$url = "https://graph.facebook.com/oauth/access_token";
$client_id = "XXXXXXXXXXXXXX";
$client_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$postString = "client_id=$client_id&client_secret=$client_secret&type=client_cred";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postString);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$token = curl_exec($curl);
curl_close($curl);
$message = rawurlencode($description.'. Notes:'.$notes);
$url = "https://api.facebook.com/method/stream.publish";
$postString = "message=$message&uid=XXXXXXXXXXXXX&$token";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postString);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl);
curl_close($curl);
很少有值得注意的事情。 1.其余的api $ postString中的uid是你的facebook PAGE的uid。您不需要target_id,因为当uid是页面时,它只能发布到自身。 2.您的$ message必须是rawurlencoded,因为这是其余api接受的格式。 3.这将作为您的APP发布到您的页面,而不是发布到您网站的用户。要做到这一点,您需要拥有所有用户的publish_stream权限。或者使用ui对话框来获取每个帖子。如果您想要做的就是发布到您自己的OWN页面墙,那么这两个看起来都有点过分了。
由于我在很多地方都看到过这个问题的变化没有得到答复(我把这个答案发布在一个)我认为值得在这里发布这个答案。
如果您不确定如何授予您的应用程序访问Facebook页面墙的权限,请执行以下两步操作。我是从this post
得到的然后,我需要使用此网址向“PAGE”授予“publish_stream”权限(替换“MYAPIKEY”和“THEPAGEID”):http://www.facebook.com/connect/prompt_permissions.php?api_key=MYAPIKEY&v=1.0&next=http://www.facebook.com/connect/login_success.html?xxRESULTTOKENxx&display=popup&ext_perm=publish_stream&enable_profile_selector=1&profile_selector_ids=THEPAGEID
希望这有助于某人。
答案 2 :(得分:0)
我以前的解决方案不再有效,但确实如此,https://stackoverflow.com/a/11102147/704647