- NFS-e EasyDocs - Bootstrap 5

1. Introdução Última Atualização: 01-11-2021

A emissão de NFS-e pode ser um processo complicado devido à multiplicidade de layouts de integração, há diferentes necessidades de cada município, diferente fornecedor do sistema de NFS-e e a inexistência de uma padronização.

Existe um projeto de um modelo de integração, com especificação de layout de XML's, especificação de como compor uma solicitação de serviço da web e a descrição da interface que fornecida pelo provedor (WSDL), modelo de comunicação (HTTPS com certificado digital ICP-Brasil) orientado pela ABRASF (Associação Brasileira das Secretarias de Finanças das Capitais), para ser seguido pelos municípios e fornecedores de software. Este modelo definiu somente a orientação dos dados do xml, deixando de padronizar as interfaces de comunicação.

No mercado, alguns fornecedores de sistemas já tinham seu modelo próprio de integração antes da publicação do modelo ABRASF. Outros fornecedores seguiram o padrão ABRASF, mas com diferenças nos namespaces dos XML's personalizando a aplicação, utilizaram uma das muitas versões ABRASF (1.00, 1.04, 1.07, 2.00, 2.01, 2.02) para dados e aplicaram sua própria autenticação (p. ex. uns seguem o padrão com autenticação por certificado digital, outros utilizam usuário e senha). Na prática, mesmo os fornecedores que "seguem" o modelo ABRASF necessitam de sua própria implementação, o que torna um caos o desenvolvimento.

Dentre os diferentes modelos existentes nos municípios, podemos citar algumas soluções de fornecedores: WebISS, Betha, GINFES, ISSNet, Thema, Abaco, Tiplan, DSF, ou modelos próprios, por exemplo, São Paulo, Curitiba, Rio de Janeiro, Belo Horizonte (compartilhou para POA) entre outros.

Estima-se haver mais de 270 soluções de ISSQN pulverizadas no país. Apenas 20 soluções com cobertura de 30 ou mais municípios tendem a oferecer um modelo Abrasf mais estável, mas ainda assim, com algum tipo de personalização na implementação.

O Nfse Easy oferece as empresas uma plataforma para desenvolver uma única integração para emissão de NFS-e. Não é necessário conhecer o layout de cada município, nem se preocupar com a comunicação em cada cidade, esse processo é feito pelo Nfse Easy. Em outras palavras, é o Nfse Easy que faz a ponte entre os sistemas dos contribuintes e qualquer município que disponibilize a integração com a NFS-e.

O modelo de integração Nfse Easy utiliza um modelo NACIONAL de dados de entrada em formato TXT ou JSON e contém 3 componentes:
  • Web Services: Os Web Services são a interface que será mais frequentemente utilizada pelo sistema de gestão para a comunicação com o software emissor de NFS-e (este software).
  • Windows Service: O serviço do windows é o responsável por processar os documentos (enviá-los a PM, consultá-los e cancelá-los).
  • Interfaces Web: A Interface Web fornece uma forma prática de visualização de empresas cadastradas e documentos.

2. Vamos Começar!

Você precisará cadastrar um login e senha para aproveitar todos os benefícios desta extraordinária ferramenta. No ambiente de homologação, você pode usar:

Nota

Para testes você pode utilizar os dados da BENEFIX

LOGIN : "nfse"
SENHA : "benefix"

2.1 Meu Usuário

Efetue o registro na Interface WEB para obter um usuário e senha, que também será utilizado como autenticação para os Web Services

Após criação do usuário, o próximo passo é cadastrar a empresa, que pode ser feito tanto pela Interface WEB quanto por Web Service. Clique aqui para descrição dos serviços disponíveis para Emitente.

Com suas credênciais devidamente criadas, sua aplicação já poderá utilizar os Serviços descritos no Web Service NfseEasyService - Serviço da Web (endereço de homologação da Benefix).

3. Web Services

Os serviços web são independentes de plataformas e de linguagem, foram desenvolvidos para a construção de aplicativos que se comunicam usando protocolos web padrão e formatos de dados como HTTP, SOAP e XML, estes utilizados também nas soluções Mercantil (NF-e) e Varejo (NFC-e).

Os serviços web foram desenvolvidos e disponíveis em WCF, sendo descritos também em ASP.NET (.aspx) a partir do WCF, para serem consumidos de acordo com sua escolha e facilidades da tecnologia, suportando o protocolo http ou https. Fornecimento de API para a construção de serviços RESTful padronizados, baseados em OData V4 no .NET, somente em outros produtos Benefix usando tecnologia Microsoft RESTier.

Os métodos disponíveis em ambiente de homologação ou produção estão publicados e podem ser consultados nos endereços (.asmx) ou (.svc).

3.1 Url Produção

Endereço Produção ASMX

https://www1.webenefix.com.br/NfseEasyWS/NfseEasyService.asmx

Endereço de Produção SVC

https://www1.webenefix.com.br/NfseEasyWS/NfseEasyService.svc

3.2 Url Homologação

Endereço Homologação ASMX

http://homolog.e-benefix.com.br/NfseEasyWs/NfseEasyService.asmx

Endereço de Homologação SVC

http://homolog.e-benefix.com.br/NfseEasyWs/NfseEasyService.svc

WSDL

O WSDL é uma notação XML para descrever um serviço da web. Uma definição WSDL descreve o serviço, especifica como acessá-lo e quais as operações ou métodos disponíveis são suportados. O WSDL 1.2 foi renomeada para 2.0 e aceita todos os métodos de requisição HTTP (não apenas GET e POST).

Para acessar o WSDL dos seriços disponíveis, adione "?wsdl" ao final da URL. O serviço WCF (.svc) também permite acessar um arquivo único adicionando "?singleWsdl" ao final da URL.

ASP.NET (.asmx)
WCF (.svc)

3.4 Schema XSD

