【问题标题】:Facebook API - delete statusFacebook API - 删除状态
【发布时间】:2011-02-20 23:20:23
【问题描述】:

在 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 包含访问令牌。

【问题讨论】:

  • 什么是“status_id”?一个提要条目?有效吗?
  • 相关状态的 ID。是的,它是有效的 - 已使用返回状态的 get id pull 检查它。
  • 您的问题解决了吗? James Hartwig 说他找到了一个解决方案,但它没有被标记为答案(并且对我来说真的不起作用)

标签: php facebook facebook-graph-api curl


【解决方案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;?>

【讨论】:

  • 请注意上述代码中的一个错误:CURLOPT_SSL_VERIFYHOST 应该是一个整数参数,并且应该设置为 2(默认值)。有关详细信息,请参阅php.net/manual/en/function.curl-setopt.php。如果您将值设置为true,您实际上是在禁用主机检查,从而启用 MITM 攻击!
【解决方案2】:

对于仍在为此苦苦挣扎的人,我发现我的问题是试图删除我之前使用 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);

..然后调用成功。

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

我希望这可以帮助其他遇到同样问题的人。

【讨论】:

    【解决方案3】:

    关于这个答案:

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

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

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

    【讨论】:

    • 你能用 app-access-token 删除用户的状态信息吗?没想到……
    【解决方案4】:

    已修复!

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

    删除https://graph.facebook.com/673509687_104812882909249?access_token={access_token} 在哪里 673509687 是我的用户 ID,104812882909249 是对象 ID

    【讨论】:

    • +1 用于添加用户 ID。 -1 到 Facebook 获取糟糕的 API。
    • 我认为user_id应该是后缀而不是object_id前缀。
    【解决方案5】:

    这仅仅意味着该特定对象不支持 HTTP 删除方法。

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

    【讨论】:

      【解决方案6】:

      我唯一能想到的就是尝试

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

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

      【讨论】:

      • 嗨 Thr4wn。我尝试使用 method=delete 进行 POST,但这也不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多