• Announcements

    • Wesley Nascimento

      Divisão / División   05/09/2017

      O fórum será dividido em 3 línguas, respeitando a mesma forma que hoje é feito o site de developers. O objetivo da divisão é melhorar a troca de mensagens e o suporte por parte do time do Mercado Livre. Obrigado pela colaboração de sempre. ---

      El foro será dividido en 3 idiomas, respetando la misma forma que hoy se hace el sitio de desarrolladores. El objetivo de la división es mejorar el intercambio de mensajes y el soporte por parte del equipo del Mercado Libre. Gracias por la colaboración de siempre.

Leaderboard


Popular Content

Showing most liked content since 04/23/2017 in all areas

  1. 1 like
    Sim, é um pouco confusa mesmo. Acho que vale a pena você baixar uma vez a árvore completa e verificar os IDs das categorias
  2. 1 like
  3. 1 like
    Cuando vayas redirecionar el usuário para el login de MercadoLibre, puede agregar un parametro https://auth.mercadolivre.com.br/authorization?response_type=code&force_login=true&client_id=TU_CLIENT_ID
  4. 1 like
    os 3 pontos são verdade. grátis... não é! Se é para rachar o frete entre ML e vendedor é porque não é de graça.
  5. 1 like
    Buenas tardes, como están? Desde la mañana de hoy estamos solamente recibiendo solamente algunas notificaciones de orders, otras ordenes creadas no se nos envía la notificación de la misma, no pasa lo mismo con las notificaciones de Pago. Están teniendo algún problema o demora en el envío de las mismas? Desde ya gracias. Saludos, Leonardo
  6. 1 like
    @rodrigojob adicionei a funcionalidade de poder fechar o seu próprio tópico. Obrigado.
  7. 1 like
    Sim, recomendo que leia o site da documentação, está em português e explica todos os detalhes de como fazê-lo
  8. 1 like
    Bom dia, Estou implementando uma rotina para atualização de access_token e percebi que quando recebo um novo refresh_token ao submeter um POST para https://api.mercadolibre.com/oauth/token?grant_type=refresh_token&client_id=00000000&client_secret=0000000&refresh_token=REFRESH_TOKEN não faz com que o anterior (passado como parâmetro no POST) perca a "validade", ou seja, todos os refresh_token continuam gerando novos access_token. Em outras palavras, eu nunca preciso mudar a URL do POST porque o refresh_token nunca expira. Esse comportamento da API é normal? Ou a partir do momento que um novo refresh_token é gerado o anterior deveria expirar?
  9. 1 like
    Buena tarde, Pido su apoyo para tener un portal de pruebas para subir productos y en mi sistema hacer un servicio para que cuando un cliente seleccione mi producto me llegue una notificación de respuesta Gracias.
  10. 1 like
    Buenas. Publicação FREE é apena para iniciante e há restrição de quantidade, condição, categoria, ... Coloque com outro tipo e categoria, pois a categoria que você indicou não aceita publicação FREE, conforme a mensagem de erro: Listing type free is not available for category MLM1915.
  11. 1 like
  12. 1 like
  13. 1 like
    http://developers.mercadolibre.com/es/producto-sincroniza-modifica-publicaciones/#Actualiza-el-stock "Is not possible to activate an item without stock."
  14. 1 like
  15. 1 like
    Buen dia Foro. Esta es una aportacion para implementar el modo "Server-Side", principalmente denotar los principales tips para no fallar en el proceso: Conoce y comprende el proceso de inicio a fin para obtener una access_token. Generar una URL LOGIN valida para Server-Side. Cachar el flujo $_GET que envía el server de mercado al regresar a nuestro portal web. Generar en background un flujo POST donde enviamos la CODE cachada por $_GET["code"]. El punto de arriba nos retornara un flujo json encodeado con los valores de interés. Asegura ser muy exacto en tus parámetros, como redirect_uri que debe ser exactamente igual a como lo declaraste en el Application Manager. Si el manual dice "Haz POST", debe ser POST. RECOMENDACION: genera una sesion para mantener tu access_token a la mano. ## GENERAR URL LOGIN La Url_Login es el enlace de cara al cliente donde dara click y los sacara de nuestro portal web hacia la aplicación en mercadolibre, esperando que el usuario Permita los permisos de la aplicación. <?php define( ML_API, "api.mercadolibre.com" ); define( ML_KEY, "_Key_App_" ); # id de la app en mercado define( ML_SECRET, "_Key_Secret_App_" ); # secret key de mercado define( HTTP_SERVER, "_rediect_uri_" ); # la URL de tu web declarada en el app manager # loginurl para que de click el usuario $loginurl= 'https://auth.mercadolibre.com.mx/authorization?response_type=code&client_id='. ML_KEY; # si no existe la token en sesion if( !$_SESSION["mercadolibre_token"] ) echo '<a href="'. $loginurl. '">Conectar a Mercadolibre</a>'; else echo 'Ya estas conectado...'; ?> ## CACHANDO EL FLUJO $_GET (el Code). En esta parte se supone que usuario acepto la aplicacion y mercadolibre redirigio el navegador del usuario de hacia la pagina web declarada en "redirect_uri" en el AppManager, ademas le coloque un flujo $_GET (Ejm: http://www.web.com/?var=data), en consecuencia debemos cachar el flujo $_GET donde viene "code", y en ese instante generar una consulta POST para decirle al servidor de mercado "eit aqui esta el code, ahora dame una token". <?php if( $_GET["code"] ) # si hay code, es de mercado { $arr= array( "grant_type"=>"authorization_code", "client_id"=>ML_KEY, "client_secret"=>ML_SECRET, "code"=>$_GET["code"], "redirect_uri"=>HTTP_SERVER ); # obteniendo token principal $r= mercadolibre( '/oauth/token', 'POST', $_SESSION["SUPERID"], $arr, $arr ); # esta funcion esta AL FINAL DEL POST ** $r= explode("\r\n\r\n", $r, 2); $data= json_decode($r[1]); $_SESSION["mercadolibre_token"]= $data->access_token; # generamos sesion para el navegador $trama= array( "id"=>"'". proteger_cadena($_SESSION["SUPERID"]). "'", "mercadolibre_id"=>"'0'", "mercadolibre_token_refresh"=>"'". proteger_cadena($data->refresh_token). "'", # refresh token "mercadolibre_token"=>"'". proteger_cadena($data->access_token). "'", # token para consultas "mercadolibre_expire"=>"'". proteger_cadena((($data->expires_in)+time())). "'" # fecha en que expira la token y se usara la refresh ); if( !actualizar_bdd( "USUARIOS", $trama ) ) # mi funcion de actualizar en la BDD echo '<div class="msg_error">Problemas para actualizar datos.</div>'; else { echo '<div class="msg_exito">Cuenta de mercadolibre asociada con exito.</div>'; # obteniendo perfil del usuario, recibimos array $user= ml_userprofile( $_SESSION["SUPERID"] ); # funciona al FINAL DEL POST ** # print_r($user); actualizar_bdd( "USUARIOS", array("id"=>"'". proteger_cadena($_SESSION["SUPERID"]). "'", "mercadolibre_id"=>"'". proteger_cadena($user->id). "'") ); # mi funcion que actualiza en la BDD unset($user); } $link= 'https://www.miempresa.com/miusuario/perfil/'; # recargo esta URL para que vea que quedo asociado unset($r, $data); echo ' <script type="text/javascript"> var url= \''. $link. '\'; setTimeout( function() { window.location = url; }, 2000); </script>'; } ?> ## FUNCIONES DE INTERES (mi SDK personal) Estas son las funciones que me cree para mejor manejo del api de mercado (OJO, solo son algunas de varias que hice). <?php function twitter_encodedata( $buf, $delimiter, $aux ) { $data=''; # buffer foreach( $buf as $key=>$val ) # ciclo { if( $data ) { if( $aux==1 ) $data .= $delimiter; else if( $aux==2 ) $data .= rfc3986_encode($delimiter); # si tiene datos, ponemos delimitador else $data .= $delimiter; } if( $aux==2 ) $data .= $key. rfc3986_encode("="); else $data .= $key. "="; if( $aux ) $data .= rfc3986_encode($val); # concatenamos else $data .= "\"". rfc3986_encode($val). "\""; } return $data; # retornamos } # Esta funcione es universal y sirve para comunicarse con "api.mercadolibre.com" # $place --> es el lugar a consultar, por ejemplo: /users/me # $metodo --> debe ser POST, GET, PUT o DELETE # $user -> id en MI bdd personal, si es array entonces es una toma de desicion para saber si incluye o no el access_token # $arr -> arreglo de los datos POST # $extra --> arreglo datos GET function mercadolibre( $place, $metodo, $user, $arr, $extra ) { $r=0; $mltoken=''; if( !is_array($user) ) # no es array, es token embebida { if( consultar_datos_general("USUARIOS", "ID='". proteger_cadena($user). "'", "MERCADOLIBRE_TOKEN") ) # si hay token $mltoken= '?access_token='. consultar_datos_general("USUARIOS", "ID='". proteger_cadena($user). "'", "MERCADOLIBRE_TOKEN"); # obtenemos token } else if( is_array($user) && count($user)==2 ) # son dos elementos, 0=id_usuario, 1=consulta { if( !strcmp($user[1], "refresh_token") ) # actualizar token $mltoken=''; # vacio, no es necesario indicar el token, el usuario lo anidara en el $extra else if( consultar_datos_general("USUARIOS", "ID='". proteger_cadena($user[0]). "'", "MERCADOLIBRE_TOKEN") ) # si hay token $mltoken= '?access_token='. consultar_datos_general("USUARIOS", "ID='". proteger_cadena($user[0]). "'", "MERCADOLIBRE_TOKEN_REFRESH"); # obtenemos token } $data= array( $metodo, $place.$mltoken.($extra ? ( !strcmp($mltoken, "") ? '?':'&').twitter_encodedata($extra,'&',1):''), # .twitter_encodedata($arr,'&',1), json_encode($arr), # datos post 'json' ); $r= curl_iodata( ML_API, $data, 443); return $r; } # perfil del usuario function ml_userprofile($userid) { $r= mercadolibre( '/users/me', 'GET', $userid, NULL, NULL ); return json_decode($r); } # obtiene datos por socket, segun peticion POST o GET # data = array( stream, argumentos, datos_post ); function curl_iodata( $host, $data, $port ) { $r=''; if( !strcmp($port, "443") ) #puerto seguro $fullhost= 'https://'. $host; else $fullhost= $host; $curl= curl_init(); # inciamos url curl_setopt($curl, CURLOPT_URL, $fullhost.$data[1] ); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30 ); curl_setopt($curl, CURLOPT_TIMEOUT, 30 ); curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, $data[0] ); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE ); if( !strcmp($data[0], "POST") ) # si es post { curl_setopt($curl, CURLOPT_HEADER, 1 ); curl_setopt( $curl, CURLOPT_POST, 1 ); if( $data[3] && !strcmp($data[3], "json") ) # datos json $contenido= array( 'Content-Type: application/json' ); else if( $data[3] && !strcmp($data[3], "oauth") ) # datos oauth $contenido= array( 'User-Agent: Turundus/PHP', 'Accept: */*', 'Authorization: OAuth '. $data[2] ); else $contenido= array( 'Content-Type: application/x-www-form-urlencoded', 'Content-Length: '. strlen($data[2])); if( $data[4] && !strcmp($data[3], "oauth") ) # datos oauth { curl_setopt( $curl, CURLOPT_HTTPHEADER, array("Expect:") ); $contenido[]= 'Content-Length: '. strlen($data[4]); curl_setopt( $curl, CURLOPT_POSTFIELDS, $data[4] ); } else if( !$data[4] && !strcmp($data[3], "oauth") ) # datos oauth { curl_setopt( $curl, CURLOPT_HTTPHEADER, array("Expect:") ); $contenido[]= 'Content-Length: 0'; curl_setopt( $curl, CURLOPT_POSTFIELDS, $data[4] ); } else { curl_setopt( $curl, CURLOPT_HTTPHEADER, $contenido ); curl_setopt( $curl, CURLOPT_POSTFIELDS, $data[2] ); } curl_setopt($curl, CURLOPT_VERBOSE, TRUE); } $r= curl_exec($curl); curl_close($curl); return $r; } ?> Espero le haya servidor
  16. 1 like
    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 <?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 Saludos !
  17. 1 like
    @Marcio Sales dependendo do banco de dados que você utiliza, eu recomendaria você fazer a importação através de bulkinsert. Você poderia jogar os dados para uma tabela temporária e depois usar um recurso do próprio banco para transpor esses dados para as tabelas definitivas. Mysql: https://dev.mysql.com/doc/refman/5.7/en/load-data.html http://stackoverflow.com/questions/14330314/bulk-insert-in-mysql SQL Server: https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql Abraços. Pierre Noronha
  18. 1 like
    Wesley Nascimento

    TDC Floripa

    until
    O Mercado Livre estará presente na #TheDevConf 2017 em Florianópolis. Link para inscrições.
  19. 1 like
    Also you have videotutorials in pt: https://www.acamica.com/cursos/110/introduccion-a-la-api-de-mercadolibre mldev you Rock! ;-)
  20. 1 like
    como enviado acima pelo higoraf basta você seguir a documentação, que é bem detalhada e ainda apor cima em português!
  21. 1 like
    http://developers.mercadolibre.com/pt-br/ Comece por aqui colega, existe algumas ferramentas que eles disponibilizam pra facilitar o uso em varias linguagens, a api é completinha, voce vai precisar de alguns pré requisitos, como SSH no seu domínio, pra conter o tal do https rs. Inicialmente voce vai precisar de uma conta no ML pra ter um AppId e uma SecretKey, logo após voce precisará criar a autorização e autenticação pra gerar um token, e depois disso é só alegria!
  22. 1 like
    Hola furtivo, lo que le explicaba a KaisarCode es porque no tenía echo el GRANT a su aplicación con el usuario por ende no recibía las notificaciones, con respecto a tu problema, puedes ver myfeeds para chequear si las notificaciones se están enviando? curl -X GET https://api.mercadolibre.com/myfeeds?app_id={App_id} Saludos Lean
This leaderboard is set to Sao Paulo/GMT-03:00