8

Estoy tratando de desarrollar una aplicación de Facebook (apps.facebook.com/some_app) usando PHP donde necesito presentar información basada en los intereses de la música del usuario. Descubrí que está en "juegos de usuario_click>".Necesito ayuda sobre OAuthException Code 2500

Mis problemas son los siguientes:

  • Para acceder, he implementado el método de diálogo oauth como se sugiere en API en mi página de índice.

$auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
      . $app_id . "&redirect_uri=" 
      . urlencode($canvas_page) 
      ."&scope=user_likes"; 
  • Después de la autorización exitosa que vuelva a la página de índice con "código" como parámetros.

http://MY_CANVAS_PAGE/?code=some base64 encoded letters 
  • En primer lugar no sé si necesito señal_acceso sólo para leer música intereses de los usuarios, sino que han intentado todos los métodos sugeridos. No pude mover hacia adelante desde este punto
  • Tengo un código como este (en mi página de índice), que redirige a la autorización si no se establecen los parámetros del código.

if(empty($code) && !isset($_REQUEST['error'])) { 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
    echo("<script> top.location.href='" . $auth_url . "'</script>"); 
} 
  • Actualmente estoy tratando de obtener información pública del usuario aquí, pero sin éxito. He probado el método signed_request como se sugiere pero sin éxito

$signed_request = $_REQUEST["signed_request"]; 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 
echo ("Welcome User: " . $data["user_id"]); 

print_r($decoded_response); 

stdClass Object ([error] => stdClass Object ([message] => An active 
access token must be used to query information about the current user. 
[type] => OAuthException [code] => 2500)) 

para obtener información pública del usuario, he tratado también el ejemplo sugerido en PHP SDK


$facebook = new Facebook(array(
'appId' => MY_APP_ID, //registered facebook APP ID 
'secret' => MY_SECRET, //secret key for APP 
)); 

$fb_user = $facebook->getUser(); 

if($fb_user){ 
    try { 
     $user_profile = $facebook->api('/me'); 
     echo $user_profile['email']; 
    } 
    catch(FacebookApiException $e) { 
     $fb_user = null; 
    } 
} 

Pero sin éxito. ¿Alguien puede explicarme por qué estoy recibiendo este error y cómo acceder correctamente al interés musical del usuario? Probablemente malinterpreté la API.

Gracias

Deepak

+0

¿Ha encontrado una solución? Recibo este error incluso en https://graph.facebook.com/me url. ¿No debería devolverme mis datos de Facebook? – Kemal

Respuesta

0

tratar Este código

$code = $_REQUEST["code"]; 
    if(empty($code)) { 
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) ; 
    echo("<script>top.location.href='" . $dialog_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; 
    $response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 

PS: la dirección de correo electrónico del usuario no es una información pública & que necesita el permiso user_email para ello

+0

Pero le recomiendo usar PHP-sdk. –

+0

que es más o menos el mismo código en el enlace del blog de Facebook que he publicado anteriormente http://developers.facebook.com/blog/post/500/. Ya lo he intentado. Con el código anterior, si intento hacer eco de $ access_token, no se imprime nada. Simplemente en blanco. – Laraveldeep

+0

Para fines de depuración, he intentado hacer eco de $ response o print_r ($ response) pero no obtuve nada. No sé por qué recibo una respuesta nula/en blanco. Creo que las cosas salieron mal desde allí. Gracias – Laraveldeep

9

error 2500 significa que tiene no token de acceso o token de acceso a la aplicación, pero están intentando acceder al /me/ - 'me' es un marcador de posición para 'usuario actual o r ID de página 'por lo que no será válido sin un token de acceso para un usuario o página.

Para acceder a la lista de preferencias del usuario también tendrá la user_likesPermission cuando se les autorice

Las causas más probables que he visto para aplicaciones no ser capaz de cambiar el code para un token de acceso son:

  1. El redirect_uri que utilizó es una raíz carpeta o servidor y no se encuentra una barra diagonal (es decir, es http://www.example.com en lugar de http://www.example.com/)
  2. El redirect_uri que se utiliza en la primera llamada al diálogo de autenticación no era exactamente la misma que la redirect_uri que utilizó en la llamada a exchagne el código de un señal_acceso

Si el flujo de autenticación se rompe por alguna otra razón y usted no se puede resolver a partir de los ejemplos del SDK o la documentación Authentication, esto podría demorar un poco para que alguien le explique porque puede estar perdiendo algunos conocimientos previos necesarios para comprender sus respuestas

0

He resuelto mi problema gracias a https://developers.facebook.com/blog/post/534/

Acabo de copiar la muestra y pegué en mi guion Encaja completamente. Es una especie de uso híbrido de PHP y Javascript.

+0

¿Qué variable $ me? No existe una variable en el ejemplo que aparece o en el código – Igy

+0

He codificado mi proyecto hace 2 años y Facebook estaba usando ' $ me' variable en vez del actual '$ user_id' en' $ user_id = $ facebook-> getUser(); 'Entonces el' $ me' es ese '$ me'. Pero tienes razón, no hay' $ me' en la página. Lo siento, lo he borrado. – Kemal

1

Para mí, estaba tratando de obtener un token de autenticación con php y descubrí que el error 2500 se debió a un problema con file_get_contents que no devolvía nada. Pude acceder a la URL en mi navegador, pero no al usar file_get_contents. Lo arreglé usando CURL en su lugar como se describe aquí: https://stackoverflow.com/a/6325313.

El resultado fue que utilicé el código de https://developers.facebook.com/docs/authentication/server-side/ y sustituye la línea:

$response = file_get_contents($token_url); 

con

$ch = curl_init($token_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 

Por lo tanto, se convirtió en:

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

    /* Facebook say to use this, but file_get_contents isn't working! 
    $response = file_get_contents($token_url,null, $val); 
    */ 

    // Use this as an alternative 
    $ch = curl_init($token_url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($ch); 

    // From https://developers.facebook.com/docs/authentication/server-side/ 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 
Cuestiones relacionadas