【问题标题】:Posting to a user's wall using PHP使用 PHP 发布到用户的墙上
【发布时间】:2014-02-19 02:06:02
【问题描述】:

好的。这已经让我忙了两天了,我现在正在绞尽脑汁。我已经将它发布在论坛上,询问了朋友,广泛搜索并查看了 stackoverflow。我不是第一个发布这个问题的人,但我在回复中找不到答案,所以我创建了这个新问题。

这就是我想要做的: - 我想在 PHP 中将消息作为 Facebook 应用程序发布到用户的墙上。 - 我想做这个服务器到服务器,所以没有对话框和任何用户交互(他可能在那一刻修剪草坪,我只关心) - 此用户已授予我的应用程序权限,这些权限是:1)manage_pages,2)publish_stream,3)read_stream - 我正在使用 PHP Facebook SDK - 这是我的代码:

/* Facebook */ 
$facebook = new Facebook(array(
    'appId'  => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_APP_SECRET
));
/* string */ 
$accessToken = $facebook->getAccessToken();
/* Array<string> */ 
$postFields = array("message"=>"test2", "access_token"=>$accessToken);

$facebook->api('/{the-id-of-the-facebook-user}/feed','post',$postFields);

这是问题: 我不断收到以下错误:(#200) 用户尚未授权应用程序执行此操作。

这是一个废话,因为用户已经授权了我的应用程序(那个用户也恰好是我,我检查了应用程序下的所有权限,他们很好)。

任何建议都将不胜感激,因为我不知道该去哪里找了。我知道其他人以前发布过这个问题,但答案并不令人满意。提前非常感谢。

【问题讨论】:

  • 看来publish_stream 有问题。确保您已授予 publish_stream 权限。
  • 您不应该自己处理 access_token - SDK 完全有能力自行处理。但是既然你无论如何都在调用 getAccessToken - 它返回什么值?调试工具对那个令牌有什么要说的? developers.facebook.com/tools/debug
  • 我有 publish_stream 权限。令牌是一长串带有“|”的字母和数字中间某处。当我输入访问令牌时,调试器返回以下内容:'Toepassings-ID: 152046464919618 : Uitjezelf'
  • publish_stream 表示发布到用户的墙和该用户的朋友墙 [developers.facebook.com/docs/authentication/permissions/]。您确定要发帖到获得publish_stream 权限的用户墙上还是发给他的一个朋友?
  • 是的,我的 Facebook 应用应该发布到授予此应用权限的 facebook 用户的墙上。他已经给予了许可。我可以检查一下,因为我还管理该用户的帐户。在该应用程序选项卡下清楚地表明此应用程序有权发布消息、状态更新、图片等。

标签: php facebook facebook-wall


【解决方案1】:

不允许应用发布到用户的墙上。您只能以用户或其他用户(即用户对用户)的身份发布到墙上。如果你想通知用户某事,你应该使用 app-to-user Requests API。

【讨论】:

  • 以用户身份发布是我想要完成的。但这里的关键是,没有客户端-服务器身份验证过程应该是可能的。换句话说:托管网站的服务器应该能够随时在用户的墙上发表评论。详细说明我想做的事情:我正在为客户制作一个网站。本网站已注册用户如何在该网站上发布内容。该网站还有一个 Facebook 页面。该网站必须能够在其自己的 Facebook 页面上发布其用户发布的内容。
  • 好的。您可以通过请求“publish_stream”在服务器端执行此操作。然后使用上面答案中的代码。如果您想在用户离开您的网站后继续向其发布信息,则需要一个长期有效的访问令牌。
  • 我有发布流权限。但是我知道令牌过期后,用户必须再次授权该应用程序才能获得新令牌?有没有办法在不请求新令牌的情况下始终发布到用户的墙上?
  • 你可以按照这个来获得一个不会经常过期的access_tokendevelopers.facebook.com/roadmap/offline-access-removal
【解决方案2】:

我无法弄清楚导致错误的原因。我尝试了多种角度。在某些情况下,我确实设法在墙上发布了一些东西,因为 api 返回了帖子的 ID,我可以将其输入浏览器以查看帖子(www.facebook.com/{the-id-of-the-post })。

然而,奇怪的是,这篇文章没有出现在时间线上,而是出现在一个单独的页面上。此页面没有像普通 Facebook 页面那样在顶部有用户个人资料。它还在查询字符串中有一个storyID 参数。我不知道我在哪个页面上,为什么它没有出现在时间线上。

我试图发布到的 Facebook 页面是公司页面。但它并没有像往常那样附加到(一个人的)“正常”Facebook 页面。最终,我确实设法发布到属于“正常”facebookpage 的页面的页面。所以在大多数情况下,我的代码现在可以工作了。顺便说一句,Facebook SDK、它的文档和http://developers.facebook.com 的文档还有很多需要改进的地方。目前还不是很清楚如何执行某些操作。我曾经在 WP7 应用程序上花了很多时间来实现 Facebook 功能,现在我花了至少 4 天的时间来让它在这个网站上工作。我决定编写自己的 SDK 并在未来对其进行扩展。

感谢大家的时间和帮助。 Stackoverflow 摇滚!

【讨论】:

    【解决方案3】:

    如果您要发布的提要来自已授予权限的同一用户,您可以输入 me 而不是 {the-id-of-the-facebook-user} 。我刚试过这个,它奏效了:

    $facebook->api(
        '/me/feed/',
        'post',
        array(
        'message' => "my message"
    ));
    

    无需发布 access_token。而且用户给的权限只有publish_actions

    【讨论】:

    • 不,事实并非如此,帖子是从 facebook 应用发送给另一个 Facebook 用户的。所以我们谈论的是两个不同的帐户。
    • @JustinvanSchaick 啊,好的,现在我明白“服务器到服务器”是什么意思了。抱歉,如果我的回答让您感到困惑。
    • @JustinvanSchaick 也许你可以读到这个:stackoverflow.com/questions/9677975/…
    • 谢谢,看了一下,但我还是卡住了。我尝试了所有可能的组合和角度,但我没有选择。我开始认为这是不可能的。
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多