Os métodos retornam os dados em formato XML, clique aqui para realizar o download do schema xsd.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ws="http://www.e-benefix.com.br" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="RetNfseEasyWs">
<xs:annotation>
<xs:documentation>Schema XML de retorno dos WS</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="WebService">
<xs:complexType>
<xs:sequence>
<xs:element name="Codigo" type="xs:string"/>
<xs:element name="Descricao" type="xs:string"/>
<xs:element name="Detalhe" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:choice>
<xs:element name="Emitente" type="TEmitente" minOccurs="0"/>
<xs:element name="Documento" type="TDocumento" minOccurs="0"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="TDocumento">
<xs:sequence>
<xs:element name="SearchKey" type="xs:string"/>
<xs:element name="XmlDoc" type="xs:string"/>
<xs:choice>
<xs:element name="Consulta" type="TConsulta"/>
<xs:element name="ConsultaStatusCancelamento" type="TConsultaStatusCancelamento"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TConsulta">
<xs:sequence>
<xs:element name="SituacaoLote" type="xs:string">
<xs:annotation>
<xs:documentation>1 Nao Recebido (nao enviado) 2 Nao Processado 3 Processado com Erro 4 Processado com Sucesso 9 Descartado (ocorre apos varias tentativas de envio fracassadas)</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TentativasEnvio" type="xs:string"/>
<xs:element name="TentativasConsulta" type="xs:string"/>
<xs:element name="ListaNfse" type="TListaInfNfse" minOccurs="0"/>
<xs:element name="ListaMensagem" type="TListaMensagem" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TConsultaStatusCancelamento">
<xs:choice>
<xs:element name="NfseCancelada" type="TNfseCancelada" minOccurs="0"/>
<xs:element name="ListaMensagem" type="TListaMensagem" minOccurs="0"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="TEmitente">
<xs:sequence>
<xs:element name="StatusEmitente" type="xs:string"/>
<xs:element name="XmlEmitente" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Xml Codificado Base64</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ValidadoCertificado" type="xs:string" minOccurs="0"/>
<xs:element name="DetalheCertificado" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TNfseCancelada">
<xs:sequence>
<xs:element name="DataCancelamento" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TNfse">
<xs:sequence>
<xs:element name="Numero" type="xs:string"/>
<xs:element name="CodigoVerificacao" type="xs:string"/>
<xs:element name="DataEmissao" type="xs:string"/>
<xs:element name="DataCancelamento" type="xs:string" minOccurs="0"/>
<xs:element name="CodigoCancelamento" type="xs:string" minOccurs="0"/>
<xs:element name="Status" type="xs:string"/>
<xs:element name="LinkPdf" type="xs:string"/>
<xs:element name="IdentificacaoRps" type="TIdentificacaoRps"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TIdentificacaoRps">
<xs:sequence>
<xs:element name="Numero" type="xs:string"/>
<xs:element name="Serie" type="xs:string"/>
<xs:element name="Tipo" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TListaMensagem">
<xs:sequence>
<xs:element name="Mensagem" type="TMensagem" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TListaInfNfse">
<xs:sequence>
<xs:element name="Nfse" type="TNfse" maxOccurs="50"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TMensagem">
<xs:sequence>
<xs:element name="Codigo" type="xs:string"/>
<xs:element name="Mensagem" type="xs:string"/>
<xs:element name="Correcao" type="xs:string"/>
<xs:element name="IdentificacaoRps" type="TIdentificacaoRps" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Codigo">
<xs:simpleType>
<xs:restriction base="xs:hexBinary">
<xs:enumeration value="C1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Correcao">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
<xs:complexType name="TListaMensagemRetorno">
<xs:sequence>
<xs:element name="MensagemRetorno" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="Codigo"/>
<xs:element ref="Mensagem"/>
<xs:element ref="Correcao"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="Mensagem">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
</xs:schema>

4. Retorno da chamada do Web Service

O Web Service sempre retornará uma estrutura com o elemento raiz <RetNfseEasyWs>. O Modelo padrão de retorno da chamada com os elementos básicos em formato resumido é apresentado abaixo e será discutido nas próximas seções.

Elemento raiz <RetNfseEasyWs>

O Web Service sempre retornará uma estrutura RetNfseEasyWs com o elemento filho WebService e, dependendo da operação com Emitente ou Documento Rps, o elemento filho Emitente ou Documento.

A estrutura de qualquer chamado disponível, SEMPRE terá o seguinte formato.

4.1 Detalhes do Elemento <WebService>

O retorno do chamada do serviço sempre terá uma a estrutura WebService.

Se executar a operação e não houver erros na chamada, retornará "Sucesso", mesmo que um documento processado seja rejeitado ou, a atualização de um emitente não possa ser executada. Esta estrutura é relacionada a chamada do WebService e não ao processamento de documentos ou dados de emitentes.

Resposta de uma operação com sucesso!

Note que uma resposta de SUCESSO significa que o WS respondeu a operação e processou corretamente, retornado o código, descrição e detalhe~, mesmo que tenha uma solicitação de importação ou cancelamento que possam ter alguma rejeição.

  • Código:Códigos da operação do processamento do Web Service NFS-e Easy, não tem relação com o Município.
  • Descrição:Em uma chamada de Web Service, além do código, segue a descrição da ação, facilitando o entendimento.
  • Detalhe:Quando ocorrer algum problema de comunicação com o Web Service, será informado em mais detalhes os erros.

Abaixo, uma visão com mais detalhes do elemento Emitente e Documento, que serão discutidos nas próximas seções.

4.2 Detalhes do Elemento <Emitente>

A resposta terá um 'Status do Emitente' e quando solicitados os dados em uma consulta, os mesmos serão retornados em um formato XML codificado em Base64, exemplificados na seção 7.2.

O emitente poderá realizar algumas tarefas, como enviar os dados pelo WS para criar o emitente (CNPJ), alterar o status ou até mesmo atualizar os dados cadastrais ou certificado digital.

4.3 Detalhes do Elemento <Documento>

O elemento documento sempre será formado pelos elementos descritos no item Retorno Web Service.

  • SearchKey: Chave de pesquisa formado por um número aleatório + cnpj + num rps
  • XmlDoc: Documento XML retornado pelo Município, pode conter um RPS convertido em NFS-e ou mensagens de erros, retornado em formato Base64
  • ConsultaLote: Elemento que contem estrutura de dados do lote enviado, detalhado na sequência
  • ConsultaRps: Elemento que contem estrutura de dados do rps enviado, detalhado na sequência
  • ConsultaStatusCancelamento: Elemento que contem informação sobre o Status de um Cancelemento solicitado

Um retorno XML com o elemento DOCUMENTO, deverá ter um dos elementos de Consulta presente (lote, rps ou cancelamento).

5. Detalhes do elemento Documento

Será apresentado o detalhamento do elemento da Consulta de um elemento Documento, resumidamente, apresenta a consulta de um Lote (autorizado ou rejeitado) ou da consulta do processamento de uma solicitação de cancelamento. Nas próximas seções, discutiremos cada uma destas respostas de consulta.

5.1 Consulta Documentos

Os elementos TentativaEnvio e TentativaConsulta da imagem abaixo, são configurados no sistema para determinar a quantidade máxima de tentativas de envio e consulta que o sistema poderá realizar automaticamente no Município.

