FAQ – WebService da GINFES para NFS-e

FAQ - WebService da GINFES para NFS-eDepois que publiquei o artigo “30 dias com o WebService” no final de 2012, recebi muitos e-mails sobre dúvidas e dificuldades de configuração e acesso ao WebService da GINFES pelo Delphi. Procurei respondê-los na medida do possível, mas observei a oportunidade de elaborar um artigo complementar sobre este assunto com as dúvidas mais comuns.

 

Por onde devo começar o desenvolvimento da aplicação que irá consumir o WebService?
A primeira instrução que recebi foi ler o Manual de Integração da GINFES, disponível no próprio site do WebService. Lá tem a maioria da regra de negócio necessária, desde a tecnologia utilizada na comunicação do WebService até os tipos de dados e tamanhos dos campos que devem compor o XML. É um passo inicial para começar a arquitetar a funcionalidade da aplicação. Mesmo lendo o material, devo confessar que ainda fiquei com algumas dúvidas, mas que foram sanadas posteriormente. Aos poucos, comecei a montar o esqueleto do aplicativo e fazer alguns testes para concatenar os valores com as tags do arquivo XML, mais ou menos nesse sentido:

XML := XML + '<tipos:RazaoSocial>' + 
       Trim(Dataset.FieldByName('RazaoSocial').AsString) +
       '</tipos:RazaoSocial>';

Em seguida, procurei manter contato com o setor financeiro da empresa, principalmente para compreender os valores de impostos e alíquotas que eram exigidos na composição XML. Além disso, fui concebido de criar uma tabela com os códigos dos municípios fornecidos pelo IBGE, já que no XML este código deve ser informado ao invés do nome da cidade.


Quando tento utilizar o WSDL Importer, recebo a mensagem “Empty Document”.
Essa mensagem significa que o conteúdo está vazio, ou seja, o retorno foi nulo. Faça um teste: tente abrir o link do WSDL no navegador. Se você receber a mensagem “A página não foi encontrada” ou “A página não pode ser exibida”, provavelmente há alguma restrição na sua conexão com a Internet que está bloqueando o acesso ao WSDL. Isso normalmente acontece em ambientes corporativos, onde há uma política de controle de acesso a Internet. Eu cheguei à essa conclusão depois que levei o Certificado Digital pra casa e funcionou normalmente no meu computador particular. No outro dia, pedi para o setor de Infraestrutura me conceder acesso total à Internet temporariamente. Na primeira tentativa, a importação funcionou.


Já verifiquei minha conexão com a Internet, mas ainda recebo a mensagem “Empty Document”.

Verifique a instalação da hierarquia das cadeias de certificados disponíveis no site do Certificado Digital (como Serasa ou Certisign). Aqui vale frisar uma observação importante: procure instalar essas cadeias de certificados no repositório de “Autoridades de Certificação Raiz Confiáveis” durante a importação. Outra solução é checar se o Certificado Digital está válido e ativo. No site da Serasa, por exemplo, há um link para testar a assinatura e validade do Certificado Digital.
Além das sugestões acima, pode ser necessário verificar as configurações de segurança e avançadas do Internet Explorer, em especial os ajustes relacionados à verificação e revogação de certificados.


Ao enviar o arquivo XML, recebo a mensagem “E160 – Arquivo fora da estrutura”.

Passei alguns dias trabalhando pra montar a estrutura correta do XML. Eis que aqui lhe deixo algumas dicas:

  • não deixe nenhuma tag do XML em branco (nulo);
  • confira se o tamanho dos valores não está passando o limite informado no Manual de Integração. Por exemplo, suponha que no Manual é informado que a Razão Social deve ter no máximo 60 caracteres. Se você concatenar um valor com 61 caracteres, o XML será rejeitado pelo WebService;
  • as tags do XML são Case Insensitive, ou seja, diferenciam maiúsculas de minúsculas. Eu me lembro que o WebService rejeitava meu arquivo porque eu estava concatenando “<UF>” ao invés de “<Uf>”;
  • todas as tags devem ser fechadas com uma barra, assim como acontece na linguagem HTML.
  • os valores monetários devem ser informados com pontos (.) ao invés de vírgulas (,). Por exemplo: 1498.15;
  • retire os espaços em branco à esquerda e à direita dos valores antes de concatená-los no arquivo XML. No Delphi isso pode ser feito com o comando Trim.
  • utilize o site W3C Markup Validation Service para validar a estrutura do arquivo XML e identificar possíveis falhas nas tags


Como devo proceder para chamar a função de envio do RPS?

Considerando que você adicionou um componente do tipo THTTPRIO no seu formulário, a função deve ser chamada da seguinte forma:

