estou desenvolvendo uma aplicação simples para uso da API do MercadoLivre que será 99% em JavaScript, como a SDK JS do ML está descontinuada a uns anos, somente a parte de autenticação fiz em PHP.
Pretendo fazer a aplicação toda em JS para não consumir recursos do servidor, no primeiro acesso o app requisita o Aceess Token do servidor e armazena ele localmente, daí então todas as requisições que serão feitas à API do ML será feita via Ajax.
O problema está sendo em como o Javascript vai requisitar o Access Token ao meu PHP do usuário em específico que estará acessando, no meu protótipo eu armazenei numa variável minha ID do ML, então passo esta ID para o servidor para requisitar o token:
//requisita o access_token
var user_id = '0000'; //Minha ID do ML
var expires_in = GM_getValue('expires_in');
var agora = Math.round(new Date().getTime()/1000);
if (expires_in < agora || !expires_in){
$.getJSON("https://meusite.com/renew_token.php?user_id=" + user_id, function(retorno){
//se recebeu o token, grava ele
if (retorno.access_token){
GM_setValue('access_token', retorno.access_token);
GM_setValue('expires_in', retorno.expires_in);
}
//se não existir o token provavelmente o usuario nunca se autenticou, então abre a janela para autorizar o app
else{
window.open("https://meusite.com/login.php","janela1","width=600, height=600, directories=no, location=no, menubar=no, scrollbars=no, status=no, toolbar=no, resizable=no");
}
});
}
//requisita o access_token
O 'renew_token.php' recebe a ID do usuário e com esta ID ele pega o 'refresh_token' deste usuário que está armazenado para requisitar um 'access_token' à API do ML e retorna este token em formato Json para o JS, não estou conseguindo pensar numa forma é de o PHP identificar de que usuário se trata sem eu passar esta ID como estou fazendo.
Se eu acessar diretamente o https://..../login.php ele me retorna o Token correto pois a SDK reconhece o usuário autenticado no navegador, porém também não consegui fazer este retorno "voltar" para o JavaScript.
Tentei requisitar o ID do usuário direto de uma página do ML que contém esta informação, mas é bloqueado pela política de CORS.
Alguém consegue me dar um rumo de como tentar resolver isso?