Ao atingir este limite, o sistema modifica a situação do documento, deixando-o em situação de "bloqueio", pois se tiver um erro no Município ou no retorno, a consulta deve em determinado tempo, gerar uma ação de sucesso ou erro de consulta.*

  • SituacaoLote: clique aqui para mais detalhes.
  • TentativasEnvio: Após uma determinada quantidade de tentativas de envio sem sucesso, o lote é automaticamente descartado. O número de tentativas de envio permite identificar que o sistema está em funcionamento e tentando concluir a operação, pois o Município ou Link Internet podem estar com problemas.
  • TentativasConsulta: Após uma determinada quantidade de tentativas de consulta sem sucesso, o lote é automaticamente descartado. O número de tentativas de consulta permite identificar que o sistema está em funcionamento e tentando concluir a operação, pois o Município ou Link Internet podem estar com problemas.
  • ListaNfse: Lista de documentos NFse, consultar Manual de Integração Abrasf, segue mesmo modelo de retorno.
  • ListaMensagem: Lista de Erros ou Alertas, consultar Manual de Integração Abrasf, segue mesmo modelo de retorno. Ou quando ocorrer algum problema de comunicação com o Município, será informado em mais detalhes os erros da transação, com: Código, Mensagem e Correção

5.1.1 Lista Nfse

Os campos ListaNfse descrevem os dados das NFS-e geradas, caso tenha enviado um Lote com um RPS, terá uma lista com uma única NFS-e.

  • Numero:número da nfse gerada pelo Município

  • CodigoVerificacao:código de verificação da nfse quando existir

  • DataEmissao:data de emissão da nfse

  • DataCancelamento:data de cancelamento se existir

  • CodigoCancelamento:mesmo código fornecido na chamada do cancelamento e que identifica o motivo do cancelamento

  • Statusstatus da nfse

  • IdentificacaoRpsidentifica os dados do RPS que gerou a NFS-e, composto por "Numero", "Serie" e "Tipo"

  • LinkPdf:Quando o Município fornecer um Link, este será retornado dentro da ListaNfse.

    Observe que o retorno é XML, logo, se o Município utiliza caracteres especiais, este será Codificado em Html, logo, deverá ser tratado para poder utilizar.

    HtmlEncoded no LinkPdf

    DE:        http://nfps-e.pmf.sc.gov.br/consulta-frontend/#!/consulta?cod=3C7CD91EAD20406D&amp;cmc=1234567

    PARA:  http://nfps-e.pmf.sc.gov.br/consulta-frontend/#!/consulta?cod=3C7CD91EAD20406D&cmc=1234567

    Note que o parâmetro & está codificado como &amp;

5.1.2 Lista Mensagem

Campos ListaMensagem geralmente informam um condição de erro de um ou mais dados do RPS

  • Codigo:código de erro gerado pelo Município

  • Mensagem:descrição do erro gerado pelo Município, quando existir

  • Correcaoquando existir, orienta na correção do erro

  • IdentificacaoRpsopcional, se existir, identifica os dados do RPS que gerou os erros, composto por "Numero", "Serie" e "Tipo"

Detalhes dos Campos ListaNfse e ListaMensagem

5.2 Consulta Cancelamento

A ConsultaCancelamento SOMENTE retorna dados da NFS-e, nunca de um lote pela Searchkey, pois podem haver várias Nfse pertence ao elemento Documento.

Possui informações sobre a Situação do Cancelamento de uma NFSe se existir ou ListaMensagemRetorno retornados pelo Município.

Retornará dados da Nfse Cancelada, se existir.

Erros ou Alertas serão retornados na ListaMensagem que contém uma ou mais mensagens no campo Mensagem.

Nota

O XML do retorno do Cancelamento ou da ListaMensagemRetorno do Cancelamento estará codificada em Base64 dentro do Elemento DOCUMENTO na Tag <XmlDoc>

6. Códigos e Status Retornados

Esta seção descreve os CÓDIGOS e STATUS retornados no elemento Documento e no elemento WebService relacionados ao estado de processamento destes.

Códigos Retorno WS

Nesta seção, serão apresentados os códigos retornados pelo elemento RetNfseEasyWs/WebService/Codigo (fig.1), códigos no elemento RetNfseEasyWs/Consulta/SituacaoLote (fig.2), e na sequência do resumo do status da NFS-e no elemento RetNfseEasyWs/Consulta/ListaNfse/Nfse/Status (fig.3), descritos nos tópicos na sequência.

Todos os códigos retornados nas consultas do Web Service estão inseridos nos retornos das consultas do Web Service em formato XML, descrito no arquivo de XML Schema Definition

Realize o download dos schemas NfseEasyWS_V5.xsd e leiauteRetNfse.xsd

6.1 Código da Situação do Lote

Elemento Situacao do LOTE na tag <RetNfseEasyWs/Documento/Consulta/SituacaoLote>. O Código da Situação reflete o status do processamento do Lote a ser encaminhado ao Município, em processamento ou já processado pelo mesmo, os detalhes da estrutura foram apresentadas na seção 5.1.

1 Não Recebido (Não Enviado)
2 Não Processado
3 Processado com Erro
4 Processado com Sucesso
5 Aguardando Processamento (Documento sem retorno da prefeitura no envio, será feita tentativa de consulta pelo RPS)
9 Descartado (ocorre após várias tentativas de envio fracassadas)

Códigos 1, 2, 3 e 4 são mantidos iguais aos Status da Abrasf, facilitando o entendimento.

Nota

Observe o exemplo abaixo, note que este retorno possui uma tag NFS-e <Nfse> .... <Nfse>, este é o retorno padrão sempre que o documento for processado com sucesso.

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Note que o WS processou corretamente a solicitação -->
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000493674195316060396150001080002007</SearchKey>
<XmlDoc>PEVudmlhckxvd[...XML EM BASE 64...]XNwb3N0YT4=</XmlDoc>
<Consulta>
<SituacaoLote>4</SituacaoLote>
<TentativasEnvio>1</TentativasEnvio>
<TentativasConsulta>0</TentativasConsulta>
<ListaNfse>
<Nfse>
<Numero>201800000000228</Numero>
<CodigoVerificacao>Q7AT3XDA</CodigoVerificacao>
<DataEmissao>2018-10-16T13:43:03</DataEmissao>
<Status>1</Status>
<LinkPdf>https://nfse.niteroi.rj.gov.br/nfse/nfse.aspx?ccm=1218155&amp;nf=201800000000228&amp;cod=Q7AT3XDA</LinkPdf>
<IdentificacaoRps>
<Numero>2007</Numero>
<Serie>X</Serie>
<Tipo>Rps</Tipo>
</IdentificacaoRps>
</Nfse>
</ListaNfse>
</Consulta>
</Documento>
</RetNfseEasyWs>

