Natan Avila

Members
  • Content Count

    10
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Natan Avila


  1. Bom dia pessoal... 

    Estou criando o recurso claims em minha aplicação, e criando os botões na tela para os meus usuários de acordo com as ações  possíveis recebidas no JSON do Mercado Livre.

     

    Quote

    {  
       {  
          "due_date":null,
          "action":"send_message_to_complainant",
          "mandatory":false
       },
       {  
          "due_date":null,
          "action":"refund",
          "mandatory":false
       },
       {  
          "due_date":null,
          "action":"open_dispute",
          "mandatory":false
       }
    }

    Entretanto, ao realizar a ação de refound seguindo a documentação da API, envio o seguinte JSON:

     

    Quote

    {  
       "expected_resolution":"refund"
    }

     

    Entretanto, estou tendo a seguinte resposta: 

     

    Quote

    {  
       "code":null,
       "error":"bad_request",
       "message":"Invalid expected_resolution param",
       "status":400
    }

     

    Alguém passou por algo parecido, ou sabe o que possa estar acontecendo? Agradeço desde já.


  2. On 2/23/2018 at 8:52 AM, Marcos Fincotto said:

    Segue parte do código para quem utiliza Delphi: 

    
        LMultiDt := TIdMultiPartFormDataStream.Create;
        LMultiDt.AddFormField('key','value');
        LMultiDt.AddFormField('file','caminho_do_arquivo_no_caso_pdf');
        LMultiDt.AddFile('file',caminho_do_arquivo_no_caso_pdf,'application/pdf');
    
        idhttpConn.Post(https://api.mercadolibre.com/messages/attachments?access_token=$ACCESS_TOKEN,LMultiDt,Stream);
    
        Stream.DataString = referência do anexo criado

    Vlw parceiro, estava tendo os mesmos problemas que você e consegui arrumar uma solução apartir das explicação...

     

    Vou deixar aqui a resolução para Java: 

     

    Quote

    public class MultipartUtility {

        private final String boundary;
        private static final String LINE_FEED = "\r\n";
        private HttpURLConnection httpConn;
        private String charset;
        private OutputStream outputStream;
        private PrintWriter writer;

        /**
         * This constructor initializes a new HTTP POST request with content type is set
         * to multipart/form-data
         *
         * @param requestURL
         * @param charset
         * @throws IOException
         */
        public MultipartUtility(String requestURL, String charset) throws IOException {
            this.charset = charset;

            // creates a unique boundary based on time stamp
            boundary = "===" + System.currentTimeMillis() + "===";
            URL url = new URL(requestURL);
            httpConn = (HttpURLConnection) url.openConnection();
            httpConn.setUseCaches(false);
            httpConn.setDoOutput(true); // indicates POST method
            httpConn.setDoInput(true);
            httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
            outputStream = httpConn.getOutputStream();
            writer = new PrintWriter(new OutputStreamWriter(outputStream, charset), true);
        }

        /**
         * Adds a form field to the request
         *
         * @param name  field name
         * @param value field value
         */
        public void addFormField(String name, String value) {
            writer.append("--" + boundary).append(LINE_FEED);
            writer.append("Content-Disposition: form-data; name=\"" + name + "\"").append(LINE_FEED);
            writer.append("Content-Type: text/plain; charset=" + charset).append(LINE_FEED);
            writer.append(LINE_FEED);
            writer.append(value).append(LINE_FEED);
            writer.flush();
        }

        /**
         * Adds a upload file section to the request
         *
         * @param fieldName  name attribute in <input type="file" name="..." />
         * @param uploadFile a File to be uploaded
         * @throws IOException
         */
        public void addFilePart(String fieldName, File uploadFile) throws IOException {
            String fileName = uploadFile.getName();
            writer.append("--" + boundary).append(LINE_FEED);
            writer.append("Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + fileName + "\"")
                    .append(LINE_FEED);
            writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(LINE_FEED);
            writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
            writer.append(LINE_FEED);
            writer.flush();

            FileInputStream inputStream = new FileInputStream(uploadFile);
            byte[] buffer = new byte[4096];
            int bytesRead = -1;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            outputStream.flush();
            inputStream.close();
            writer.append(LINE_FEED);
            writer.flush();
        }

        /**
         * Adds a header field to the request.
         *
         * @param name  - name of the header field
         * @param value - value of the header field
         */
        public void addHeaderField(String name, String value) {
            writer.append(name + ": " + value).append(LINE_FEED);
            writer.flush();
        }

        /**
         * Completes the request and receives response from the server.
         *
         * @return a list of Strings as response in case the server returned status OK,
         *         otherwise an exception is thrown.
         * @throws IOException
         */
        public List<String> finish() throws IOException {
            List<String> response = new ArrayList<String>();
            writer.append(LINE_FEED).flush();
            writer.append("--" + boundary + "--").append(LINE_FEED);
            writer.close();

            // checks server's status code first
            int status = httpConn.getResponseCode();
                BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    response.add(line);
                }
                reader.close();
                httpConn.disconnect();
            return response;
        }
    }

    Quote

    File file = new File("caminho_do_arquivo_no_computador");
                MultipartUtility multipart = new MultipartUtility("https://api.mercadolibre.com/v1/claims/ID_RECLAMAÇÃO/attachments?access_token=$ACCESS_TOKEN", "UTF-8");
                multipart.addFormField("key", "value");
                multipart.addFormField("file", "caminho_do_arquivo_no_computador");
                multipart.addFilePart("file", file);
                List<String> response = multipart.finish();
                response.forEach(System.out::println);

    A diferença é que fiz postando no recurso Claims, mas a forma de postagem é a mesma para o Mensagens Pós Venda.


  3. 14 hours ago, rodrigojob said:

    Olá Natan,

    você cadastrou uma URL de retorno na aplicação, é esta URL que deve ser passada como parâmetro, se estiver correto tente fazer um encode nela.
    Eu uso o PHP e você está usando outra linguagem, pois tem uma coisa diferente no seu SDK o  está passando uma variável vazia depois dos parâmetros. Deve ser dotNet

    Bom dia Rodrigo!

     

    Então, eu estou usando a mesma URL, e tenho total certeza disso, visto que usei o ctrl + v para colar a URL no cadastro da aplicação, e no post.

    Fazer encode nela? Como assim?

    Quanto ao parametro vazio/linguagem. Uso o Java, e no post da biblioteca exige o "corpo" do post. Como nessa requisição não passa nada via json, ele vai vazio.

     

    PS: O código estava funcional até dias atrás.


  4. Boa tarde pessoal... Estou tendo um problema com o authorize, e não sei se é algum pau do mercado livre ou se estou deixando passar algo.

    O erro que estou obtendo é o "{"message":"The redirect_uri does not match the original","error":"invalid_grant","status":400,"cause":[]}".

    Só tem 1 problema: Eu tenho a completa certeza de as URLs são iguais (visto que foram colocadas por ctrl v, tanto no código quanto na aplicação).

    Tentei de 2 formas:

    Usando a classe Response e fazendo um post:

    response = meli.post("/oauth/token", params, "");

    E utilizando a própria classe meli:

    meli.authorize("code", "redirect_uri");

    Em ambos os casos tenho esse mesmo erro.

    E se eu tentar dar um refresh_token, tenho o seguinte erro: "{"message":"The grant type is invalid (refresh_token-authorization_code)","error":"invalid_grant","status":400,"cause":[]}"

    params.add("grant_type", "refresh_token");

     

    Detalhe adicional: Eu consigo obter o authorization_code gerado pelo mercado livre, e utilizando a MESMA url. Alguém sabe dizer o que pode ser, ou está tendo o mesmo problema?

     

    Obrigado e abraços!


  5. Bom dia glr.

    Fazendo uma consulta no /users/{ID_Usuario}/items/search com parâmetro "pending", eu consigo a lista dos items que estão para ser revisados, porém quando dou um get("/items/ID_ITEM"), retorna apenas os dados do item, e não tem o motivo do mesmo estar pendente.

    Por mais que ele tenha o sub_status, esse é muito generico quanto à fonte do erro.

    Tem alguma forma de pegar essa mensagem? Saber o motivo pelo qual o item está como "under_review"?

     

    att.

     

     


  6. Boa tarde pessoal. Estou fazendo uma aplicação, e estou na parte de criação / testes de compra de produtos. Consigo criar a publicação normalmente. Porém, quando vou comprar utilizando um outro usuario testes, não aparece nenhuma forma de pagamento na lista. Alguém saberia dizer o motivo?

     

    Deixei em anexo a imagem do field em branco. 

     

    Obrigado a todos!

    ml.jpg


  7. Estou tentando fazer uma integração de 1 sistema com o mercado livre via API Java. Porém estou tendo um erro e não consigo saber o motivo:

     

    codigo: 

     

    try {
                Meli m = new Meli(ID_LOGIN,
                        SENHA);
                FluentStringsMap params = new FluentStringsMap();
                params.add("title", "ProdutoTESTE");
                params.add("category_id", "MLB30997");
                params.add("listing_type_id", "bronze");
                params.add("condition", "new");
                params.add("available_quantity", "8");
                params.add("pictures", "[{\"source\":\"http://cancelando.com/wp-content/uploads/2017/09/como-cancelar-compra-mercado-livre.jpg\"}]");
                params.add("price", "999999");
                params.add("buying_mode", "buy_it_now");
                params.add("currency_id", "BRL");
                params.add("description", "ITEM");
                params.add("access_token",
                        TOKEN);
                Response response = m.post("/items", params,"{\"foo\":\"bar\"}");

     

    Estou tendo o seguinte erro: 

    {"message":"body.required_fields","error":"The fields [listing_type_id, title, category_id] are required for requested call","status":400,"cause":[]}

    Porém, como pode ser visto, eu estou passando esses 3 parametros. Alguém sabe o que pode estar causando isso?

     

    A url do post: https://api.mercadolibre.com/items?title=ProdutoTESTE&category_id=MLB30997&listing_type_id=bronze&access_token=APP_USR-3785419397635201-102312-89e9b557c91e4b2cc7829c21d9400bed__J_G__-96616987