6

在 PHP 中,我使用 curl 向 fb graph api 发送删除 - 但我收到以下错误;

{"error":{"type":"GraphMethodException","message":"Unsupported delete request."}}

我正在使用的代码是;

$ch = curl_init("https://graph.facebook.com/" . $status_id . ""); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_CAINFO, NULL); 
curl_setopt($ch, CURLOPT_CAPATH, NULL); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 

$result = curl_exec($ch); 
echo $result;

$query 包含访问令牌。

4

6 回答 6

11

固定的!

删除时,您必须将用户 ID 添加到对象 ID:

删除https://graph.facebook.com/673509687_104812882909249?access_token= {access_token} 其中 673509687 是我的用户 ID,104812882909249 是 objectID

于 2010-08-10T15:54:54.103 回答
1

对于仍在为此苦苦挣扎的任何人,我发现我的问题是试图删除我之前使用 PHP SDK 创建的应用程序请求,这导致了这个错误。

(#2) 无效参数:错误/警告消息的正文。标题是:无效参数

问题本质上是使用了哪个访问令牌;用户或应用程序。

我正在处理的特定场景是我的应用程序中的用户邀请了朋友 Facebook(使用应用程序请求)但随后想要撤销该邀请。在这种情况下,我想删除之前在 Facebook 上创建的应用请求。但是,此时,登录用户并不是应用请求的接收者,而是发送者。

查看 PHP SDK 代码,它会自动使用用户访问令牌(如果有的话),而不是应用程序访问令牌。事实上,似乎没有办法从 SDK 显式获取应用程序令牌。

尝试使用以下命令删除应用请求时...

$facebook->api('/'.$fb_request_id, 'DELETE');

...并让 PHP SDK 选择用户令牌,我收到 (#2) Invalid parameter 错误消息。但是,如果我手动构造应用程序访问令牌(格式为“$app_id|$app_secret”并将其作为数组键传递给第三个参数...

$facebook->api('/'.$fb_request_id, 'DELETE', array('access_token' => $app_access_token);

..然后调用成功。

因此,如果当前用户不是应用程序请求的接收者,则本质上您需要使用应用程序访问令牌来删除应用程序请求。

我希望这可以帮助其他在同样问题上苦苦挣扎的人。

于 2011-09-22T08:29:38.553 回答
1

我稍微修改了你的代码。(如果操作正确,应该回显“true”)这是目前对我有用的。

另请注意,这不会删除通过 Facebook 创建的事件。这就是您收到权限错误的原因。这只会删除通过您的应用程序创建的事件...(链接到 $app_id、$app_secret 的应用程序)

//First authenticate a token


$app_id = "APP ID GOES HERE";
$app_secret = "SECRET APP ID GOES HERE";
$my_url = "WHATEVER THIS PAGES NAME IS GOES HERE";  


//I'm not sure but I think REQUEST is still allowed....right? if not change it to GET/POST

$code = $_REQUEST["code"];

if(empty($code)) {
$auth_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&scope=create_event";
echo("<script>top.location.href='" . $auth_url . "'</script>");
}

$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&code=" . $code;
$access_token = file_get_contents($token_url);




//Use TRUE and FALSE not 0 and 1's like you originally had it

//264853420218553 is the event id.

$ch = curl_init("https://graph.facebook.com/264853420218553?" . $access_token . ""); 
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, TRUE);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_CAINFO, NULL); 
curl_setopt($ch, CURLOPT_CAPATH, NULL); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);

$result = curl_exec($ch); 
echo $result;?>
于 2011-10-25T09:00:24.210 回答
0

我唯一能想到的尝试就是

1) 使用“method=delete”执行 POST 请求,看看是否有效

2) 手动查看生成的 HTTP 请求,看看是否有问题——然后您可以隔离问题

于 2010-05-18T16:29:49.043 回答
0

它只是意味着该特定对象不支持 HTTP 删除方法。

一种选择是使用 Http POST 并将 method=delete 添加到参数查询中。确保您的应用程序具有publish_stream权限,否则您将永远无法发布提要。权限由 Facebook 完成。

于 2010-08-01T00:08:14.963 回答
0

关于这个答案:

固定的!删除时,您必须将用户 ID 添加到对象 ID:DELETE https://graph.facebook.com/673509687_104812882909249?access_token= {access_token} 其中 673509687 是我的用户 ID,104812882909249 是对象 ID

不幸的是,这仅适用于用户访问令牌,而不是当您尝试使用例如 PHP 语言删除服务器上的应用程序请求(使用应用程序访问令牌)时。

如果您有使用 app-access-token 删除应用请求的解决方案,请描述它。谢谢你的帮助!

于 2011-09-15T01:40:58.153 回答