Anterior  Próximo

Navegação:  e-Forms NFC-e 4.8.1.0 > Manual de Integração e-Forms NFC-e > Integração Agente para o PDV > Entrada

Entrada via Socket (TCP)

No formato de Entrada Via Socket, disponível somente para o uso no Agente físico, deverá estabelecer uma conexão com o Agente utilizando um endereço IP, porta e enviar o texto da mensagem com conteúdo similar ao disponibilizado em arquivo em um parâmetro contendo o buffer de dados (conteúdo string), obedecendo o seguinte formato:

 

<identificador ou nome de arquivo>_TCPMSG;<mensagem>

Onde:

<Identificador ou nome de arquivo> : É o nome de arquivo já tratado em demais pontos desse manual, onde deve ser seguido todas

as regras para tratar as lógicas para ter os identificadores de loja, agente, concentrador e tipo (TXT ou XML);

 

_TCPMSG: É um valor fixo usado para identificar a mensagem além de servir como separador;

 

Mensagem: É o conteúdo TXT ou XML a ser enviado para NFC-e ou SAT já tratados anteriormente no manual.

Para maiores detalhes da formação dos arquivos clique aqui.

 

Importante:

O sistema deverá capturar de forma automática o endereço IP do computador para iniciar a operação utilizando sockets.
Os indicadores ou nomes disponíveis para a Entrada via Socket não se limitam apenas ao _ped_env. Segue abaixo algumas das nomenclaturas possíveis de diferentes ações/mensagens:

LGSNDD2000001001#12345678_ped_env.txt

LGSNDD2000001001#12345678_ped_can-inu.txt

LGSNDD2000001001#12345678_ped_print.txt

LGSNDD2000001001#12345678_ped_ajuste.txt
      LGSNDD2000001001#12345678_ped_num.txt
      LGSNDD2000001001#12345678_ped_log-sat
      LGSNDD2000001001#12345678_ped_status-sat
      LGSNDD2000001001#12345678_ped_print-adic
 

A primeira parte do envio também será entregue no retorno, porém sem a palavra PED.
   Ex:LGSNDD2000001001#12345678_env.xml_TCPMSG.
Informar corretamente o identificador ou nome de arquivo é essencial para o funcionamento da solução. Também deve ser informado a extensão do formato (como no exemplo acima: .xml) para ser tratado corretamente pelo transformador de dados da aplicação;
 

 

Seguem exemplos de conectividade em linguagem JAVA seguindo o padrão de uma chamada:

hmtoggle_plus1Exemplos de Envio e Retorno em TXT

Importante:

Os conteúdos abaixo são exemplos, porém as estruturas são reais e devem ser seguidas. Junto com as linhas e tags correspondentes referentes à funcionalidade, segue também a implementação a ser realizada.

 

Para formato TXT será obrigatório enviar quebras no final das linhas (\r\n) conforme o exemplo:

String msgEnvio =  LGSNDD2000001001#12345678_ped_env.txt_TCPMSG;0000;3.10;ENVIO\r\n”;

 

 

Exemplo de Envio:

