No se puede obtener el token de acceso de Facebook. Obtuve una OAuthException que dice “Error al validar el código de verificación”

Estoy usando Java y el propósito de mi aplicación de demostración es simple: actualizar el estado del usuario. Seguí el flujo del lado del servidor en la página http://developers.facebook.com/docs/authentication . Obtuve el diálogo de autenticación, Facebook condujo a la url de callback y obtuve el código en mi página de callback. Luego fallé cuando bash generar un token de acceso.

En la página de guía, dice que la siguiente url podría usarse para generar un token de acceso:

https://graph.facebook.com/oauth/access_token? client_id=YOUR_APP_ID&redirect_uri=YOUR_URL& client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE 

Pero lo que sucede en mi entorno es que recibí el siguiente mensaje de error:

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

Estoy bastante seguro de que todos los parámetros son correctos porque si cambio el valor de client_id o client_secret, recibiré un mensaje de error diferente. El parámetro de código es lo que obtuve de la callback de Facebook. Entonces esto debería ser correcto, ¿verdad? Realmente no puedo entender cuál es el problema …

Alguna idea sobre esto? Me quedo atrapado aquí …

Hace poco resolví exactamente este problema: todo coincidía, pero falló con OAuthException. Lo que hizo que funcionara fue cambiar el uri de redirección (en ambas solicitudes de flujo) desde:

http://foo.example.com

a

http://foo.example.com/

Es decir, agregue la barra al final. Y luego funcionó. Estúpido y tonto, pero ahí tienes.

Tuve el mismo problema y probé las sugerencias anteriores. Ayudaron, pero en mi caso el problema fue que mi redir URL tenía un parámetro de consulta y Facebook no estaba de acuerdo con eso. Entonces, la moraleja de la historia es que la url de redir que enviaste para intercambiar el token tiene que ser idéntica a la url de redir original y no puede tener parámetros de consulta.

Nos divertimos un poco con esto también.

En nuestro caso, la barra final en la URL ya estaba allí, así que probé el Token que estábamos usando en la FB Debug Tool y se validó, por lo que parecía que FB ni siquiera estaba viendo el Token en la solicitud.

Después de un poco de investigación, encontré el head-slapper; hacíamos un GET con encabezados HTTP solo que no con un Querystring, por lo que FB literalmente no veía el token en absoluto.

La moraleja parece ser que si puede obtener el Token validado en la herramienta FB Debug, es probable / algo / mal en su solicitud:

Puede ser que falte “/” o alguna otra discrepancia con la URL definida de la aplicación (la coincidencia de dominios es un error diferente). No he intentado definir la URL de la aplicación / web para HTTPS y hacer la solicitud con HTTP, pero sospecho que también podría causar problemas.

O como en nuestro caso, el Método de Solicitud podría ser incorrecto: GET con Encabezados o POSTING, ambos lanzan el 2500, tienes que hacer GET con una Querystring.

¡Espero que ayude!

Yo tuve el mismo problema. Era una diferencia de URL, pero a diferencia de los otros que publicaron, la mía era la diferencia entre HTTP y HTTPS.

Tenemos BigIP manejando las solicitudes HTTPS y reenviando a un servidor HTTP Apache. Cuando se llamó a la función getCurrentUrl () de BaseFacebook, detectó HTTP, y no el HTTPS original. Modifiqué esa función así:

 protected function getCurrentUrl() { if ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)) || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || (isset($_SERVER['HTTP_PSEUDOSSL']) && $_SERVER['HTTP_PSEUDOSSL'] == 'true')) { $protocol = 'https://'; } else { $protocol = 'http://'; } ... 

Esta versión es compatible con la clave HTTP_PSEUDOSSL . Espero que esto ayude a alguien.

Sí, el rayo final también funcionó para mí, ¡gracias!

Para fines de depuración, me pareció útil utilizar exactamente el código que fb proporciona en la página del desarrollador:

http://developers.facebook.com/docs/authentication/

Una vez que lo hagas funcionar, puedes modificarlo para que se ajuste a tu propio código.

No estoy seguro, pero también puede verificar que la configuración de “URL del sitio” y “Dominio del sitio” sea correcta en la pantalla Editar aplicación, porque de acuerdo con la documentación, el redirect_uri debe estar en el mismo dominio. (Esto es diferente de las URL de la página canvas / tab).

También tenía un problema con la url, pero la solución es diferente. Estaba pasando la signedRequest que el SDK de JavaScript regresa al servidor y utilizando el valor del code para solicitar un token de acceso. Sin embargo, de acuerdo con algunos comentarios en la versión 3.1.1 del Facebook PHP SDK , el JavaScript SDK asocia el code con un redirect_uri de cadena vacía, es decir, "" :

 // the JS SDK puts a code in with the redirect_uri of '' if (array_key_exists('code', $signed_request)) { $code = $signed_request['code']; $access_token = $this->getAccessTokenFromCode($code, ''); if ($access_token) { // etc } } 

Después de que cambié mi propio código del lado del servidor para usar un redirect_uri de "" , entonces la solicitud de un token de acceso funcionó.

en mi caso, mi código no funcionaba en IE. El problema estaba en la siguiente línea

 $user_id = $facebook->getUser(); if ($user_id) 

Porque de alguna manera la función getUser siempre devolvía 0, por lo que esa condición siempre era verdadera. Que generó ese error de token no válido. Bueno, lo arreglé solo diciendo esto:

 if ($user_id>0) 

Tonterías…