2009-09-28 54 views
8

Tengo un problema con la autenticación oauth de Twitter y el uso de una url de devolución de llamada.Twitter O-Auth Callback url

estoy de codificación en PHP y utilizando el código de ejemplo que hace referencia el gorjeo wiki, http://github.com/abraham/twitteroauth

Tengo ese código, y trató de una prueba simple y funcionó muy bien. Sin embargo, quiero especificar programáticamente la url de devolución de llamada, y el ejemplo no lo admite.

Así que modifica rápidamente el método getRequestToken() para tomar en un parámetro y ahora se ve así:

function getRequestToken($params = array()) { 
    $r = $this->oAuthRequest($this->requestTokenURL(), $params); 
    $token = $this->oAuthParseResponse($r); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
} 

y mi llamada es similar a esto

$tok = $to->getRequestToken(array('oauth_callback' => 'http://127.0.0.1/twitter_prompt/index.php')); 

Este es el único cambio Lo hice, y la redirección funciona como un hechizo, sin embargo, recibo un error cuando trato de usar el acceso que acabo de conceder para intentar hacer una llamada. Aparece el error "No se pudo autenticar". Además, la aplicación nunca se agrega a las conexiones autorizadas de los usuarios.

Ahora leo las especificaciones y pensé que todo lo que tenía que hacer era especificar el parámetro al obtener el token de solicitud. ¿Podría alguien con un poco más de experiencia en oauth y twitter posiblemente darme una mano? Gracias

Respuesta

7

Creo que a estas alturas ya lo ha solucionado twitter o puede que haya olvidado proporcionar una url de devolución de llamada predeterminada en la configuración de su aplicación, que es necesaria para que la url de devolución de llamada dinámica funcione como se mencionó anteriormente.

En cualquier caso, esto funcionó pasando el parámetro oath_callback al recuperar el token de solicitud. Estoy usando la biblioteca PHP twitter-async y tuve que hacer un pequeño ajuste para que la biblioteca pase la url de devolución de llamada.

Si está utilizando twitter-asíncrono, el cambio es el siguiente:

funciones getRequestToken y getAuthenticateURL modificado para tener URL de devolución de llamada como parámetro

public function getRequestToken($callback_url = null) 
    { 
    $params = empty($callback_url) ? null : array('oauth_callback'=>$callback_url); 
    $resp = $this->httpRequest('GET', $this->requestTokenUrl, $params); 
    return new EpiOAuthResponse($resp); 
    } 


public function getAuthenticateUrl($callback_url = null) 
    { 
    $token = $this->getRequestToken($callback_url); 
    return $this->authenticateUrl . '?oauth_token=' . $token->oauth_token; 
    } 

y pasar la URL de devolución de llamada desde el código PHP.

$twitterObj->getAuthenticateUrl('http://localhost/twitter/confirm.php'); 
+0

Saludos: esa es exactamente la modificación que necesitaba. – Gavin

+0

@Gavin -bueno saber que te ayudó – Murukesh

+1

Para cualquier persona interesada, esto ahora es parte de twitter-async self – Relequestual

-2

Twitter no respeta el parámetro oauth_callback y solo utilizará el especificado en la configuración de la aplicación registrada.

Tampoco permite los nombres 127.0.0.1 o localhost en esa devolución de llamada, así que configuré http://dev.twipler.com que está configurado para 127.0.0.1 en DNS para que pueda usarlo con seguridad;

http://dev.twipler.com/twitter_prompt/index.php 
+0

Twitter admite URL oauth_callback dinámicas por OAuth 1.0a. http://tools.ietf.org/html/rfc5849#section-2.1 – abraham

1

incluso me estaba poniendo a 401 de error .. pero su resuelto .. Durante el registro de su aplicación en Twitter debe dar la URL de devolución de llamada ... como http://localhost:8080.

lo he hecho usando java ... así que mi código es: String CallbackURL = "http: // localhost: 8080/tweetproj/index.jsp"; provider.retrieveRequestToken (consumidor, CallbackURL);

donde tweetproj es mi nombre del proyecto y index.jsp es sólo una página JSP ...

Espero que esto pueda ayuda a u ...

0

Después de que el usuario autoriza a la aplicación en twitter.com y vuelven a su URL de devolución de llamada que tiene que intercambiar el token de solicitud de un token de acceso.

Cuestiones relacionadas