public static void main(String[] args){

String msgEnvio =  LGSNDD2000001001#12345678_ped_env.txt_TCPMSG;

+ "0000;3.10;ENVIO\r\n”

+ "1000;1429899193876\r\n”

+ "2000;3.10;NFe42150406255692000103650019823754021000534494\r\n”

+ "2100;42;00053449;Natureza da Operacao;1;65;1;982375402;2015-04-24T15:13:13-03:00;;1;1;4209300

//A mensagem continua conforme documentação da formação de arquivos

//Exemplo de chamada do método

String response = connect(“192.168.1.1”, 8080, msgEnvio); //método que realiza a chamada socket

System.out.println(response); //mostra o retorno carregado na string response com a resposta do processamento

 

Exemplo de Retorno - Retorno Realizado com Sucesso -

LGSNDD2000001001#12345678_env.txt_TCPMSG;

0000;3.10;Envio;

1000;100;Processamento realizado com sucesso;

1100;42150506255692000103658590001549381196527670;rlap9mgUS1Mj6k9v2mZGrSXaOKM=;142150015362084;2015-05-12T08:44:29-03:00

 

Exemplo Retorno - Retorno Realizado com Falha -

LGSNDD2000001001#12345678_env.txt_TCPMSG;

0000;3.10;Envio;

1000;205;Erro Genérico;

 

hmtoggle_plus1Exemplos de Envio e Retorno em XML

Importante:

Os conteúdos abaixo são exemplos, porém as estruturas são reais e devem ser seguidas. Junto com as linhas e tags correspondentes referentes à funcionalidade, segue também a implementação a ser realizada.

 

Exemplo de Envio:

public static void main(String[] args){

String msgEnvio =  “LGSNDD2000001001#12345678_ped_env.xml_TCPMSG;

+ "<enviNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"3.10\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"

+ "<idLote>1430758631055</idLote>"

+ "<indSinc>1</indSinc>"

+ "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">"

+ "<infNFe versao=\"3.10\" Id=\"NFe42150506255692000103650011188776181000075468\">"

+ "<ide>"

+ "<cUF>42</cUF>"

+ "<cNF>00007546</cNF>"

+ "<natOp>VENDA</natOp> ........";

 

//A mensagem continua conforme documentação da formação de arquivos

//Exemplo de chamada do método   

String response = connect(“192.168.1.1”, 9000, msgEnvio); //retorna a resposta

System.out.println(response); //mostra a resposta do processo

 

/*

 

Exemplo de Retorno - Retorno Realizado com Sucesso -

LGSNDD2000001001#12345678_env.xml_TCPMSG;

<nfce>

    <response>

        <code>100</code>

        <description>Processamento realizado com sucesso</description>

    </response>

    <authorization>

        <accesskey>42150406255692000103650017344078329000509784</accesskey>

        <digval>lYdBt6Z7hMRF/HAH8OPshMdvqXk=</digval>

        <dhrecbto>2015-04-29T11:09:15.415-03:00</dhrecbto>

    </authorization>

</nfce>               

 

Exemplo Retorno - Retorno Realizado com Falha -

LGSNDD2000001001#12345678_env.xml_TCPMSG;

<nfce>

    <response>

        <code>205</code>

        <description> Erro Genérico </description>

    </response>

</nfce>

*/

}

hmtoggle_plus1Componente de Conectividade

Importante:

Os conteúdos abaixo são exemplos, porém as estruturas são reais e devem ser seguidas. Junto com as linhas e tags correspondentes referentes à funcionalidade, segue também a implementação a ser realizada.

 

Existem 2 dos 3 parâmetros passados que merecem atenção:
oIP: É que trata o endereço do Agente em que vai se conectar, pode ser o IP local ou 172.0.0.1;
oPort: É a porta de comunicação que deve ser estabelecida com o Agente. Deve ser a mesma setada no arquivo CONFIG.PROPERTIES na propriedade socketPort, que subirá o servidor socket. É uma porta TCP que deve estar liberada localmente no computador Agente para permitir a comunicação e por padrão a sugestão é colocar na 9000.

 

Exemplo de Config Properties utilizando socketPort:

 

xms=32m

xmx=64m

serverUrl=http://localhost:8080

token=1c0f6919-81e3-4b25-a41a-96fb9e2b0638

enterpriseId=NDDigital

sourceId=01

proxy=;;;;

socketPort=8081

 

 

Este é um exemplo do componente/método connect que invoca o socket em JAVA utilizado nos exemplos acima:

Envio:

public static String connect(String ip, int port, String msg) {

try {

// Faz a conexão na PORTA passada pelo parâmetro

socket = new Socket();

socket.connect(new InetSocketAddress(ip, port), 20000); // Endereço IP, porta e timeout, este último muito importante que deve ser calibrado pela necessidade do cliente

// Conexão aceita pelo server

outputStream = new ObjectOutputStream(socket.getOutputStream());

// ---------- Envio da String para o server

try {

OutputStream os = socket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os);

BufferedWriter bw = new BufferedWriter(osw);

bw.write(msg); // Escreve a mensagem

bw.flush();

os.close();

osw.close();

bw.close();

} catch (IOException e) {

                       System.out.println("ERROR - Não foi possível ler os dados da mensagem.");

}

try {

outputStream.writeObject(msg); // Output na String para o server receber

} catch (IOException e) {// Caso ocorra uma exceção ao enviar a mensagem, deve ser tratada aqui:

System.out.println("ERROR - Não foi possível enviar a mensagem ao servidor.");

                 }

                 System.out.println("INFO - O arquivo foi processado com sucesso");

}

catch (IOException e) { //Caso ocorra um erro de conexão, deve ser tratada aqui:

System.out.println("ERROR - Não foi possível estabelecer conexão no IP:" + ip + " PORTA: " + port);

System.out.println(e);

}

 

// O client passa a ser ouvinte

// Recebe uma resposta após a mensagem ser recebido pelo servidor

try {

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);     

BufferedReader br = new BufferedReader(isr);

String retorno = new String(br);

is.close();

isr.close();

br.close();                                                                                   

StringBuffer sb = new StringBuffer();

              //Mensagem de sucesso no layout NDD  

              sb.append(retorno);            

mensagemRespostaDoServidor = sb.toString();                           

return mensagemRespostaDoServidor; // Retornará a mensagem que o server gerou;

} catch (Exception e) {//Aqui é a mensagem de erro tratada, caso ocorra um erro no retorno

System.out.println("ERROR - Ocorreu erro ao receber resposta do servidor.");

           System.out.println(e);                                       

return e;                           

}

}

 

Voltar