- Integração Emissão de NFSe Atibaia | JK
- Enviar arquivo .xml para emissão de Nota Fiscal de Serviço Eletrônica (NFSe);
- Receber .xml de retorno e código de verificação da nota;
- Enviar .xml para cancelamento da NFSe
- A linguagem utilizada foi Java, para integração mais fácil com o sistema da empresa. (NetBeans IDE 16).
- Para efeito de testes de requisição foi usilizado também o PostMan.
- O WebService utilizado é próprio da prefeitura
http://ws.prefeituradeatibaia.com.br/WSNfses/nfseresources/ws/v2/emissao
. - O WebService utilizado é próprio da prefeitura
http://ws.prefeituradeatibaia.com.br/WSNfses/nfseresources/ws/v2/cancela
.
A prefeitura disponibiliza algums manuais e tutoriais para a implementação com o WebService.
Aparentemente não é muito estável, podem ocorrer quedas ou passar por manutenções que podem durar bastante tempo.
Como observado no dia 14/03/2023 onde com um teste às 08:22 houve um retorno positivo, porém ao longo do dia passou a retornar somente o seguinte erro:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 500 for URL: http://ws.prefeituradeatibaia.com.br/WSNfses/nfseresources/ws/v2/emissao/simula
- indica que pode ser acessado pelo browser
- indica que NÃO pode ser acessado pelo browser
- Serviço utilizado para verificar se serviços relacionados a emissão de NFSe estão disponíveis.
- Serviço utilizado para visualizar modelo de arquivo xml a ser enviado.
- Serviço utilizado para verificar veracidade da NFSe
- Serviço utilizado para realizar a SIMULAÇÃO do envio da NFSe.
- Serviço utilizado para realizar o ENVIO da NFSe.
- Serviço utilzado para realizar o CANCELAMENTO da NFSe.
filePath = caminho onde será salvo o retorno do XML
Recebe como parâmetro o conteúdo do xml response, cria novo arquivo .txt especificado em filePath
, o conteúdo é escrito no arquivo, há duas situações de 'System.out.println' que retornam se foi ou não possível salvar o arquivo.
conteudoRetorno = String responsável por passar o conteúdo do xml para que seja salvo pelo método
salvaXml
.
xmlFilePath = camilnho do xml de envio ("J:\RP-GRF\NFSE-Jk\ESTAB-101\RETORNO\RETORNO.txt").
xmlBody = esta variável irá armazenar o conteúdo do xml passado non parâmetro anterior.
url = armazena o valor da url que será usada para fazer uma requisição no webservice.
status = armazena o http status de uma requisição (200 == ok | outros == falha ou erro).
Inicia tentando conexão com a url
, especifica o método 'POST', passa as autorizações (inscrição municipal e token de acesso), especifica o tipo do conteúdo 'application/xml'.
Lê o retorno e o transfere para xmlBody
, recebe o http status e o armazena em status
, então o conteudo do xmlBody
é passado como 'String' para conteudoRetorno
.
Por fim retorna o status com 'System.out.println' e então chama o método salvaXml
.
filePath = caminho onde será salvo o retorno do XML
Recebe como parâmetro o conteúdo do xml response, cria novo arquivo .txt especificado em filePath
, o conteúdo é escrito no arquivo, há duas situações de 'System.out.println' que retornam se foi ou não possível salvar o arquivo.
conteudoRetorno = String responsável por passar o conteúdo do xml para que seja salvo pelo método
salvaXml
.
xmlFilePath = camilnho do xml de envio ("J:\RP-GRF\NFSE-Jk\ESTAB-101\RETORNO\RETORNO.txt").
xmlBody = esta variável irá armazenar o conteúdo do xml passado non parâmetro anterior.
url = armazena o valor da url que será usada para fazer uma requisição no webservice.
status = armazena o http status de uma requisição (200 == ok | outros == falha ou erro).
Inicia tentando conexão com a url
, especifica o método 'POST', passa as autorizações (inscrição municipal e token de acesso), especifica o tipo do conteúdo 'application/xml'.
Lê o retorno e o transfere para xmlBody
, recebe o http status e o armazena em status
, então o conteudo do xmlBody
é passado como 'String' para conteudoRetorno
.
Por fim retorna o status com 'System.out.println' e então chama o método salvaXml
.
O projeto visa tratar um xml por vez, ou seja não armazena xmls de NFSes anteriores, o mesmo vale para os xmls de retorno, que são sempre substituídos para salvar espaço de armazenamento.
- xml de envio: J:\RP-GRF\NFSE-JK\ESTAB-101\XML
- xml de retorno: J:\RP-GRF\NFSE-JK\ESTAB-101\RETORNO
Seguindo o material disponível no site da prefeitura e dentro do sistema, inicialmente foram feitos testes de requisição no Postman, em seguida tentou-se explorar a possibilidade de se fazer a integração com Python.
Iniciou-se o desenvolvimento do projeto em java devido a maior facilidade que seria implementar com o sistema.
Utilizando NetBeans IDE.
Em testes subsequentes foi comum enfrentar alguns erros recorrentes.
Projeto de envio de NFSe funcionando.
Problemas ao tentar implementar o cancelamento de NFSe.
Projeto separado em duas aplicações java diferentes Enviar e Cancelar.
Após 08:22 (último teste bem sucedido) o webservice ficou em provavel manutenção pelo resto do dia.
Retorno do suporte do provedor informando que uma correção havia sido efetuada.
Projeto foi concluído, compilação bem sucedida e teste com conexão remota no cliente também com resultados positivos.