2010-04-23 27 views
26

Estoy tratando de recuperar datos usando la nueva API de gráficos, sin embargo, el token que estoy recuperando de OAuth no parece estar funcionando.Gráfico de Facebook API - Token de OAuth

La llamada que estoy haciendo es la siguiente;

$token = file_get_contents('https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=<app_id>&client_secret=<app secret>'); 

Esto devuelve un token con una longitud de cadena 41. Para darle un ejemplo de lo que se devuelve he proporcionado a continuación una muestra (convertido a todos los números 0, todas las letras mayúsculas a 'A' y pequeña caja cartas a 'a'

access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA. 

Aprovecho esta token de acceso y adjuntarlo a la solicitud de llamada de datos, no parece ser el token correcta, ya que no devuelve nada hago la llamada de datos de la siguiente manera.;

file_get_contents('https://graph.facebook.com/<my_page's_id>/statuses?access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.') 

Cuando recupero manualmente esta página directamente a través del navegador, aparece un mensaje de error 500/Internal Server.

Cualquier asistencia sería gratamente apreciada.


Actualización:

Desde entonces, he cambiado el método de file_get_contents() para rizar. Por retreiving las cabeceras me sale el siguiente mensaje de error ...

{"error":{"type":"OAuthException","message":"Missing client_id"}} 

pero mi arsenal POST incluye 'client_id' ?!

+0

alta que hizo todavía tiene el mismo problema –

Respuesta

24

Don't use type=client_cred, this is not the access token that a user grants for your app to use. You don't need redirect_uri or code or any approval to get the client_cred type access token.

Facebook implements an early draft of OAuth 2 at this time. So there is not support for "state" yet.

But it is nice that you can suffix your state to the redirect_uri, the important point to note here is that the site url that you specified (which is the redirect_uri)

no debería tener un

question mark at the end or anywhere in what you suffix as client state, encoded or not. If you did, you will get the dreaded "Error validating verification code"

No utilice el estilo

http://www.Redirect.com?

URL correcta es http://www.Redirect.com/

Espero que ayude.

+3

Esta es la respuesta correcta. Su redirect_uri tiene que terminar con un /. ¡Gracias por decirnos! –

+0

Absolutamente exacto 100%. Además, como comentario: NO USE redirect_uri en $ params array dado al método getLoginUrl() en el PHP SDK !!! Vas a romperlo. –

+0

Daahh! Perdiendo la barra también. ¡Dang! – Spedge

0

Asegúrate de que tienes la URL codificada sus parámetros de consulta, su ser en realidad debería ser:

000000000000%7CAaaAaaAaaAAaAaaaaAaaAa0aaAA 

Nota: también el parámetro de tipo parece ser necesaria, sin que usted también consigue 500 de error con el mensaje:

{ 
    "error": { 
    "type": "OAuthException", 
    "message": "Error validating verification code." 
    } 
} 

en lugar del mensaje que obtiene con otros parámetros que faltan. No puedo ver eso mencionado en the documentation.

+0

en qué punto es el parámetro de tipo requerido. que está incluido en el token $ = file_get_contents (...) –

+0

Oh, lo siento que es una nota a sí mismo - que ya tiene en su parte token de acceso – user242766

+1

Hola, me sale el siguiente error: { "error": { "tipo": "OAuthException", "mensaje": "Falta el parámetro redirect_uri". } } ¿Cuál podría ser el problema con la URL de redirección? Espero que todo lo que di sea correcto. –

2

tratar de seguir la API, es decir, sin añadir type pero redirect_uri y code (a pesar de que no lo necesitamos):

$token = file_get_contents('https://graph.facebook.com/oauth/access_token?client_id=<app_id>&client_secret=<app secret>&redirect_uri=<url>&code=<code>'); 
16

Esto funciona para mí :-)

header('Location: https://graph.facebook.com/oauth/access_token?' . http_build_query(array(
    'client_id'  => FB_APP_ID, 
    'type'   => 'client_cred', 
    'client_secret' => FB_SECRET, 
    'code'   => $code))); 

Por supuesto, usaría file_get_contents en su lugar y analizará el token de la respuesta

+3

+1. Agregando el tipo = client_cred lo arregló por mí. – harriyott

+1

+1 el tipo = client_cred funcionó para mí. La página no redirige a mi redirect_uri sin embargo. – Richard

+0

type = client_cred parece emitir un token sin una sesión de usuario (como se describe en "Autenticación como una aplicación"). En esencia, se comporta como si nunca pasaras el código. Un token sin una sesión de usuario funciona principalmente, pero algunas API que necesitan saber quién es el usuario actual no funcionan, más notablemente: http://graph.facebook.com/me. He sido completamente incapaz de obtener un token con una sesión de usuario siguiendo las instrucciones aquí o en facebook. Algo frustrante. –

0

También puede obtener este error si su conexión t La URL no es una base de su URI de redireccionamiento. Por ejemplo

Connect URL: http://www.example.com/fb/connect/ 

Redirect URI: http://www.example.com/fb/connect/redirect 

me encontré con un problema por el que mi URI de redireccionamiento era la misma que la URL de conexión, pero se me olvidó la trasera/en la URI de redireccionamiento de modo FB los vio como diferentes y no pasó la autenticación.

-6

necesita introducir un valor real en lugar del < id_apl> y un valor secreto. el código es un valor único que debe generar, y la URL de redirección que proporcione verificará que el código es correcto.

+0

estimado que es en realidad tal vez no quiere mostrar su identificación de la aplicación aquí es por eso que escribió

3

Tenga en cuenta que

'tipo' => 'client_cred',

no es más que una manera de evitar la continuación, una vez dicho esto, lo anterior también funciona

Después de que el usuario autoriza su aplicación, redirigimos al usuario al URI de redireccionamiento que especificó con una cadena de verificación en el código del argumento, que puede intercambiarse por un token de acceso oauth. Cámbielo por un token de acceso buscando https://graph.facebook.com/oauth/access_token. Pasar el exacta misma redirect_uri como en el paso anterior:

vía: por: http://developers.facebook.com/docs/api ver también: http://forum.developers.facebook.net/viewtopic.php?pid=238371

+1

gracias! el * exacto * mismo redirect_uri fue lo que me ayudó. :) –

