Ir para conteúdo
  • Cadastre-se

dev botao

Pegar retorno NFE via socket.


Ver Solução Respondido por Celso Marigo Junior,
  • Este tópico foi criado há 2545 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Boa tarde.

Estou  desenvolvendo a NFE por tcp/ip, pois desenvolvo em Java. Ja criei o Arquivo .INI e envio o comando via tcp para criar e enviar a nfe, visualizando a DANFE.

Gostaria de pegar o retorno que ele faz via tcp para guardar em banco de dados  chave da nfe e o nome do arquivo que ele gera para a nfe.

Reparei que ele gera esse retorno no ACBR monitor Plus igual a um arquivo .Ini, mas em tela. como ler esse Arquivo? ele fica salvo em alguma pasta para que eu possa fazer a leitura dele?

desde já agradeço.

Abraço

 

Rogério Furlan

Link para o comentário
Compartilhar em outros sites

Na verdade o retorno vem pelo canal de comunicação do socket que você usou para enviar o comando. Você precisa ler a resposta nele.

Veja na pasta de exemplos no diretório do ACBrMonitorPLUS existem um exemplo usando Socket em Java (JavaNIOSocketExample.java)

Consultor SAC ACBr

Celso Marigo Junior

Conheça o Portal do Projeto ACBr
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
 String comando = "NFE.CriarEnviarNfe('" + builder + "',1,1,1)";

                String resultado = "";
                String Retorno = "";
                java.net.Socket TelnetACBr = null;
                java.io.PrintStream out = null;
                java.io.BufferedReader in = null;
                String Leitura = "";
                String ETX = "\u0003";
                short b = -1;

                String OK = "N";
                // cria o socket
                try {
                    TelnetACBr = new java.net.Socket("192.168.43.5", 3434);
                    out = new java.io.PrintStream(TelnetACBr.getOutputStream(), true);
                    in = new java.io.BufferedReader(new java.io.InputStreamReader(TelnetACBr.getInputStream()));
                    OK = "S";
                } catch (java.net.UnknownHostException e) {
                    Retorno = "Erro: Host desconhecido! Verifique as configurações de rede: " + "\n\n" + e.getMessage();
                } catch (java.io.IOException e) {
                    Retorno = "Erro: Falha de comunicação com o ACBrMonitor, contate o suporte técnico: " + "\n\n" + e.getMessage();
                } catch (Exception e) {
                    Retorno = "Erro: tentando conectar com o ACBrMonitor. Contate o suporte técnico: " + "\n\n" + e.getMessage();
                }
                if (OK == "S") {
                    // envia o comando e busca o retorno
                    try {
                        out.println(comando + '\r' + '\n' + "." + '\r' + '\n');
                        out.flush();

                        Leitura = "";
                        while (b != 3) {
                            b = (short) in.read();
                            if (b != 3) {
                                Leitura += (char) (b);
                            }
                        }
                        Retorno = Leitura;

                        resultado = in.readLine();

                        in.close();
                        out.close();
                        TelnetACBr.close();

                    } catch (Exception e) {
                        Retorno = "Erro: Falha ao ler o retorno do ACBrMonitor. Contate o suporte técnico: " + "\n\n" + e.getMessage();
                    }
                }

            }
        }

Celso segue parte do codigo, onde envio a nfe.  tentei pegar o retorno pelo in.readLine() mas não obtive resultado.

Obrigado pela força.

Link para o comentário
Compartilhar em outros sites

  • Solution

@Rogerio Luna Furlan o exemplo que você usou como base é o antigo. Fiz algumas alterações no exemplo mais novo, e já subi no SVN, estou anexando aqui para ficar mais facil.

O problema neste exemplo aqui é que o aplicativo java estava tentando ler a resposta antes de o monitor gerar a resposta completa. Para garantir que ele leia a resposta completa, é necessário verificar o caracter 3, que indica final da resposta.

Portanto este exemplo está funcional, fiz varios testes com comandos que retornam respostas bem longas, e tudo funcionou corretamente.

 

JavaNIOSocketExample.java

Consultor SAC ACBr

Celso Marigo Junior

Conheça o Portal do Projeto ACBr
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.