6.2 Código de Status da NFS-e

Este elemento se refere ao STATUS da nota quando o documento estiver aprovado, pois ele é inserido no elemento Status do XML em <Nfse>.

0 Status NFS-e inválida
1 NFS-e normal
2 NFS-e cancelada
3 NFS-e extraviada

Nota

Note que o Status da NFS-e vai estar presente tanto nas chamadas do Ws.ConsultaLote como nas chamadas Ws.ConsulteRps.

Exemplo: Nfse/Status 1 de uma resposta de Consulta de Lote

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000613036600000060396150001080000036</SearchKey>
<XmlDoc>PENvbXBOZnNlPg0K...[XML em BASE64]...Db21wTmZzZT4=</XmlDoc>
<Consulta>
<SituacaoLote>4</SituacaoLote>
<ListaNfse>
<Nfse>
<Numero>201400000000022</Numero>
<CodigoVerificacao>K2C9-TKKH</CodigoVerificacao>
<DataEmissao>04/08/2014 19:02:49</DataEmissao>
<Status>1</Status>
</Nfse>
</ListaNfse>
</Consulta>
</Documento>
</RetNfseEasyWs>

6.3 Códigos de processamento do Serviço Web

Os códigos apresentados nesta seção, são os códigos utilizados pelo Serviço Web NFS-e Easy®, estarão sempre dentro do elemento <RetNfseEasyWs>/<WebService>. Referem-se ao status do processamento do método. Ver detalhes do elemento <WebService> em 4.1

É importante compreender que estes códigos não são os códigos de erro ou alerta retornados do serviço do município na tag <Mensagem>.

0 Operação realizada com sucesso
1 Usuário e senha inválidos
2 CNPJ não encontrado na base de dados
3 Município não encontrado na base de dados da aplicação dos Web Services. Confirme o CódigoIbge ou acione o suporte
4 Certificado digital emitente inválido. Atualize o mesmo
5 Lote TXT está em formato inválido
6 XML dos dados do emitente inválido
7 Falha de validação em algum dos campo dos dados do emitente. Favor corrigir
8 Já existe um emitente com este CNPJ cadastrado
9 Status emitente inválido. Ativado = 1, Suspenso = 2, Desativado = 3
10 Emitente bloqueado, nenhuma operação autorizada
11 Emitente suspenso, somente operações de consulta autorizadas
12 NFS-e não encontrada por chave de busca
13 Lote XML está em formato inválido
14 Lote não encontrado por chave de busca
15 NFS-e já se encontra cancelada
16 Usuário não possui autorização para o CNPJ e não é Administrador
17 Erro inesperado, verifique o log
18 NFS-e não está cancelada
19 Certificado não possui a cadeia completa, exporte com toda a cadeia para processar corretamente
20 Certificado Vencido, atualize seu certificado antes de emitir NFS-e
21 Certificado Nulo ou inexistente - falha de conversão PFX - Tipo X509
22 Emitente bloqueado para alteração, não é possível atualizar os dados
23 Parâmetro CNPJ não informado
24 Erro nos dados do TXT
25 Erro ao criar licença da empresa
26 Erro na chamada do Webservice
27 Número inicial não é um inteiro
28 Número final não é um inteiro
29 Número inicial é maior que o número final
30 Ano não é um inteiro
31 Série não é um inteiro
32 Justificativa está em branco
33 Emitente não encontrado
34 Erro ao inutilizar notas
35 Município não possui inutilização de notas
36 Nenhum evento localizado. Tente mais tarde novamente
37 Erro ao acessar a rede com um protocolo conectável ou Serviço Município não disponível
38 Usuário EXCLUSIVO para testes ambiente Homologacao, bloqueado para qualquer alteração, não é possível atualizar os dados
39 Falha na carga do certificado, verifique se é um certificado válido com chave privada (*.pfx) e em formado Base64.
40 Falha na carga do certificado, recebido certificado sem a chave privada. Ao exportar, selecione exportar Chave Privada. Não envie arquivo .crt ou .cer (chave pública), usar somente .pfx (chave privada) em Base64.
41 Usuário não encontrado.
42 A chave de pesquisa (SearchKey) não pertence ao Cnpj informado.
43 Erro nos parametros informados na chamada do Webservice.
44 NFS-e não está cancelada. Pode ter ocorrido uma falha na solicitação do Cancelamento, verifique no portal do Município.
45 O processamento da requisição está em andamento, aguarde alguns instantes e tente novamente.

Observe o exemplo de dois retornos, um de sucesso e outro com um código de erro, a tag Codigo dentro da tag WebService

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
</RetNfseEasyWs>

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>12</Codigo>
<Descricao>NFS-e não encontrada por chave de busca</Descricao>
</WebService>
</RetNfseEasyWs>

7. Métodos Web Services

Os métodos disponíveis podem ser consultados nas URL's informadas na seção 3, publicadas no (.asmx) ou (.svc) e a descrição bem como

Para utilização dos Web Services, insira os dados do PRESTADOR (adicionar emitente) e use seu login e senha.

Caso não tenha em mãos, existe um cadastro da BENEFIX com certificado já instalado, bastando usar LOGIN "nfse" e SENHA "benefix"

7.1 - Método Echo

Método para testar comunicação com Web Service.

Assinatura

string Echo(string mensagem, string usuario, string senha);

Exemplo da Chamada

Echo("Teste de Echo", "nfse", "benefix");

Exemplo de Retorno
<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
</RetNfseEasyWs>

7.2 - Método GerenciarEmitente

Este serviço permite cadastrar, atualizar e consultar os dados de um emitente. Vejamos a estrutura de comunicação do serviço.

Assinatura

string GerenciarEmitente(string xmlDadosEmitente, string usuario, string senha)

Exemplo da Chamada

GerenciarEmitente("<?xml version='1.0' encoding='utf-8'?><DadosEmitente>....</DadosEmitente>","nfse","benefix")

Estrutura de Dados

Clique aqui para fazer o download do schema XSD (XML Schema Definition).

