Php 未经发布流许可,将Facebook帖子发布到我的页面墙

Php 未经发布流许可,将Facebook帖子发布到我的页面墙,php,javascript,facebook,Php,Javascript,Facebook,我有一个web应用程序,允许人们直接注册或通过facebook注册插件使用他们的facebook凭据。我希望能够将网站上发布的信息复制到我网站的facebook粉丝页面。到目前为止,如果我有一个用户没有登录到facebook,它会在我的页面上贴上帖子,毫无问题地显示它来自我的网站应用程序。但是,如果该用户登录到facebook,但没有授予我的应用程序发布流权限,则会出现权限错误。如果我没有用户的适当权限,是否有任何方法可以简单地强制帖子来自我的网站应用程序?如果我facebook页面上的每一篇帖

我有一个web应用程序,允许人们直接注册或通过facebook注册插件使用他们的facebook凭据。我希望能够将网站上发布的信息复制到我网站的facebook粉丝页面。到目前为止,如果我有一个用户没有登录到facebook,它会在我的页面上贴上帖子,毫无问题地显示它来自我的网站应用程序。但是,如果该用户登录到facebook,但没有授予我的应用程序发布流权限,则会出现权限错误。如果我没有用户的适当权限,是否有任何方法可以简单地强制帖子来自我的网站应用程序?如果我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);
  }
}

谢谢大家!

这不再有效。到这里来

因此,通过更多的研究,我能够拼凑出一个解决这个问题的方法。为了做到这一点,我需要结合使用graph 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.rest api$postString中的uid是facebook页面的uid。您不需要目标id,因为当uid属于某个页面时,它只能发布到自身。 2.您的$message必须是rawurlencoded,因为它是RESTAPI接受的表单。 3.这将作为你的应用程序发布到你的页面,而不是作为发布到你网站的用户。要做到这一点,您需要拥有所有用户的发布流权限。或者使用ui对话框在每篇文章中获取它。如果你只想在自己的网页上发表文章,那么这两种方法似乎都太过分了

因为我在许多地方看到了关于stackoverflow的这个问题的各种各样的答案(我在一个地方发布了这个答案),所以我认为在这里发布这个答案是值得的

如果你不确定如何授予你的应用程序在facebook页面墙上发布的权限,这里是你需要采取的两个步骤。这是我从你那里得到的

我首先必须使用此url授权脱机访问(替换“MYAPIKEY”):

然后,我需要向具有此url的页面授予“发布流”权限(替换“MYAPIKEY”和“THEPAGEID”):


希望这对某人有所帮助。

这不再有效。到这里来

因此,通过更多的研究,我能够拼凑出一个解决这个问题的方法。为了做到这一点,我需要结合使用graph 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.rest api$postString中的uid是facebook页面的uid。您不需要目标id,因为当uid属于某个页面时,它只能发布到自身。 2.您的$message必须是rawurlencoded,因为它是RESTAPI接受的表单。 3.这将作为你的应用程序发布到你的页面,而不是作为发布到你网站的用户。要做到这一点,您需要拥有所有用户的发布流权限。或者使用ui对话框在每篇文章中获取它。如果你只想在自己的网页上发表文章,那么这两种方法似乎都太过分了

因为我在许多地方看到了关于stackoverflow的这个问题的各种各样的答案(我在一个地方发布了这个答案),所以我认为在这里发布这个答案是值得的

如果你不确定如何授予你的应用程序在facebook页面墙上发布的权限,这里是你需要采取的两个步骤。这是我从你那里得到的

我首先必须使用此url授权脱机访问(替换“MYAPIKEY”):

然后,我需要向具有此url的页面授予“发布流”权限(替换“MYAPIKEY”和“THEPAGEID”):


希望这对某人有所帮助。

您正在寻找的是“应用程序登录”。您可以为应用程序而不是用户获取会话。不容易找到,几周前我偶然发现了它。然后,您只需使用通常使用的功能,但使用“应用程序”会话,而不是“用户”会话


您需要的是“应用程序登录”。您可以为应用程序而不是用户获取会话。不容易找到,几周前我偶然发现了它。然后,您只需使用通常使用的功能,但使用“应用程序”会话,而不是“用户”会话


我以前的解决方案不再有效,但现在可以了,

我以前的解决方案不再有效,但现在可以了,

当没有Facebook用户时,你如何向你的粉丝页面墙发布帖子?这将有助于了解如何在没有登录用户的情况下执行相同的操作。听起来好像在某个时候,当您的网站发布到您的粉丝页面时,会有某个时候is选择使用自己的凭据或用户的凭据。这是可能的吗?@PortableWorld hmmm,那么你是不是建议我可以实例化一个单独的facebook对象,它只绑定到我的应用程序凭据上?当没有facebook用户时,你是如何在你的粉丝页面墙上发帖子的?这将有助于了解如何在没有登录用户的情况下执行相同的操作。听起来好像在某个时候,当您的网站发布到您的粉丝页面时,会有某个时候is选择使用自己的凭据或用户的凭据。这是可能的吗?@PortableWorld-hmmm,那么你是不是建议我可以实例化一个单独的facebook对象,该对象仅绑定到我的应用程序凭据?这不再有效,尝试授予发布流权限,它会