通过curl发布到Facebook页面墙

时间:2012-02-23 16:26:30

标签: php facebook facebook-wall

我正在尝试使用curl发布到我的Facebook页面墙,但我不断收到以下错误

The user hasn't authorized the application to perform this action

如何使用curl生成正确的访问令牌?如果你去这个网址http://developers.facebook.com/tools/explorer/

然后我可以输入以下https://graph.facebook.com/337588736279406/feed,这将显示我的换行符然后我可以将其更改为发布并添加消息内容的字段,如果我然后运行此我得到以下响应。

    {
  "error": {
    "message": "(#200) The user hasn't authorised the application to perform this action", 
    "type": "OAuthException", 
    "code": 200
  }
}

我需要做什么来授权我作为用户?

有人可以帮我解决这个问题吗。

    <?php

function postify($arr) {
    $fields_string = '';
    foreach ($arr as $key => $value) {
        $fields_string .= $key . '=' . $value . '&';
    }
    return rtrim($fields_string, '&');
}


$appid = 'app id';
$redirect_url = 'http://stickynote.users36.interdns.co.uk';
$app_secret = 'app secret';
$page_id = '337588736279406';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id='.$appid.'&redirect_uri='.$redirect_url.'&client_secret='.$app_secret.'&perms=publish_stream');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);

$output = explode("=", $output);

curl_close($ch);

$postdata = array(
    'message' => 'this is a test message',
);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/'.$page_id.'/feed?access_token='.$output[1].'');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, postify($postdata));
$check = curl_exec($ch);

print_r($check);        

?>

2 个答案:

答案 0 :(得分:1)

为了能够发布内容,您必须向您的应用程序授予publish_stream权限。

请求权限可以使用OAuth Dialog完成。

BTW,如果您只是需要用户进行测试,您可以通过选择应用程序,点击获取访问令牌并检查所需权限来使用资源管理器工具。

<强>更新
您将无法代表应用发布帖子,只能使用相应access_token的用户或网页发帖(对于需要manage_pages的{​​{1}}和来自access_token accounts连接的user 1}})。 无需在perms检索网址中指定access_token。在该步骤之前应该授予权限。

答案 1 :(得分:0)

您需要获取页面访问令牌才能执行此操作。

documentation中说:

  

Page access_token

     

用于管理页面的access_token。这是用的   当您想要执行充当页面的操作时。这种访问   通过向/ USER_ID / accounts或发出HTTP GET来检索令牌   / PAGE_ID?fields = access_token,具有manage_pages权限。入门   / USER_ID / accounts将返回页面列表(包括应用程序配置文件   页面)用户除了具有管理访问权限之外   每个页面的access_token。或者,您可以访问页面   通过发出HTTP GET来获取单个特定页面的令牌   / PAGE_ID?fields = access_token和manage_pages权限(你   必须特别通过fields =请求access_token字段   参数)。有关更多信息,请参阅Page对象的文档   信息

获得访问令牌后,您可以进行这些api调用。