<?xml version="1.0" encoding="utf-8"?>
<DadosEmitente>
<Cnpj>06039615000108</Cnpj>
<CnpjParceiro>94387191000130</CnpjParceiro>
<RetornarDadosEmitente>true</RetornarDadosEmitente>
<RazaoSocial>BENEFIX SISTEMAS E GESTÃO DE NEGÓCIOS LTDA</RazaoSocial>
<InscricaoMunicipal>1218155</InscricaoMunicipal>
<!-- DEPRECATED -->
<ItemListaServico>0101</ItemListaServico>
<!-- DEPRECATED -->
<CodigoTributacaoMunicipio>010100</CodigoTributacaoMunicipio>
<Email>contato@e-benefix.com.br</Email>
<Telefone>2126215063</Telefone>
<Certificado>MIIG0QIBAzCCBp...[Certificado PFX (Tipo A1) em BASE64]...rUlYf7pBZL8CAggA</Certificado>
<SenhaCert>demo</SenhaCert>
<CodigoIbgeMunicipio>3303302</CodigoIbgeMunicipio>
<StatusEmitente>Ativado</StatusEmitente>
<Logo>iVBORw0K...[Imagem PNG em BASE64 - preferencialmente 96px e tamanho menor 20KB]...AASUVORK5CYII</Logo>
<LoginWs>LoginMunicipioSeHouver</LoginWs>
<SenhaWs>SenhaMunicipioSeHouver</SenhaWs>
<CodigoContribuinteWs>CodigoOuTokenMunicipioSeHouver</CodigoContribuinteWs>
<!-- SistemaNacional -> S (Sim) | N (Não) -->
<SistemaNacional>N</SistemaNacional>
</DadosEmitente>

Nota

O certificado digital e logotipo quando informados, deverão estar em formato Base64.

7.2.1 Cadastrar Emitente

Para cadastrar um novo emitente, existem alguns dados que são obrigatórios, observe a lista abaixo.

  • Cnpj
  • Cnpj do Parceiro
  • Razão Social
  • InscricaoMunicipal
  • Código Ibge do Municipio
<?xml version="1.0" encoding="utf-8"?>
<DadosEmitente>
<Cnpj>06039615000108</Cnpj>
<CnpjParceiro>72385108000150</CnpjParceiro>
<RazaoSocial>BENEFIX SISTEMAS E GESTÃO DE NEGÓCIOS LTDA</RazaoSocial>
<InscricaoMunicipal>1218155</InscricaoMunicipal>
<CodigoIbgeMunicipio>3303302</CodigoIbgeMunicipio>
</DadosEmitente>

Clique aqui para mais informações sobre estrutura de dados e utilização do serviço.

7.2.2 Atualização Cadastral do Emitente

A atualização das informações do emitente é realizada através do método GerenciarEmitente(...), permite atualizar qualquer informação do emitente, exceto o CNPJ.

Indique o emitente a ser atualizado, através do campo <Cnpj>, e indique o campo que será atualizado.

O exemplo a seguir realiza a atualização do endereço de e-mail do emitente:

Os dados a serem enviados

<?xml version="1.0" encoding="utf-8"?>
<DadosEmitente>
<Cnpj>06039615000108</Cnpj>
<Email>contato@e-benefix.com.br</Email>
</DadosEmitente>

O exemplo a seguir realiza a atualização do status do emitente, definindo-o como bloqueado:

Os dados a serem enviados

<?xml version="1.0" encoding="utf-8"?>
<DadosEmitente>
<Cnpj>06039615000108</Cnpj>
<StatusEmitente>Bloqueado</StatusEmitente>
</DadosEmitente>

Nota

Os campos telefone e e-mail não são obrigatórios, no entanto quando informados, deverão estar em formato válido.

LOGOTIPO: preferencialmente 96px e tamanho menor que 20KB (Imagem PNG em BASE64)

A tag <RetornarDadosEmitente> é utilizado para solicitar ao serviço os dados do emitente, os valores permitidos são true ou false, quando a tag não for informada, por definição será false. Os dados do emitente serão retornados em formato base64.

Clique aqui para mais informações sobre estrutura de dados e utilização do serviço.

Códigos de status Emitente
Ativado ou 1 Emitente habilitado para emissão/cancelamento.
Suspenso ou 2 Emitente habilitado somente para consultas.
Bloqueado ou 3 Emitente bloqueado para qualquer operação.

Exemplo retorno com erro de validação

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<WebService>
<Codigo>7</Codigo>
<Descricao>Falha de validação em algum dos campo dos dados do emitente. Favor corrigir.</Descricao>
<Detalhe>Municipio nao encontrado</Detalhe>
</WebService>
</RetNfseEasyWs>

Exemplo retorno sucesso

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso.</Descricao>
</WebService>
<Emitente>
<StatusEmitente>1</StatusEmitente>
<XmlEmitente>PD94bWwgdmVyc2lvbj0iMS4wI ... lV3M+DQo8L0RhZG9zRW1pdGVudGU+</XmlEmitente>
<DetalheCertificado>CN=BENEFIX SISTEMAS E GESTAO DE NEGOCIOS LTDA:06039615000108, OU=presencial, OU=34038808000180, OU=RFB e-CNPJ A1, OU=Secretaria da Receita Federal do Brasil - RFB, L=NITEROI, S=PR, O=ICP-Brasil, C=BR</DetalheCertificado>
<ValidadeCertificado>12/07/2022 14:50:16</ValidadeCertificado>
</Emitente>
</RetNfseEasyWs>

Nota

Caso o certificado não esteja cadastrado, não retornará a tag <ValidadeCertificado>, já a tag <DetalheCertificado> retornará a mensagem "O Certificado não é válido". Observe o exemplo abaixo.

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso.</Descricao>
</WebService>
<Emitente>
<StatusEmitente>1</StatusEmitente>
<XmlEmitente>PD94bWwgdmVyc2lvbj0iMS4wI ... lV3M+DQo8L0RhZG9zRW1pdGVudGU+</XmlEmitente>
<DetalheCertificado>O Certificado não é válido</DetalheCertificado>
</Emitente>
</RetNfseEasyWs>

7.2.3 Consultar Emitente

A consulta dos dados do emitente também é realizada através do método Emitente, utiliza-se o cnpj como identificador e a tag <RetornarDadosEmitente> com valor true, exemplo: <RetornarDadosEmitente>true</RetornarDadosEmitente>

O formato da resposta do serviço é padrão, observe abaixo que os dados do emitente está sendo retornado em formato base64 na tag <XmlEmitente>.

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso.</Descricao>
</WebService>
<Emitente>
<StatusEmitente>1</StatusEmitente>
<XmlEmitente>PD94bWwgdmVyc2lvbj0iMS4wI ... lV3M+DQo8L0RhZG9zRW1pdGVudGU+</XmlEmitente>
<DetalheCertificado>CN=BENEFIX SISTEMAS E GESTAO DE NEGOCIOS LTDA:06039615000108, OU=presencial, OU=34038808000180, OU=RFB e-CNPJ A1, OU=Secretaria da Receita Federal do Brasil - RFB, L=NITEROI, S=PR, O=ICP-Brasil, C=BR</DetalheCertificado>
<ValidadeCertificado>12/07/2022 14:50:16</ValidadeCertificado>
</Emitente>
</RetNfseEasyWs>

