Ir para conteúdo
  • Cadastre-se

dev botao

NFSeX - Provedor Infisc - Caxias do Sul/RS


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

Recommended Posts

  • Membros Pro
Postado

Boa tarde,

Estou testando a geração e envio de NFS-e utilizando o componente NFSeX para a prefeitura de Caxias do Sul/RS, que utiliza o provedor Infisc.

Precisei realizar um ajuste no arquivo Infisc.LerXML.pas porque a tag cNFSe não estava sendo carregada (arquivo anexo).

Contudo estou enfrentando alguns problemas estranhos ao utilizar o programa de exemplo do componente.

Não consigo emitir devido a rejeição de schemas conforme a imagem anexa. Baixei o arquivo de schemas mais atualizado disponível no portal da prefeitura (anexo).

Para conseguir avançar acabei desabilitando a validação utilizando a linha abaixo antes de emitir da NFSe:

ACBrNFSeX1.Provider.ConfigSchemas.Validar := false;

Mas isso acarreta outros problemas conforme vou modificando as propriedades SSLLib e XMLSignLib.

Se uso SSLLib = libOpenSSL a mensagem é:

Erro(s):
Código  : X801
Mensagem: Erro ao Assinar: "CarregarCertificadoDeNumeroSerie" não suportado em: TDFeOpenSSL

Se uso SSLLib = libWinCrypt (que é o padrão que utilizo no componente ACBRNfe e funciona perfeitamente) a mensagem é:

Erro(s):
Código  : X800
Mensagem: Erro de Validação: Erro: Schema inválido

 

Se modifico a propriedade XMLSignLib para xsMsXML, o campo SSLLib é posicionado para libCustom e o erro é a mensagem anexo.

 

Fico agradecido se alguém quiser compartilhar alguma dica.

 

 

Anotação 2022-02-22 140004.jpg

Infisc.LerXml.pas nfse.xsd

  • Consultores
Postado

Boa tarde,

Tem que funcionar com winCrypt e LibXml2, se funciona para NFe.

Mensagem de schema inválido: Para LibXml2, os schemas não podem estar em caminho UNC, se estiver, precisa mapear unidade, criar um link simbólico ou salvar local.

Configurações a seguir.

SSLCryplib = winCrypt

SSLHttpLib = winHttp

SSLLiB = winCrypt

SSLCMLSignLib = LibXml2

SSLType = tls_v1_2

  • Membros Pro
Postado

Olá Renato,

Obrigado pelas explicações.

Consegui avançar um passo, utilizei o método Emitir do componente e obtive um retorno do webservice.

Porém este provedor é assíncrono, um segundo endpoint deve ser invocado para saber se o lote foi aceito (no caso usando o método Emitir não tive este retorno).

Mesmo ativando a propriedade ACBrNFSeX1.Configuracoes.Geral.ConsultaLoteAposEnvio a consulta não é executada.

Por fim tentei usar o método ConsultarLoteRps informando o número de lote recebido no método Emitir e a mensagem é a seguinte:

Código  : X999
Mensagem: Erro de Conexão: Premature end of data in tag obterCriticaLoteResponse line 1

 

2-rec.xml 216305-con-lot.xml 216305-lista-nfse-con-lot-soap.xml

  • Consultores
Postado

Boa tarde Tiago,

Você está com os fontes atualizados?

O retorno da sua consulta do lote está acusando assinatura inválida, talvez por isso esteja ocorrendo algum erro ao consultar automaticamente após o envio. Por favor, anexe o soap de envio do RPS para também ser avaliado.

1. Tentou com as configurações que sugeri? Está com Windows atualizado?

2. Para não cair no esquecimento, por favor aguarde o @Italo Giurizzato Junior analisar sua colaboração.

Em 22/02/2022 at 14:05, TiagoTecchio disse:

Precisei realizar um ajuste no arquivo Infisc.LerXML.pas porque a tag cNFSe não estava sendo carregada (arquivo anexo).

Infisc.LerXml.pas 22 kB · 0 downloads nfse.xsd 64 kB · 0 downloads

 

  • Membros Pro
Postado

Boa tarde Renato,

Sim, apliquei as configurações que você me indicou.

Os fontes foram atualizados ontem pela manhã. Windows também está atualizado.

Se eu deixo a validação de schemas ativada não consigo avançar para o envio (surge aquela mensagem do primeiro post).

Se desligo a validação consigo avançar.