var
  WebService: ServiceGinfesImpl;
begin
  WebService := GetServiceGinfesImpl(True, '', HTTPRIO);
  Resposta   := WebService.RecepcionarLoteRpsV3(Cabecalho, XML);
end;

Observe que além do arquivo XML, você também precisa atribuir um cabeçalho pré-definido pela GINFES. Na aplicação que desenvolvi, utilizei o cabeçalho abaixo:

<ns2:cabecalho versao="3" xmlns:ns2="http://www.ginfes.com.br/cabecalho_v03.xsd">
  <versaoDados>3</versaoDados>
</ns2:cabecalho>

No entanto, eventualmente esse cabeçalho pode ser diferente.
A “Resposta” que citei no código-fonte acima pode ser um componente do tipo TMemo.


Como posso obter o número da NFS-e gerada?
Infelizmente a resposta do envio do XML não traz o número da NFS-e. Isso ocorre porque quando o arquivo é enviado ao WebService, ele entra em uma fila de processamento para ser “transformado” em NFS-e. Portanto, é necessário fazer o envio e logo em seguida realizar uma consulta do lote para obter o número da NFS-e. Inclusive, na época, entramos em contato com a GINFES e sugerimos a possibilidade de enviar e processar o arquivo XML e obter o número em uma mesma solicitação ao WebService, mas nosso pedido foi desconsiderado.
O suporte da GINFES informou que o intervalo entre o envio e processamento do arquivo XML é de aproximadamente 20 segundos. Esse tempo pode variar de acordo com o número de arquivos que estão na fila de processamento. Algumas vezes, principalmente em horários de pico, esse intervalo pode demorar de 5 a 10 minutos.


Ao consultar o lote, recebo a mensagem “E4 – Esse RPS não foi enviado para a nossa base de dados”.

Este erro ocorre justamente pelo motivo do tópico anterior. Se você tentar realizar a consulta de um lote que ainda não foi processado pelo WebService, receberá essa mensagem. Mas atenção: isso não significa que o XML não foi enviado, ok? Ele foi enviado sim, mas permanece em uma fila de processamento para gerar a NFS-e.

 

Pessoal, essas são as dúvidas que normalmente recebo por e-mail sobre este assunto. Espero que os tópicos acima possam ajudar desenvolvedores que estejam iniciando o desenvolvimento de uma aplicação para essa finalidade. Mesmo assim, fui notificado de que a comunidade do AcBR já está desenvolvendo um componente exclusivo para envios de NFS-e. Quando este componente estiver disponível, com certeza vai facilitar bastante.

 

Em caso de mais dúvidas, erros ou dificuldades, deixe um comentário abaixo ou entre em contato por e-mail, ok?
Abraço, pessoal! Até mais!


 

Compartilhe!
Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Pin on PinterestEmail this to someone