Clique aqui para ver a assinatura do método de consulta

7.3 Importar Lote RPS

O método SolicitarImportacaoLoteRps recebe a chamada para importar de um lote de RPS a partir do TXT enviado ou JSON quando disponibilizado. O sistema da Benefix® realiza a conversão do TXT em XML e envia para o serviço do Município.

Nota

Recomenda-se que use um RPS por LOTE, pois se um RPS for rejeitado, todo o LOTE será rejeitado. Para evitar transtornos, execute sempre 1 LOTE com 1 RPS. Em Municípios com tempo de processamento muito alto, envio de vários RPS em um Lote é recomendado, mesmo com o risco de rejeitar os documentos por um erro em um RPS.

Assinatura

string SolicitarImportacaoLoteRps(string cnpj, string conteudoLoteTxt, string usuario, string senha);

Exemplo ConteudoLoteTXT
GN01|Lote2007|2007|06039615000108|1218155|1|
GN10|Rps2007|2007|X|1|2018-10-16T09:01:02|1||
GN20|2018-10-16||2|2|
GN21|2||0101|6201501|0101|3303302|1058|
GN22|01|3303302||||
GN30|MANUTENÇÃO DO SOFTWARE NF-E SECURITY|
GN40|1066.20|0.00|6.93|31.99|0.00|15.99|10.66|0.00|
GN41|21.32|2.00|0.00|0.00|0.00|1066.20|1000.63|
GN60|06039615000108|1218155|Empresa de Teste Ltda.|Empresa de Teste||
GN61|Rua da Conceição|95||Centro|
GN62|3303302|Niterói|RJ|24020085|
GN63||||||
GN64|3303302|Niterói|1058|RJ|
GN70|64039416000104||Razao Tomador|Fantasia Tomador||||
GN71||Rua Padre Anchienta|2454|Conj. 603||Bigorrilho|
GN72|4106902|Curitiba|PR|80730000|||
Exemplo Retorno
<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000493674195316060396150001080002007</SearchKey>
</Documento>
</RetNfseEasyWs>

7.4 Consultar (Lote RPS)

Consulta documentos pela chave ou chave e número de RPS

Nota

A partir de Julho de 2018 o método de consulta retorna o elemento "LinkPdf" para cada RPS/NFS-e. Este elemento contém o link do PDF da prefeitura, quando existe, ou o endereço com um PDF padrão da Benefix®.

Assinatura

string Consultar(string cnpj, string searchKey, long? numRps, string usuario, string senha);

Note que o número do RPS é opcional, ao consultar somente pela chave (sem informar o parâmetro numRps) o retorno é do lote e todos os seus RPS's. Caso o parâmetro numRps também seja preenchido, o retorno é do lote com somente o Rps solicitado.

7.4.1 Exemplo de Consulta de Lote com apenas um RPS

Exemplo do retorno de uma CONSULTA de um Lote com um RPS importado e autorizado

Chave: 000493674195316060396150001080002007
RPS: 2007
Série: 'X'
Tipo: 'RPS'

Exemplo da consulta em C#

