• 0
Sign in to follow this  
maiconkkl

Autorização

Question

E ai pessoal eu tenho um sistema de autenticação porem estou com um problema, usando o arquivo meli eu consigo gerar um token e salvo ele no banco de dados, mas eu não sei como deixa ele permanente, ele sempre expira a cada 6h.
 

Como eu deveria proceder para gerar um novo token sem ter que um usuário var com sua conta do mercado livre logada gerar outro token ?

Se vocês me derem um script que ja faça isso prontinho melhor ainda, mas eu sei que ja estou pedindo muito.
Bom depois que virar expert nessa API eu irei criar um código e liberar pra geral ai fazer a integração.

A tecnologia que eu trabalho é PHP, Mysql.

Share this post


Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Então, o que estava acontecendo era quem o servidor não estava me retornando os dados, depois analisei o que por que e entendi o que estava errado.

Simplesmente o meu arquivo meli estava com um erro na solicitação, mas como você disse aquela parte estava incorreta mesmo:

// Se o código existir e a sessão estiver vazia
    if($code && !($_SESSION['access_token'])) {

Depois de tudo eu conseguir corrigir.

Vlw pela ajuda, caso queira, eu o posto meu código aqui para ajudar quem precisar.

Share this post


Link to post
Share on other sites
  • 0

Maicon,

 

leia sempre a documentação.

Sim, o token expira em 6h. Questão de segurança, mas basta você fazer um refresh token que terá um novo, em uma das suas perguntas você tem isto no código.

Uma vez que você tem o token e o refresh_token, salvo se o ML travar os servidores, você pode ficar renovando "ad eternum".

 

Até mais

Rodrigo

Share this post


Link to post
Share on other sites
  • 0

Aquele refresh_token não ta funcionando, é do arquivo meli.php que estou usando, então queria um exemplo para fica mais fácil... ver se estou fazendo algo de errado.

 

Sobre a documentação, acho que esta tudo muito escaço, encontro uma coisa aki outra ali, nada muito organizado.

Share this post


Link to post
Share on other sites
  • 0

E ai galera, eu estou tentando atualizar meu token que venceu a 2 ou 3 dias atras com esse código abaixo porem não estou obtendo exito.

Olha os dados que estou obtendo: 8zKtiL4.pngMeu código Abaixo

<?php
if (!isset($_SESSION)) {
	session_start('teste');
}
if(!require 'conexao.php'){
	require 'conexao.php';
}

// Definindo o caminho do arquivo de Login
$urlcentral = "******/funcoesmercado/login.php"; 

// Solicitando token ao banco de dados
$token = mysql_query('SELECT * from token WHERE code=1');
$token_row = mysql_fetch_assoc($token);

// Agora vamos criar as sessões
if($token_row['refresh_token'] != NULL){
	// Criando sessão com os dados do Banco de dados
	$_SESSION['access_token'] = $token_row['access_token'];
	$_SESSION['expires_in'] = $token_row['expires_in'];
	$_SESSION['refresh_token'] = $token_row['refresh_token'];

	// Estanciando e requerindo MELI
	require 'MercadoLivre/meli.php';
	$meli = new Meli('ID do Aplicativo', 'Senha do Aplicativo', $_SESSION['access_token'], $_SESSION['refresh_token']);

	// Atualizando o prazo da sessão
	if($token_row['refresh_token'] < time()) {
		try {
			// O Faça o Andamento da atualização
			print_r($_SESSION);
			$refresh = $meli->refreshAccessToken();
			// Agora vamos criar as sessões com os novos parâmetros
			$_SESSION['access_token'] = $refresh['body']->access_token;
			$_SESSION['expires_in'] = time() + $refresh['body']->expires_in;
			$_SESSION['refresh_token'] = $refresh['body']->refresh_token;
			print_r($_SESSION);
		} catch (Exception $e) {
		  	echo "Exception: ",  $e->getMessage(), "\n";
		}
	}
}
?>

Share this post


Link to post
Share on other sites
  • 0

Bem eu ja tinha notado isso e fiz uma correção, porem sem resultados, olha meu novo codigo para saber se tem algum erro:
IGMczXV.png

<?php
session_start('teste');

require 'conexao.php';

require 'MercadoLivre/meli.php';

$token = mysql_query('SELECT * from token WHERE id=1');
$token_row = mysql_fetch_assoc($token);

if($token_row['access_token'] != NULL){
	$_SESSION['access_token'] = $token_row['access_token'];
	$_SESSION['expires_in'] = $token_row['expires_in'];
	$_SESSION['refresh_token'] = $token_row['refresh_token'];
	$code = $token_row['code'];
	echo 'Dados do banco de dados<pre>';
		print_r($_SESSION);
	echo '</pre>';
}else{
	$code = $_GET['code'];
}

$meli = new Meli('Login do Aplicativo', 'Senha do aplicativo', $_SESSION['access_token'], $_SESSION['refresh_token']);

if($code || $_SESSION['access_token']) {

	// Se o código existir e a sessão estiver vazia
	if($code && !($_SESSION['access_token'])) {
		// Se o código foi no parâmetro get autorizamos
		$user = $meli->authorize($code, 'url de login');
		
		// Agora vamos criar as sessões com o usuário autenticado
		$_SESSION['access_token'] = $user['body']->access_token;
		$_SESSION['expires_in'] = time() + $user['body']->expires_in;
		$_SESSION['refresh_token'] = $user['body']->refresh_token;
		$insert = mysql_query("INSERT INTO token (code, access_token, expires_in, refresh_token) VALUES ('$code', '$_SESSION[access_token]', '$_SESSION[expires_in]', '$_SESSION[refresh_token]')");
	} else {
		// Podemos verificar se o token de acesso é inválido verificar o tempo
		if($_SESSION['expires_in'] < time()) {
			try {
				// Faça o andamento da atualização
				$refresh = $meli->refreshAccessToken();

				// Now we create the sessions with the new parameters
				$_SESSION['access_token'] = $refresh['body']->access_token;
				$_SESSION['expires_in'] = time() + $refresh['body']->expires_in;
				$_SESSION['refresh_token'] = $refresh['body']->refresh_token;
				//$sql = mysql_query("UPDATE token SET code =".$code.", access_token=".$_SESSION['access_token'].", expires_in=".$_SESSION['expires_in'].", refresh_token=".$_SESSION[refresh_token]." WHERE id = 1");
				$sql = "UPDATE token SET code=".$code.", access_token=".$_SESSION['access_token'].", expires_in=".$_SESSION['expires_in'].", refresh_token=".$_SESSION[refresh_token]." WHERE id = 1";
			} catch (Exception $e) {
			  	echo "Exception: ",  $e->getMessage(), "\n";
			}
		}
	}

	echo '<br />Dados novos obtidos<pre>';
		print_r($_SESSION);
	echo '</pre>';
	
} else {
	echo '<a href="' . $meli->getAuthUrl('url de login') . '">Login using MercadoLibre oAuth 2.0</a>';
}

Share this post


Link to post
Share on other sites
  • 0

Root:

não disponibilizar o access_token no site!

 

Básico:

o seu expires_in sempre será pequeno(menor que o objeto time), pois ele está em minutos, então você tem que fazer o cálculo na hora da geração e adicionar o valor do expires_in e depois fazer o cálculo entre a hora atual (time) e o valor gravado.

 

dúvidas:

depois de mudar o código o que aconteceu? Qual a resposta do servidor?

Quais os passos de código foram acionados? Faça um debug tabajara por passo, coloque uns echo no código. ex: 'gera 1', 'gera 2', 'refresh 1', 'refresh 2'.

 

Quando quero verificar o andamento do código faço isto:

// echo "meli - refresh: <br>" ;
// print_r($x);
// echo "<br>--meli<br>" ;
 
$token = $nmeli->refreshAccessToken();
// echo 'refresca token--<br>';
// print_r($token);
// echo '<br>--refresca token<br>';
 
 
// echo '<br>verifica token--<br>';
// print_r($token);
// echo '<br>novo token--<br>';
 
$nntoken = $this->grava($token['body'][0], $token['body'][1], $conex, $token['body']->expires_in);
$at = $nntoken['body'][0];
// print_r($at);
// echo '<br>--token<br>';
return $at;

Share this post


Link to post
Share on other sites
  • 0

Estou com o mesmo problema de nao retornar :

    [access_token] =>     [expires_in] => 1410925800    [refresh_token] => 

Por favor poderia informar onde estava o erro no código do sdk em php no meli.php ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this