获得用户许可后,如何在 Facebook 的用户墙上发帖?

Posted

技术标签:

【中文标题】获得用户许可后,如何在 Facebook 的用户墙上发帖?【英文标题】:How to post on user's wall in facebook after getting permission from user? 【发布时间】:2014-05-05 07:05:44 【问题描述】:

有没有什么好的教程可以教如何使用 API 在用户的墙上发帖?这是流程:

    用户将访问我的网站并点击文章末尾的“post to facebook”按钮。

    他从 facebook 显示登录对话框,登录后他将允许我的应用程序代表他在他的墙上张贴。

    授权后,他的分享链接会贴在他的墙上。

    在以后的分享中,他不会被要求许可,因为他已经授权代表他发帖。因此,将来当他单击文章下方的“发布到 Facebook”按钮时,该项目将被发布到他的墙上,而无需打开 Facebook 登录对话框。

我搜索了很多教程,但没有找到任何符合我要求的教程。

我对 facebook API 非常陌生,之前没有使用过它。

有任何建议或教程链接吗? 谢谢!

【问题讨论】:

试试***.com/questions/5814158/… 不想在页面墙上发帖,而是在用户的个人资料墙上发帖 检查现在更新的链接 【参考方案1】:

我的代码可以帮助您将带有图像的状态发布到用户的时间线。

用户授予您的应用权限后,您可能会收到一个名为“代码”的查询字符串参数,使用此代码,我们可以发布到用户的时间轴。

$code = @$_REQUEST["code"];

      if(!empty($code))
      
          // Start : Get live user access token ------------------------------------------ //
          $token_url= "https://graph.facebook.com/oauth/"
          . "access_token?"
          . "client_id=" .  FACEBOOK_APP_ID
          . "&redirect_uri=" . urlencode( FACEBOOK_POST_LOGIN_URL)
          . "&client_secret=" . FACEBOOK_APP_SECRECT
          . "&code=" . $code;

          $token = $this->get_app_access_token(FACEBOOK_APP_ID,FACEBOOK_APP_SECRECT,$token_url);
          $access_token = $token;

          // End : Get live user access token ------------------------------------------- //

          // Start : Create album ------------------------------------------------------ //

          $graph_url = "https://graph.facebook.com/me/albums?"
          . "access_token=". $access_token;

          $uri = 'https://graph.facebook.com/albums?access_token='.$access_token;

          $post_fields = array('name' => trim( FACEBOOK_ALBUM_NAME ));

          $curl = curl_init( $uri );
          curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
          curl_setopt( $curl, CURLOPT_POST, TRUE );
          curl_setopt( $curl, CURLOPT_POSTFIELDS, $post_fields );

          $raw_data = curl_exec($curl);
          curl_close( $curl );

          $created_album_id = json_decode( $raw_data, $assoc = TRUE );

          // End : Create album ---------------------------------------------------------- //   

          $facebook_share_image_url = FACEBOOK_SHARE_IMAGE_PATH;

          $facebook_status_text = 'The status text';

          $graph_url= "https://graph.facebook.com/me/photos";

          $postData = "url=" . urlencode($facebook_share_image_url)
          . "&message=" . urlencode($facebook_status_text)
          . "&access_token=" .$access_token;

          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $graph_url);
          curl_setopt($ch, CURLOPT_HEADER, 0);
          curl_setopt($ch, CURLOPT_POST, 1);
          curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
          $output = curl_exec($ch);
          curl_close($ch);

          // End : Add photos ------------------------------------------------------------- //
    

以及获取应用访问令牌的功能

function get_app_access_token($app_id, $secret,$token_url)

    $url = 'https://graph.facebook.com/oauth/access_token';
    $token_params = array(
            "type" => "client_cred",
            "client_id" => FACEBOOK_APP_ID,
            "redirect_uri" => urlencode(FACEBOOK_POST_LOGIN_URL),
            "client_secret" => FACEBOOK_APP_SECRECT
    );

    $a1 = $this->file_get_contents_curl($token_params,$token_url);
    $a2 =  str_replace("access_token=","",$a1);
    $a3 = explode("&expires",$a2);

    return $a3[0];

其他函数访问图url

function file_get_contents_curl($params,$url)

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
    $headers = array(
            "Cache-Control: no-cache",
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $ret = curl_exec($ch);
    curl_close($ch);
    return $ret;

希望对您有所帮助..!!

【讨论】:

不客气,如果您对此有疑问,请告诉我 您的代码很有帮助。我刚刚接近解决方案。在获取访问令牌后运行应用程序时出现此错误:不允许全局 id xxxx。请使用特定于应用程序的 ID 具体的应用程序ID是什么。我为我的应用程序创建的 APP ID?还是用户的个人资料 ID? 您创建的应用的 APP ID【参考方案2】:

您可以使用简单的 facebook 分享网址:

https://www.facebook.com/sharer/sharer.php?u=YOURPAGEURL

YOURPAGEURL 是您要共享的页面 URL。希望这会有所帮助。

【讨论】:

这不是我想要的。我希望当用户单击“发布到 facebook”按钮时,该链接将发布在用户的墙上,而无需从 facebook 打开任何对话框。显然,当用户未授予权限时,对话框将打开,但一旦用户授予权限,我想将他的令牌保存在 db 中,下次对照用户 ID 检查这些令牌并发布到他的个人资料而不打开 Facebook 对话框。跨度> 【参考方案3】:

您必须在您的应用程序上获得 pubish_stream 权限,然后使用 curl 尝试此操作:- 您还需要一个用户访问令牌,然后通过 curl 调用发送访问令牌

$attachment =  array(
        'access_token' => $access_token,
        'message' => 'i m success to using graph api for post wall',
        'name' => 'Wall Post using graph api',
        'link' => 'www.mysite.com',
        'description' => 'Using the Graph API, any Facebook users Wall feed may be accessed by using this URL:',
        'picture'=>'http://example.com/images/noimage.png'
 );
$url = "https://graph.facebook.com/$facebook_id/feed";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //to suppress the curl output
$result = curl_exec($ch);
curl_close ($ch);
print_r($result)

更多信息:- Graph API new feed post object-Attachment not showing

Post to a Facebook user's wall with cURL PHP

【讨论】:

非常感谢。必须试试这个。如果它解决了我的问题,肯定会接受答案。 欢迎您的老兄,如果您有任何问题,请告诉我,并显示您所做的代码

以上是关于获得用户许可后,如何在 Facebook 的用户墙上发帖?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 页面 - 发布到用户墙(在用户喜欢该页面后)

facebook - 如果用户在未经用户许可的情况下喜欢页面

如何将对象发布到 facebook 用户墙?

通过图形 API 检索 facebook 用户墙帖子

如何在没有用户修改消息的情况下从 iOS 应用程序发布到 Facebook 墙

如何从 android 应用程序发布到用户的 facebook 墙