Veja como fiz:

  ACBrNFSeX1.Provider.ConfigSchemas.Validar := false;

  ACBrNFSeX1.Configuracoes.Geral.SSLCryptLib   := ACBrDFeSSL.cryWinCrypt;
  ACBrNFSeX1.Configuracoes.Geral.SSLHttpLib    := ACBrDFeSSL.httpWinHttp;
  ACBrNFSeX1.Configuracoes.Geral.SSLLib        := ACBrDFeSSL.libWinCrypt;
  ACBrNFSeX1.Configuracoes.Geral.SSLXmlSignLib := ACBrDFeSSL.xsMsXml;
  ACBrNFSeX1.SSL.SSLType                       := blcksock.LT_TLSv1_2;

  ACBrNFSeX1.Configuracoes.WebServices.Salvar := True;
  ACBrNFSeX1.Configuracoes.Geral.ConsultaLoteAposEnvio := true;
  ACBrNFSeX1.Emitir(vNumLote, meLoteAssincrono);

 

 

Anexo os arquivos de logs que o componente gera ao realizar esta operação.

Obrigado pela ajuda.

555-env-lot.xml 555-env-lot-soap.xml 555-rec.xml 555-rec-soap.xml 20220223165830-con-lot.xml 20220223165830-con-lot-soap.xml 20220223165830-lista-nfse-con-lot-soap.xml

  • Consultores
Postado
3 horas atrás, TiagoTecchio disse:

ACBrNFSeX1.Configuracoes.Geral.SSLXmlSignLib := ACBrDFeSSL.xsMsXml;

Mude para.

Em 22/02/2022 at 16:24, Renato Rubinho disse:

SSLXMLSignLib = LibXml2

Confirmando, seus schemas estão na rede? Veja abaixo se estiverem.

Em 22/02/2022 at 16:24, Renato Rubinho disse:

Mensagem de schema inválido: Para LibXml2, os schemas não podem estar em caminho UNC, se estiver, precisa mapear unidade, criar um link simbólico ou salvar local.

 

  • Membros Pro
Postado

Bom dia Rentato,

Modifiquei para LibXml2 e ativei a validação de schemas mas o resultado é:

Erro(s):
Código  : X800
Mensagem: Erro de Validação: Erro: Schema inválido

Os schemas estão num pasta simples:

C:\doc\schemaNfse

Desconfio que o arquivo de schema do provedor tenha algum bug.