22 comentários

  1. Olá André.

    Estou arrancando os cabelos com essa função do Ginfes.
    Quando executo:

    Resposta := WebService.RecepcionarLoteRpsV3(Cabecalho, XML);

    ele me pede para selecionar o certificado. Até aí tudo ok. Em seguida dá o seguinte erro: —————————
    Debugger Exception Notification
    —————————
    Project Project1.exe raised exception class Exception with message ‘Empty document’. Process stopped. Use Step or Run to continue.
    —————————
    OK Help
    —————————

    Quando tento o link pelo IE ele acessa ok. Aliás eu só consegui importar o webservice salvando-o num .xml no IE e em seguida importando no Delphi. Pois se eu for tentar importar direto do Delphi, ele dá o mesmo erro de Empty Document.

    Por favor, me dê uma dica para resolver isso.

    Obrigado.

    Rogério Monteiro.

  2. Olá André, parabéns pelo artigo. Estou começando do zero a desenvolver um programa para gerar e enviar o xml da NFS-e, mas não estou achando qual o WSDL de consumo para teste e produção, para que eu possa utilizar aqui em maceió – AL, você pode me ajudar e se possível mandar alguns exemplos em delphi.

    Se possível, me ajuda.

    Abraços,

    Márcio Antônio.

    1. Olá, Márcio! Obrigado pelo feedback sobre o artigo.
      Márcio, na época, eu desenvolvi o consumidor do WebService enquanto trabalhava em Ribeirão Preto (SP), então não tenho conhecimento dos endereços WSDL de outras cidades. De qualquer forma, vou pesquisar e entro em contato com você caso encontre algo!
      Abraço!

  3. Olá, no momento que chamo a função RecepcionarLoteRpsV3 recebo um erro de o documento xml deve conter um elemento de nível superior.

    Porém estou validando o xml com o xsd, e valida certinho.

    Você poderia me ajudar? e/ou enviar um xml de envio de lote de RPS de exemplo.

    Obrigado.

    1. Olá, Élcio. Infelizmente não consigo apontar o motivo do erro sem uma análise minuciosa do código, mas posso lhe enviar um arquivo XML de exemplo, ok? Talvez com o exemplo seja possível identificar o problema! Abraço!

    1. Olá, Marcos! É a primeira vez que ouço falar neste WebService que você mencionou, portanto, não tenho conhecimentos aprofundados sobre ele.
      Pelo que li no site do WebService, o método “StatusSMSNaoLido” retorna um objeto da classe “StatusSMSNaoLidoResult”. Talvez será necessário instanciar um objeto dessa classe para receber o retorno e, após isso, ler a propriedade “schema” do tipo TXMLData para acessar os dados.

      Abraço!

  4. André,

    Boa noite !

    Ja desenvolvi a rotina de comunicação com outra empresa que presta com a Prefeitura de Belem. Uso java pra comunicação. Agora comecei a fazer a integração com a Prefeitura de Ananindeua. A Empresa é a Ginfes. Você sabe qual o link de teste do web services. Por que o que esta no manual diz “Servidor temporariamente indisponivel, em manutenção, favor aguarda”.

    https://ananindeua.ginfes.com.br/ServiceGinfesImpl?wsdl

    Agradeço qualquer ajuda

    1. Olá, Carlos!
      Eu li seus comentários posteriores e notei que você já conseguiu resolver o problema. Que bom!
      Já faz algum tempo que trabalhei com a GINFES, mas, caso eu encontre um exemplo do arquivo de lotes, lhe envio por e-mail, ok?
      Abraço!

  5. Boa tarde André, sei que já faz um tempo que trabalhou com a NFS-e, mas estamos desenvolvendo um sistema para gerar e transmitir RPS/Lotes em Ribeirão Preto também… Porém estamos com problemas na questão da estrutura do XML.
    Não estamos conseguindo fazer o serviço aceitar nosso xml de forma alguma, apesar de que nenhuma ferramenta de validação schema reclama do xml. O webservice sempre retorna “E160 Arquivo enviado fora da estrutura…”
    Se você puder nos dar uma força seria de grande valia!
    Obrigado!

  6. Boa tarde André, estou tendo o mesmo problema E160 de arquivo enviado fora da estrutura, mesmo ja tendo enviado diversos lotes sem erro algum. Poderia me disponibilizar o arquivo modelo para que possa comparar? Desde já agradeço.

  7. Bom dia André!

    Estou recebendo a mensagem E160. Poderia disponibilizar o arquivo modelo para que eu possa comparar?

    Desde já agradeço.

  8. André, boa tarde, estou iniciando com a NFSe e não tenho E-CNPJ e sim E-CPF, será que consigo comunicar com o webservice ginfes ?
    Voce teria uma unit(DELPHI 7) em que eu possa espelhar para fazer o teste de comunicação, porque se eu não conseguir com o E-CPF; vou até um cliente e vou instalar o DELPHI 7 numa máquina com o E-CNPJ para ver se consigo alguma coisa.
    grato
    Stainle

  9. Boa tarde André.

    Cara, estou com problema na hora de importar a webservice do ginfes no projeto do C#, sempre traz a mesma mensagem:

    There was an error downloading ‘https://homologacao.ginfes.com.br/ServiceGinfesImpl?wsdl/$metadata’.
    The request was aborted: Could not create SSL/TLS secure channel.

    Eu estou precisando desenvolver uma ferramenta que faça o envio de NFs diretamente no Ginfes de Manaus, porém não sei por onde começar, naquele manual deles, nada fica claro, e tentei utilizar XMLs de exemplo para enviar diretamente para o site, porém sem sucesso.
    Pode entrar em contato comigo por email se for melhor para você.
    Só para você entender melhor, eu vou pegar as informações da NF de um sistema e então a partir desses valores, eu pretendo gerar os XMLs das NFs para então fazer o envio em lote para o Ginfes.

    Obrigado desde já.

    Att,

    Jairo

  10. Olá André.

    Me tire uma dúvida… ao enviar o XML pela solução online, ou seja, no próprio site do ginfes (ao invés de utilizar o webservice), eu preciso assinar o XML?

    Testei diversos XML enviando no site do GINFES e todos me retornaram o erro: “Arquivo enviado fora da estrutura do arquivo XML de entrada.”.

    Estou tentando no ginfes da prefeitura de Ribeirão Preto – SP.

    Pode me ajudar?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Preencha o campo abaixo * Time limit is exhausted. Please reload CAPTCHA.