var client = new wsNfseEasyService.NfseEasyService();
// Consulta um LOTE que pode ter um ou mais RPS, neste caso, somente um RPS
string resultado = client.Consultar(“06039615000108”,“000493674195316060396150001080002007",null,“nfse”,“benefix”);

Exemplo do retorno do serviço

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Note que o WS processou corretamente a solicitação -->
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000493674195316060396150001080002007</SearchKey>
<XmlDoc>PEVudmlhckxvd[...XML EM BASE 64...]XNwb3N0YT4=</XmlDoc>
<Consulta>
<SituacaoLote>4</SituacaoLote>
<TentativasEnvio>1</TentativasEnvio>
<TentativasConsulta>0</TentativasConsulta>
<ListaNfse>
<Nfse>
<Numero>201800000000228</Numero>
<CodigoVerificacao>Q7AT3XDA</CodigoVerificacao>
<DataEmissao>2018-10-16T13:43:03</DataEmissao>
<Status>1</Status>
<LinkPdf>https://nfse.niteroi.rj.gov.br/nfse/nfse.aspx?ccm=1218155&amp;nf=201800000000228&amp;cod=Q7AT3XDA</LinkPdf>
<IdentificacaoRps>
<Numero>2007</Numero>
<Serie>X</Serie>
<Tipo>Rps</Tipo>
</IdentificacaoRps>
</Nfse>
</ListaNfse>
</Consulta>
</Documento>
</RetNfseEasyWs>

7.4.2 Exemplo de Consulta de Lote com mais de um RPS

Exemplo do retorno de uma CONSULTA de um Lote com mais de um RPS

Chave: 000493674195316060396150001080002008
RPS: 2008
Série: 'X'
Tipo: 'RPS'
RPS: 2009
Série: 'X'
Tipo: 'RPS'

Exemplo da consulta em C#

var client = new wsNfseEasyService.NfseEasyService();
// Consulta um LOTE que pode ter um ou mais RPS, neste caso, somente um RPS
string resultado = client.Consultar(“06039615000108”,“000493674195316060396150001080002008",null,“nfse”,“benefix”);

Exemplo do retorno do serviço

Retorno da Consulta: Situação do Lote = 1, 'Não Recebido (Não Enviado)'

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000493674195316060396150001080002008</SearchKey>
<Consulta>
<SituacaoLote>1</SituacaoLote>
<TentativasEnvio>0</TentativasEnvio>
<TentativasConsulta>0</TentativasConsulta>
</Consulta>
</Documento>
</RetNfseEasyWs>

Exemplo do retorno do serviço

Retorno da Consulta: Situação do Lote = 4, 'Processada com Sucesso' (autorizada)

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Note que o WS processou corretamente a solicitação -->
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000555755110717060396150001080002008</SearchKey>
<XmlDoc>PENvbnN1bH[...XML EM BASE 64...]GVScHNSZXNwb3N0YT4=</XmlDoc>
<Consulta>
<SituacaoLote>4</SituacaoLote>
<TentativasEnvio>1</TentativasEnvio>
<TentativasConsulta>1</TentativasConsulta>
<ListaNfse>
<Nfse>
<Numero>201800000000229</Numero>
<CodigoVerificacao>M8EAAAVQ</CodigoVerificacao>
<DataEmissao>2018-10-16T15:27:03</DataEmissao>
<Status>1</Status>
<LinkPdf>https://nfse.niteroi.rj.gov.br/nfse/nfse.aspx?ccm=1218155&amp;nf=201800000000229&amp;cod=M8EAAAVQ</LinkPdf>
<IdentificacaoRps>
<Numero>2008</Numero>
<Serie>X</Serie>
<Tipo>Rps</Tipo>
</IdentificacaoRps>
</Nfse>
<Nfse>
<Numero>201800000000230</Numero>
<CodigoVerificacao>E4RM7TVA</CodigoVerificacao>
<DataEmissao>2018-10-16T15:27:03</DataEmissao>
<Status>1</Status>
<LinkPdf>https://nfse.niteroi.rj.gov.br/nfse/nfse.aspx?ccm=1218155&amp;nf=201800000000230&amp;cod=E4RM7TVA</LinkPdf>
<IdentificacaoRps>
<Numero>2009</Numero>
<Serie>X</Serie>
<Tipo>Rps</Tipo>
</IdentificacaoRps>
</Nfse>
</ListaNfse>
</Consulta>
</Documento>
</RetNfseEasyWs>

7.4.3 Consulta de Lote de um RPS específico, o RPS 2009.

Chave: 000493674195316060396150001080002008
RPS: 2008
Série: 'X'
Tipo: 'RPS'
RPS: 2009
Série: 'X'
Tipo: 'RPS'

Consulta em C#

No exemplo abaixo, é informado o número do RPS 2009 no parâmetro numRps, para localizar o RPS específico.

var client = new wsNfseEasyService.NfseEasyService();
// Consulta um LOTE que pode ter um ou mais RPS, neste caso, somente um RPS
string resultado = client.Consultar(“06039615000108”,“000493674195316060396150001080002007", 2009,“nfse”,“benefix”);

Retorno da Consulta

Situação do Lote = 4, 'Processada com Sucesso' (autorizada)

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Note que o WS processou corretamente a solicitação -->
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000555755110717060396150001080002008</SearchKey>
<XmlDoc>PENvbnN1bH[...XML EM BASE 64...]GVScHNSZXNwb3N0YT4=</XmlDoc>
<Consulta>
<SituacaoLote>4</SituacaoLote>
<TentativasEnvio>1</TentativasEnvio>
<TentativasConsulta>1</TentativasConsulta>
<ListaNfse>
<Nfse>
<Numero>201800000000230</Numero>
<CodigoVerificacao>E4RM7TVA</CodigoVerificacao>
<DataEmissao>2018-10-16T15:27:03</DataEmissao>
<Status>1</Status>
<LinkPdf>https://nfse.niteroi.rj.gov.br/nfse/nfse.aspx?ccm=1218155&amp;nf=201800000000230&amp;cod=E4RM7TVA</LinkPdf>
<IdentificacaoRps>
<Numero>2009</Numero>
<Serie>X</Serie>
<Tipo>Rps</Tipo>
</IdentificacaoRps>
</Nfse>
</ListaNfse>
</Consulta>
</Documento>
</RetNfseEasyWs>

Exemplo de Retorno Consulta com ERRO

Caso em uma consulta ocorra algum erro no RPS, será informado nos elementos dentro de 'ListaMensagem', os detalhes do erro.

<?xml version="1.0" encoding="UTF-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Note que o WS processou corretamente a solicitação -->
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000585609030110060396150001080002008</SearchKey>
<!-- Xml codificado em Base64 com os erros informados, xml retornado pelo Município -->
<XmlDoc>PENvbnN1bHRh...[Xml Base64 retornado Município]...90ZVJwc1Jlc3Bvc3RhPg==</XmlDoc>
<Consulta>
<SituacaoLote>3</SituacaoLote>
<TentativasEnvio>1</TentativasEnvio>
<TentativasConsulta>0</TentativasConsulta>
<ListaMensagem>
<Mensagem>
<Codigo>L979</Codigo>
<Mensagem>O número do lote do contribuinte informado já existe.</Mensagem>
<Correcao>Lote do contribuinte: 2008, Protocolo: 00000000000000000000000000000000000000000000370612o</Correcao>
</Mensagem>
</ListaMensagem>
</Consulta>
</Documento>
</RetNfseEasyWs>

Nota

O elemento <XmlDoc> contém os dados retornados pelo Município, o mesmo é codificado em Base64. Neste exemplo, decodificando o XML obtém-se o XML original do Municipio com o erro reportado

<?xml version="1.0" encoding="utf-8"?>
<EnviarLoteRpsResposta xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.abrasf.org.br/nfse.xsd">
<ListaMensagemRetorno>
<MensagemRetorno>
<Codigo>L979</Codigo>
<Mensagem>O número do lote do contribuinte informado já existe.</Mensagem>
<Correcao>Lote do contribuinte: 2008, Protocolo: 00000000000000000000000000000000000000000000370612.</Correcao>
</MensagemRetorno>
</ListaMensagemRetorno>
</EnviarLoteRpsResposta>

7.5 Solicitar Cancelamento de NFS-e

O Método SolicitarCancelamentoNfseGenerico() utilizado para realizar o cancelamento de uma NFS-e, é concluído em duas etapas, SOLICITAÇÃO (Um Pedido de Cancelamento) e CONSULTA RESPOSTA CANCELAMENTO (Consulta se o cancelamento foi aprovado pelo município)

Nota

Este serviço é ASSÍNCRONO, ele insere o pedido do Cancelamento na fila de processamento, neste momento, ainda NÃO está cancelada. Será necessário realizar uma consulta do status deste processamento para receber o resultado se autorizado ou rejeitado

7.5.1 SolicitarCancelamentoNfseGenerico (Pedido Cancelamento)

Assinatura

string SolicitarCancelamentoNfseGenerico(string cnpj, long numeroNfse, string codigoMotivoCancelamento, string usuario, string senha);

Códigos de Cancelamento
1 Erro na emissão
2 Serviço Não Prestado
3 Erro de Assinatura
4 Duplicidade da Nota
5 Erro de Processamento
Exemplo de Retorno
<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operacao realizada com sucesso</Descricao>
<Detalhe>Agendado o pedido de cancelamento em 05/05/2021 14:14:24,
neste momento ainda nao esta cancelada.
Consulte a Resposta do pedido em poucos minutos.
</Detalhe>
</WebService>
</RetNfseEasyWs>

7.5.2 ConsultarStatusCancelamento (Consultar a Resposta do Pedido Cancelamento)

Consulta a resposta da solicitação de um pedido de cancelamento de uma NFS-e

Ao solicitar um pedido de cancelamento, o pedido é inserido em uma fila de processamento pelo "serviço" do sistema NFS-e Easy Web, portanto, o sitema Cliente (ERP) deverá consultar o status do Lote (XML com NFS-e e Cancelamento no envelope), mas se não exisitir o cancelamento por algum motivo, somente consultando o Status poderá saber os motivos da rejeição ou erro de cancelamento.

Assinatura

string ConsultarRespostaCancelamento(string cnpj, long numeroNfse, string usuario, string senha);

Exemplo de Retorno
<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<XmlDoc>PENvbXBOZnNlPg0KICA8...[Base64 XML do CancelarNfseResposta]...zZT4=</XmlDoc>
<ConsultaStatusCancelamento>
<NfseCancelada>
<DataHora>2015-03-21T20:59:47</DataHora>
</NfseCancelada>
</ConsultaStatusCancelamento>
</Documento>
</RetNfseEasyWs>

Clique aqui para pode obter mais informações sobre o modelo de Consulta Cancelamento

8. Códigos de Exemplo

8.1 ECHO em PHP e CSharp

Exemplo de um código usando SOAP em PHP para o método ECHO, usando servidor Apache e módulos wamp, xamp. (Grato Tato Oliveira - SJP/PR).

Exemplo PHP

$cliente = new soapclient('http://www1.webenefix.com.br/NfseEasyWsHomolog/NfseEasyService.asmx?WSDL');
$parametros = array('mensagem' => 'Esta é uma mensagem de teste!',
'usuario' => 'nfse',
'senha' => 'benefix');
$result = $cliente->Echo($parametros);
$xml = new SimpleXMLElement($result->EchoResult);
echo 'Codigo de Retorno: '.$xml->Codigo;

Exemplo CSharp

Adicionado a referência do ws no projeto como "wsNfseService"

var client = new wsNfseEasyService.NfseEasyService();
client.Url = "http://www1.webenefix.com.br/NfseEasyWsHomolog/NfseEasyService.asmx";
string mensagem = "Esta é uma mensagem de teste!";
string ret = client.Echo(mensagem, _em.M_Usuario, _em.M_Senha);

Exemplo do Retorno

<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Codigo>0</Codigo>
<Detalhe>Esta é uma mensagem de teste!</Detalhe>
</RetNfseEasyWs>

8.2 Enviar LoteRps em CSharp

Utilizando o método SolicitarImportacaoLoteRps para encaminhar um RPS via Web Services.

var client = new wsNfseEasyService.NfseEasyService();
client.Url = "http://homolog.e-benefix.com.br/NfseEasyWS/NfseEasyService.asmx";
string resposta = client.SolicitarImportacaoLoteRps(cnpj: "06039615000108",
conteudoLoteTxt: input,
usuario: "nfse",
senha: "benefix");

Nota

As especificações dos nomes de argumentos (ex: cnpj:, conteudoLoteTxt:, usuario: e senha:) não são obrigatório em C#, inserido para deixar mais clara a sintaxe.

--> CNPJ [06039615000108]
--> USUARIO [nfse]
--> SENHA [benefix]
--> CONTEUDO: variável 'input' no código acima.

Exemplo do Campo conteudoLoteTxt
GN01 | Lote5 | 5 | 01000010000159 | 1234567 | 1 |
GN10 | Rps13A1 | 13 | A | 1 | 2014-07-02 | 1 | 1 |
GN20 | | 6 | 1 | 2 |
GN21 | 2 | | 14.09 | | 14.09.02 / 00140902 | 3543402 | |
GN22 | 1 | | | | |
GN30 | Teste de emissao |
GN40 | 100.00 | | | | | | | |
GN41 | 0.00 | 2.79 | | | | 100.00 | 100.00 |
GN60 | 01000010000159 | 1234567 | RazaoSocialPrestador | | |
GN61 | Rua do prestador | 10 | | BairroPrestador | |
GN62 | 3543402 | Ribeirão Preto | SP | 13170000 |
GN63 | 11 | 33333333 | | | |
GN70 | 06039615000108 | 1218155 | BENEFIX SISTEMAS E GESTÃO DE NEGÓCIOS LTDA | | | | |
GN71 | | Rua ca Conceição | 95 | Sala 1204 | | Centro |
GN72 | 3303302 | Niteroi | RJ | 24020085 | | |
GN73 | 041 | 84024570 | | | etoktar@e-benefix.com.br |
Exemplo Resposta
<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000718498440986060396150001080000022</SearchKey>
</Documento>
</RetNfseEasyWs>

8.3 Consulta LoteRps CSharp

Após o envio do Lote, você receberá como resposta uma chave, a SearchKey ex: 000718498440986060396150001080000022

Com a chave retornada (000718498440986060396150001080000022), execute uma consulta de Status do Lote, como o exemplo a seguir:

var client = new wsNfseEasyService.NfseEasyService();
client.Url = "http://homolog.e-benefix.com.br/NfseEasyWS/NfseEasyService.asmx";
resposta = client.ConsultarLoteRps(cnpj: "06039615000108",
searchKey: "000718498440986060396150001080000022",
numLote: null,
usuario: "nfse",
senha: "benefix");
Resposta de um RPS convertido em NFS-e
<?xml version="1.0" encoding="utf-8"?>
<RetNfseEasyWs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<WebService>
<Codigo>0</Codigo>
<Descricao>Operação realizada com sucesso</Descricao>
</WebService>
<Documento>
<SearchKey>000613036600000060396150001080000036</SearchKey>
<XmlDoc>PENvbnN1bHRhckxvdG ...[Codificação Base64]... b3RlUnBzUmVzcG9zdGE+</XmlDoc>
<Consulta>
<SituacaoLote>4</SituacaoLote> <!-- Clique aqui para saber mais sobre a situação do lote RPS.-->
<TentativasEnvio>1</TentativasEnvio>
<TentativasConsulta>0</TentativasConsulta>
<ListaNfse>
<Nfse>
<Numero>201400000000022</Numero>
<CodigoVerificacao>K2C9-TKKH</CodigoVerificacao>
<DataEmissao>04/08/2014 19:02:49</DataEmissao>
<Status>1</Status> <!-- Clique aqui para saber mais sobre o status da NFS-e. -->
<LinkPdf>Link com o PDF>
<IdentificacaoRps>
<Numero>487</Numero>
<Serie>Y</Serie>
<Tipo>Rps</Tipo>
</IdentificacaoRps>
</Nfse>
</ListaNfse>
</Consulta>
</Documento>
</RetNfseEasyWs>