在PHP中,我使用curl向fb图形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包含访问令牌。
答案 0 :(得分:11)
固定!
删除时,您必须将用户ID添加到对象ID:
删除https://graph.facebook.com/673509687_104812882909249?access_token= {access_token} 哪里 673509687是我的用户ID,104812882909249是objectID
答案 1 :(得分:1)
对于仍在努力解决这个问题的人,我发现我的问题是试图删除我之前使用PHP SDK创建的应用程序请求,这导致了此错误。
(#2)参数无效:错误/警告消息的正文。标题是:参数无效
问题主要在于使用了哪个访问令牌;用户或应用程序。
我正在处理的具体方案是我的应用程序中的用户邀请了朋友Facebook(使用应用程序请求),但随后想要撤消该邀请。在这种情况下,我想删除以前创建的Facebook上的应用程序请求。但是,此时,登录用户不是应用程序请求的收件人,而是发件人。
查看PHP SDK代码,它会通过应用程序访问令牌自动使用用户访问令牌(如果有)。实际上,似乎没有办法从SDK中显式获取应用程序令牌。
尝试使用以下内容删除应用请求时...
$ facebook-> api('/'。$ fb_request_id,'DELETE');
...让PHP SDK选择用户令牌,我收到了(#2)无效参数错误消息。但是,如果我手动构造应用程序访问令牌(格式为“$ app_id | $ app_secret”并将其作为数组键传递给第三个参数...
$ facebook-> api('/'。$ fb_request_id,'DELETE',array('access_token'=> $ app_access_token);
..然后通话成功。
因此,如果当前用户不是应用程序请求的收件人,基本上您需要使用应用程序访问令牌来删除应用程序请求。
我希望这可以帮助其他人在同一个问题上挣扎。
答案 2 :(得分: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;?>
答案 3 :(得分:0)
我唯一能想到的就是
1)使用“method = delete”执行POST请求以查看是否有效
2)手动查看生成的HTTP请求以查看是否出现错误 - 然后您可以隔离问题
答案 4 :(得分:0)
它只是意味着该特定对象不支持HTTP删除方法。
一个选项是使用Http POST并将method = delete添加到参数查询中。确保您的应用程序具有publish_stream
权限,否则您永远不能发布Feed。
权限由Facebook完成。
答案 5 :(得分:0)
关于这个答案:
固定! 删除时,必须将userid添加到对象ID: 删除https://graph.facebook.com/673509687_104812882909249?access_token= {access_token} 其中673509687是我的用户ID,104812882909249是objectID
不幸的是,这只能用于用户accessstoken,而不是当你尝试使用PHP语言删除服务器上的apprequest(使用app-access-token)时。
如果您有使用app-access-token删除apprequests的解决方案,请描述一下。谢谢你的帮助!