如何使用CURL在Facebook页面上发布帖子,而不使用PHP中的SDK

时间:2015-09-04 06:04:31

标签: php facebook facebook-graph-api curl

我正在开发一个需要Facebook集成的PHP项目。所以在我对代码进行处理之前,我正在使用Facebook Graph API资源管理器工具(https://developers.facebook.com/tools/explorer)对其进行测试。我现在正在做的是。

  

第一步

Get the user access_token by using the button at the top left.
  

第二步

Make a GET request to "me/accounts" to get the page token and page id.
  

第3步

Make a POST request to "{page_id}/feed" with the fields message={message} and access_token={page_token}

它工作得很好并张贴在我的Facebook粉丝页面上。但是,当我尝试用这样的PHP代码替换“第三步”时,

$data['message'] = "my message";


$data['access_token'] = $page_access_token; //page token from 2nd step
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, 'https://graph.facebook.com/{page_id}/feed');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_POSTFIELDS, $data);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, 1);


$resp = curl_exec($ch);

curl_close($ch);

$data_resp = json_decode($resp);

print_r($data_resp);

它告诉我这个错误。

stdClass Object ( [error] => stdClass Object ( [message] => (#200) Permissions error [type] => OAuthException [code] => 200 ) ) 
  

我设置了manage_pages,publish_pages,publish_actions

的权限

2 个答案:

答案 0 :(得分:2)

传递CURLOPT_POSTFIELDS数组意味着cURL会将请求作为内容类型multipart/form-data发送 - 但您需要application/x-www-form-urlencoded代替。

http_build_query数组上使用$data,并将结果字符串用于CURLOPT_POSTFIELDS

答案 1 :(得分:-1)

查看

上的文档
  

<强>权限

     
      
  • 具有publish_actions权限的用户访问令牌可用于代表该人发布新帖子。帖子将以用户的声音显示。
  •   
  • 具有publish_pages权限的网页访问令牌可用于代表该网页发布新帖子。帖子将出现在页面的声音中。
  •   

您应该通过

运行使用过的访问令牌

查看它是否包含相应的权限。