• 0
Angel Cantu

[PHP] Conseguir access_token en el callback -- Client Side

Question

Buen dia amigos.

Esta no es una duda, es una aportacion debido a los problemas que me tope (anoche) en la implementacion del API, apenas tengo 1 (uno) dia haciendo la implementacion y mi primer detalle fue "capturar" la access_token debido a que mercadolibre retorna la token anteponiendo un # (hashtag) por lo cual, el PHP directo es imposible obtener dicho valor por el flujo $_GET, $_POST o $_SERVER. Tuve que detenerme en estudiar el problema como por 4 horas para finalmente encontrar una manera, a final de cuenta funciono pero me gustaria compartirles mi solucion ya que no uso el SDK Meli ya que mi codigo es mas simplificado e intuitivo (para mi plataforma).

## Generando URL de autentificacion
 

<?php
$loginurl= 'https://auth.mercadolibre.com.mx/authorization?response_type=token&client_id=ID_DE_MI_APP';

# yo creo una sesion general para validar si ya fue sincronizada la pp
if( !$_SESSION["mercadolibre_token"] )
	echo '[<a href="'. $loginurl. '">Conectar</a>]';
else
	echo 'Ya estas conectado :D';
?>

En mi APP (en la plaatforma mercadolibre) configure que el "callback" sea la URL directa "www.miempresa.com" y yo me encargare de disernir entre una sincronizacion de mercado, twitter y facebook... Para esto usare dos partes, el callback que recibe y el callback que procesa.

CALL BACK QUE RECIBE, este practicamente recibe la respuesta de mercadolibre, que en lo personal es irrecomendable ya que metes en lios a los desarrolladores: http://www.miempresa.com/#access_token=la_token&expires_in=_segundos_&user_id=_id_usuario_&domains=_dominio_

Practicamente por javascript capturamos el elemento "hashtag" y lo transformamos a como PHP lo puede leer (http://www.miempresa.com/?var=data&var=data)

<?php
# callback que recibe
define( HTTP_SERVER, "http://www.miempresa.com" );

echo '<script type="text/javascript">
	var a= window.location.hash;
	if( a!==\'\' )
		{
		var url= \''. HTTP_SERVER. '/?\'+a.substr(1);
		window.location = url;
		}
	</script>';

?>

CALL BACK QUE PROCESA, este ya es el que recibe por flujo $_GET la info para procesarla :D

<?php
# callback que procesa

if( $_GET["access_token"] && $_GET["expires_in"] && $_GET["user_id"] && $_GET["domains"] )
	{
	$_SESSION["mercadolibre_token"]= $_GET["access_token"]; # genero el access_token para uso en toda la plataforma

	# actualizacion en BDD para guardar los datos de mercado
	$trama= array(
			"id"=>"'". proteger_cadena($_SESSION["SUPERID"]). "'",  # id del USUARIO en mi BDD
			"mercadolibre_id"=>"'". proteger_cadena($_GET["user_id"]). "'",
			"mercadolibre_token"=>"'". proteger_cadena($_GET["access_token"]). "'",
			"mercadolibre_expire"=>"'". proteger_cadena(($_GET["expires_in"]+time())). "'"
		);

	if( !actualizar_bdd( "USUARIOS", $trama ) ) # mi funcion de guardar
		echo '<div class="msg_error">Problemas para actualizar datos.</div>';
	else 	echo '<div class="msg_exito">Cuenta de mercadolibre asociada con exito.</div>';
	}
?>

Al final tendremos guardada la token para uso posterior, y como es costumbre mia, tendre una variable de sesion especifica para usarla en la plataforma: $_SESSION["mercadolibre_token"]

Espero les haya ayudado :D

Saludos !

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Hola Angel, me parece que esto es lo que estoy necesitando.

Resulta que para recolectar datos para mi trabajo final de la facultad estoy tratando de desarrollar una aplicacion q me permita obtener la autrorización de los usuarios de mercado libre para obtener datos privados de su cuenta. La idea es usarla con amigos, y familia.

La aplicación la hice con el sdk de php, con Heroku. No tengo ni idea de programación.

Puedo obtener el permiso pero no puedo acceder a los llaves de acceso para luego hace el get de los datos.

Es posible que me ayudes a agregar esto que vos desarrollaste?  Lo tenes en Github?

Muchas gracias 

FLORENCIA

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...