Utilizei um programa que eles disponibilizam para validar XML (https://nfse.caxias.rs.gov.br/site/uploads/validador-NFSe.rar) e o XML gerado pelo demo não passou pela validação.

Porém também não consegui validar um XML de uma NFSe já autorizado pela prefeitura.

Até troquei de certificado para tentar outra abordagem mas o problema persiste.

Vou continuar tentando.

Grato pela ajuda.

  • Membros Pro
Postado

Bom dia Renato,

Modifiquei para LibXml2 e ativei a validação de schemas mas o resultado é:

Erro(s):
Código  : X800
Mensagem: Erro de Validação: Erro: Schema inválido

Os schemas estão num pasta simples:

C:\doc\schemaNfse

Desconfio que o arquivo de schema do provedor tenha algum bug.

Utilizei um programa que eles disponibilizam para validar XML (https://nfse.caxias.rs.gov.br/site/uploads/validador-NFSe.rar) e o XML gerado pelo demo não passou pela validação.

Porém também não consegui validar um XML de uma NFSe já autorizado pela prefeitura.

Até troquei de certificado para tentar outra abordagem mas o problema persiste.

Vou continuar tentando.

Grato pela ajuda.

  • Membros Pro
Postado (editado)

Boa tarde Italo,

Agora utilizei os schemas da pasta que você mencionou.

Porém o resultado não mudou. Ao acionar a opção Emitir no demo o resultado é este:

Método Executado: Enviar Lote
 
Parâmetros de Envio
Numero do Lote: 333
 
Parâmetros de Retorno
Data de Envio : 30/12/1899
Numero do Prot:
Numero da Nota:
Link          :
Código Verif. :
Sucesso       : False
 
Erro(s):
Código  :
Mensagem:
Correção:
---------

Estranhamente não há código ou mensagem na lista de erros.

Um detalhe que percebi é que na segunda requisição (ao solicitar o status do lote) o componente está passando o número da RPS informado e não o número de lote recebido na primeira solicitação.

 

Analisando os SOAPs gerados parece que a requisição de consulta não está sendo assinada.

 

Obrigado pela ajuda.

 

Anotação 2022-02-24 144745.jpg

333-env-lot-soap.xml 333-rec-soap.xml 20220224144451-con-lot-soap.xml 20220224144451-lista-nfse-con-lot-soap.xml

Editado por TiagoTecchio
  • Membros Pro
Postado

Bom dia Italo,

Obrigado pela resposta.

Atualizei os fontes conforme a sua orientação.

Os resultados agora foram diferentes. Observando os arquivos gravados na pasta de logs, o retorno parece OK.

Porém o componente está interpretando alguma coisa de forma equivocada.

Método Executado: Enviar Lote
 
Parâmetros de Envio
Numero do Lote: 216445
 
Parâmetros de Retorno
Data de Envio : 30/12/1899
Numero do Prot:
Numero da Nota:
Link          :
Código Verif. :
Sucesso       : False
 
Erro(s):
Código  :
Mensagem:
Correção:
---------
Código  : X999
Mensagem: Erro de Conexão: '/0' is not a valid integer value
Correção:

 

Neste exemplo tentei gerar um RPS já emitido.

1.jpg

444-env-lot.xml 444-rec.xml 20220301085853-con-lot.xml 20220301085853-lista-nfse-con-lot.xml

  • Membros Pro
Postado

Italo,

Se ajuda localizei um problema de conversão de datas na função DataComBarra na unit ACBrXmlBase.

Anexo com o ajuste.

Creio que seja este o problema principal no meu caso.

Mas mesmo depois de ajustado não consigo iterar sobre as rejeições que o webservice retorna.

Sem título.png

ACBrXmlBase.pas

  • Consultores
Postado

Boa tarde Tiago,

Muito obrigado pela ajuda em encontrar o erro referente a data, essa correção já se encontra no SVN.

Com essa correção na leitura da data e as alterações que enviei, as rejeições ainda não são apresentadas?

 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado

Bom dia Italo,

Não obtenho um retorno com as mensagens ou não estou sabendo como fazer.

Mas como estou usando o demo penso que o resultado viria em tela.

Ao tentar emitir uma NFS-e com um número já emitido o resultado é:

Método Executado: Enviar Lote
 
Parâmetros de Envio
Numero do Lote: 216473
 
Parâmetros de Retorno
Data de Envio : 03/03/2022
Numero do Prot:
Numero da Nota:
Link          :
Código Verif. :
Sucesso       : False
 
Erro(s):
Código  :
Mensagem:
Correção:
---------

Estou emitindo usando o comando abaixo - o modo de envio seria então meAutomatico:

ACBrNFSeX1.Emitir(vNumLote);

A resposta está na primeira imagem, então parece que o componente não executa a consulta após a emissão ou não grava os retornos nas propriedades corretas.

Se faço uma consulta usando o número do lote que recebo no primeiro XML a resposta é a segunda imagem (com as rejeições).

 

Por fim tentei ler a propriedade ACBrNFSeX1.WebService.ConsultaLoteRps.XmlRetorno após a emissão para identificar o retorno mas o XML refere-se ao retorno da emissão (anexo).

1.jpg

2.jpg

xml-ret.xml

  • Membros Pro
Postado

Bom dia Italo,

Atualizei os fontes mas o resultado é o mesmo.

Mesmo ativando a propriedade ACBrNFSeX1.Configuracoes.Geral.ConsultaLoteAposEnvio o componente não recebe as mensagens do envio. Ele enviar, recebe que o lote está em processamento mas a consulta subsequente não é executada.

Se faço manualmente uma consulta informando o número de lote recebido, neste caso recebo um retorno OK do webservice (no meu teste uma lista de rejeições).

20220304112511-con-lot.xml 20220304112511-lista-nfse-con-lot.xml 1-env-lot.xml 1-rec.xml

  • Consultores
Postado

Bom dia,

Agora me parece que ele esta capturando e apresentando os motivos das rejeições.

Note que no retorno do envio não traz nenhuma mensagem (tag <mot> esta vazia).

Já ao realizar a consulta retornou que o status é 200 (falha no processamento) e temos na lista de erros as rejeições como é apresentado na aba [Log].

Agora tem que tratar cada uma dessas rejeições para que o Rps seja processado com sucesso.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado

Olá Italo,

OK, entendi.

Mas estas rejeições não deveriam ser carregadas no componente logo após ser acionado o método Emitir ?

Porque o que está acontecendo é que o método Emitir retorna OK mas não está OK, eu acabo tendo que acionar o método ConsultarLoteRps para descobrir se houve rejeição.

  • Este tópico foi criado há 979 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.