Facebook API – eliminar estado

En PHP, estoy usando curl para enviar un delete al apéndice del gráfico fb, y sin embargo recibo el siguiente error;

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

El código que estoy usando es;

 $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 contiene el token de acceso.

¡Fijo!

Debe anteponer el userid al ID del objeto al eliminar:

BORRAR https://graph.facebook.com/673509687_104812882909249?access_token= {access_token} donde 673509687 es mi ID de usuario y 104812882909249 es el ID de objeto

Para cualquier persona que todavía esté luchando con esto, descubrí cuál era mi problema al intentar eliminar las solicitudes de aplicaciones que había creado previamente usando el SDK de PHP, lo que provocaba este error.

(# 2) Parámetro no válido: cuerpo de un mensaje de error / advertencia. El título es: parámetro inválido

El problema era esencialmente con qué token de acceso se estaba utilizando; usuario o aplicación.

El escenario específico en el que estaba trabajando era cuando un usuario de mi aplicación invitó a un amigo a Facebook (usando una solicitud de aplicación) pero luego quiere revocar esa invitación. En este caso, quiero eliminar la solicitud de la aplicación en Facebook que se creó anteriormente. Sin embargo, en este momento, el usuario que ha iniciado sesión no es el destinatario de la solicitud de la aplicación, sino el remitente.

Al mirar el código PHP SDK, automáticamente usa el token de acceso del usuario si tiene uno, sobre el token de acceso a la aplicación. De hecho, no parece haber una forma de obtener explícitamente el token de la aplicación del SDK.

Al intentar eliminar la solicitud de la aplicación usando el siguiente …

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

… y dejando que el SDK de PHP elija el token de usuario, recibí el mensaje de error del parámetro inválido (n. ° 2). Sin embargo, si construyo manualmente el token de acceso a la aplicación (donde el formato es “$ app_id | $ app_secret” y lo paso como una matriz en un tercer parámetro …

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

..then la llamada tiene éxito.

Por lo tanto, esencialmente debe usar el token de acceso a la aplicación para eliminar las solicitudes de la aplicación si el usuario actual no es el destinatario de la solicitud de la aplicación.

Espero que esto ayude a cualquier otra persona que tenga problemas con el mismo problema.

Modifiqué tu código un poco. (Debe repetir “verdadero” si se hace correctamente) Esto es lo que está funcionando actualmente para mí.

También tenga en cuenta que esto no borra los eventos creados a través de Facebook. Es por eso que recibe el error de permisos. Esto solo borra los eventos creados a través de su aplicación … (aplicación vinculada a $ 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(""); } $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;?> 

Lo único que puedo pensar es intentar

1) hacer una solicitud POST con “método = eliminar” para ver si eso funciona

2) mire manualmente la solicitud HTTP producida para ver si algo parece estar mal, entonces puede aislar el problema

Simplemente significa que el método de eliminación HTTP no es compatible con ese objeto específico.

Una opción es usar Http POST y agregar method = delete a la consulta del parámetro. Asegúrate de que tu aplicación tenga un permiso publish_stream contrario nunca podrás publicar un feed. Los permisos son hechos por Facebook.

Acerca de esta respuesta:

¡Fijo! Tiene que anteponer el ID de usuario al ID del objeto al eliminar: BORRAR https://graph.facebook.com/673509687_104812882909249?access_token= {access_token} donde 673509687 es mi ID de usuario y 104812882909249 es el ID de objeto

Desafortunadamente, esto solo funcionará con un token de acceso de usuario y no cuando intente eliminar una solicitud de aplicación en el servidor (con el token de acceso a la aplicación) usando, por ejemplo, el lenguaje PHP.

Si tiene una solución para eliminar solicitudes de solicitud usando el token de acceso a la aplicación, por favor descríbalo. ¡Gracias por tu ayuda!