6

Puede solicitar un token de acceso a través del terminal (Los usuarios OSX) usando rizo:

curl -F type=client_cred -F client_id=xxxxxxxxxxxxxxx -F client_secret=c0f88xxxxxxxxxxxxxxxxxx1b949d1b8 https://graph.facebook.com/oauth/access_token 

vez que tenga su token de acceso a continuación, puede utilizarlo en futuras solicitudes de enrollamiento a través de cambios hace que la nueva API gráfica:

Publicar un mensaje a un identificador de perfil:

curl -F 'access_token=xxxxxxxxxxxxx|mGVx50lxxxxxxxxxxxxhzC2w.' -F 'message=Hello Likers' -F 'id=1250000000000905' https ://graph.facebook.com/feed 
+0

¿no caducará el token de acceso en unos días? –

+0

Hola, Volcanic, estoy tratando de usar esta técnica para publicar en un feed de página web preferida, ¿debería funcionar alguna idea? http: // stackoverflow.com/questions/10419371/how-to-programmatically-publish-to-a-facebook-feed-for-a-liked-webpage –

8

Me encontré con exactamente el mismo problema pero resultó que el problema no es la codificación del parámetro redirect_uri, o que tenía una barra diagonal o un signo de interrogación simplemente es que pasé en dos URL de redirección diferentes (no había leído la especificación en ese momento).

El redirect_uri solo se usa como una redirección una vez (la primera vez) para redirigir a la parte que confía con el token de "código". La segunda vez, el redirect_uri se devuelve al servidor de autenticación, pero esta vez no se usa como era de esperar (para redirigir) sino que el servidor de autenticación lo usa para verificar el código. El servidor responde con access_token.

http://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.5.2

Se dará cuenta de la documentación facebook (que es terrible) dice fetch "cambiarlo por un token de acceso de ir a buscarhttps://graph.facebook.com/oauth/access_token."

En resumen, yo no tenía para codificar o hacer algo especial para el Uri, solo pase el mismo redirect_uri dos veces, y busque en la segunda página para obtener el access_token dentro.

0

Lo siento por publicar en una pregunta anterior. Debido a cambios en el acceso reciente de fb. Tengo este código en funcionamiento y pensé que lo publicaría para cualquier otra persona que necesite ayuda. Este método funciona muy bien con jQuery ajax y elimina el ejemplo redirect_uri dado de facebook.

$ch = curl_init("https://graph.facebook.com/oauth/access_token?client_id=INSERT_YOUR_APP_ID_HERE&client_secret=INSERT_YOUR_APP_SECRET_HERE&grant_type=client_credentials"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_NOSIGNAL, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 30000); 
$data = curl_exec($ch); 
$curl_errno = curl_errno($ch); 
$curl_error = curl_error($ch); 
curl_close($ch); 

if ($curl_errno > 0) 
{ 
     echo "cURL Error ($curl_errno): $curl_error\n"; 
} 
else 
{ 
    echo $data; 
} 

produce un público disponible access_token para mostrar a los usuarios que no son de Facebook. es decir, un muro de feed de página de Facebook a través de una API api para sitios web. señal_acceso = 191648007534048 | eVilnMh585rlQLZLvBAmqM6s-1g

2

Tal vez el problema está resuelto pero aún no han encontrado respuesta aceptada de usted y tal vez esta respuesta ayuda a los que se enfrentan a problemas similares

Primera tenemos que crear nuestra instancia de aplicación.

$facebook = new Facebook(array(
    'appId' => '149865361795547', 
    'secret' => 'ee827a8df6202e1857b3fc28f3185a61', 
    'cookie' => true, 
)); 

manera fácil de obtener señal_acceso

$token = $facebook->getAccessToken(); 

estado de la página conseguir lo que nos piden en su pregunta

$response = $facebook->api($pageID . '/feed','get',$token); 

gracias ..

Cuestiones relacionadas