Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao Assinar. O XML informado possui CNPJ diferente do Certificado Digital


Marcos Gerene
  • Este tópico foi criado há 3071 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia a todos,

Estou migrando para o trunk2, atualmente usando o SimplISS (que já tem o .ini criado). Ao tentar transmitir um RPS, na procedure de Assinar do ACBrNFSeNotasFiscais estou tendo um problema nesse trecho:

  // VErificando se pode assinar esse XML (O XML tem o mesmo CNPJ do Certificado ??)
  CNPJEmitente    := OnlyNumber(NFSe.Prestador.CNPJ);
  CNPJCertificado := OnlyNumber(TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe).SSL.CertCNPJ);

  // verificar somente os 8 primeiros digitos, para evitar problemas quando
  // a filial estiver utilizando o certificado da matriz
  if Copy(CNPJEmitente, 1, 8) <> Copy(CNPJCertificado, 1, 8) then
    raise EACBrNFSeException.Create('Erro ao Assinar. O XML informado possui CNPJ diferente do Certificado Digital' );

Notei que a propriedade .SSL.CetCNPJ não estava preechida e tentei preencher de forma manual mas não consegui, porém vale lembrar que o SimplISS não usa certificado, ele requer somente um usuário e senha (diferente do Ginfes, por exemplo).

 

Existe alguma configuração que eu não fiz para que este problema seja ignorado?

 

Att, Marcos

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

23 minutos atrás, ALA disse:

Marcos, boa tarde. Quando aconteceu esse problema comigo. Eu estava enviando no XML um CNPJ do Estabelecimento diferente do CNPJ do Certificado...

Boa tarde ALA,

O SimplISS não utiliza certificado, somente um usuário e senha, justamente por isso tentei setar o campo .SSL.CetCNPJ porém o mesmo é ReadOnly.

No .ini do SimplISS  note que não deve ser assinado nada:

; No grupo abaixo é definido se o XML do RPS deve ser assinado ou não
; se o Lote deve ser assinado ou não
; e se o GerarNFSe deve ser assinado ou não
; o Campo URI faz parte da assinatura no caso da Digifred ele não deve ser informado
; É definido também quais tipos de acessos devem ser assinados
; 0 = False / 1 = True (se True então assina)
[Assinar]
RPS=0
Lote=0
URI=0
Recepcionar=0
ConsSit=0
ConsLote=0
ConsNFSeRps=0
ConsNFSe=0
Cancelar=0
Gerar=0
RecSincrono=0
Substituir=0

Existe alguma propriedade que pegue essa informação (se deve assinar o RPS)?

Porque se existir é só alterar o método "Enviar".

function TACBrNFSe.Enviar(ALote: String; Imprimir: Boolean): Boolean;
var
  i: Integer;
begin
  if NotasFiscais.Count <= 0 then
    GerarException(ACBrStr('ERRO: Nenhum RPS adicionado ao Lote'));

  if NotasFiscais.Count > 50 then
    GerarException(ACBrStr('ERRO: Conjunto de RPS transmitidos (máximo de 50 RPS)' +
      ' excedido. Quantidade atual: ' + IntToStr(NotasFiscais.Count)));

  if (ASSINAR_RPS) then  // -> Atualmente não existe esse IF
     NotasFiscais.Assinar(Configuracoes.Geral.ConfigAssinar.RPS);

  Result := WebServices.Envia(ALote);

  if DANFSE <> nil then
  begin
    for i:= 0 to NotasFiscais.Count-1 do
    begin
      if NotasFiscais.Items[i].Confirmada and Imprimir then
        NotasFiscais.Items[i].Imprimir;
    end;
  end;
end;

Att, Marcos

Editado por Marcos Gerene

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

function TACBrNFSe.Enviar(ALote: String; Imprimir: Boolean): Boolean;
var
  i: Integer;
begin
  if NotasFiscais.Count <= 0 then
    GerarException(ACBrStr('ERRO: Nenhum RPS adicionado ao Lote'));

  if NotasFiscais.Count > 50 then
    GerarException(ACBrStr('ERRO: Conjunto de RPS transmitidos (máximo de 50 RPS)' +
      ' excedido. Quantidade atual: ' + IntToStr(NotasFiscais.Count)));

  if (NotasFiscais.ACBrNFSe as TACBrNFSe).Configuracoes.Geral.ConfigAssinar.RPS then
     NotasFiscais.Assinar(Configuracoes.Geral.ConfigAssinar.RPS);

  Result := WebServices.Envia(ALote);

  if DANFSE <> nil then
  begin
    for i:= 0 to NotasFiscais.Count-1 do
    begin
      if NotasFiscais.Items[i].Confirmada and Imprimir then
        NotasFiscais.Items[i].Imprimir;
    end;
  end;
end;

Dessa forma deu certo, porém no WebServices.Envia(ALote) apareceu "número do certificado não encontrado".

 

O SimplISS não tem certificado, devo fazer essa correção para onde der esse erro e postar meus .pas ou o modo que estou pensando/fazendo está errado?

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

Boa tarde a todos.

Gostaria de sugerir algumas alterações com relação a isso para o componente: A criação de uma flag ou algo do tipo para a realização desta validação.

procedure NotaFiscal.Assinar(Assina: Boolean);
var
  XMLStr: String;
  XMLUTF8: AnsiString;
  Leitor: TLeitor;
  CNPJEmitente, CNPJCertificado: String;
begin
  // VErificando se pode assinar esse XML (O XML tem o mesmo CNPJ do Certificado ??)
  CNPJEmitente    := OnlyNumber(NFSe.Prestador.CNPJ);
  CNPJCertificado := OnlyNumber(TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe).SSL.CertCNPJ);

  // verificar somente os 8 primeiros digitos, para evitar problemas quando
  // a filial estiver utilizando o certificado da matriz
  if Copy(CNPJEmitente, 1, 8) <> Copy(CNPJCertificado, 1, 8) then
    raise EACBrNFSeException.Create('Erro ao Assinar. O XML informado possui CNPJ diferente do Certificado Digital' );

Digo isso porque, em meus testes utilizo um certificado de homologação para o servidor ISSCuritiba e neste certificado, não possui o CNPJ da empresa. Sendo assim, toda vez que tento enviar a nota gera o erre em questão. Só ressaltando, isso somente ocorre porque o certificado é de homologação. Com certificado de produção, funciona ok.

Ou sei lá, não realizar essa validação quando for homologação (não sei se seria a melhor possibilidade).

Qual as chances de se implementar isso?

Obrigado desde já pela atenção.

Link para o comentário
Compartilhar em outros sites

Boa noite a todos. Conforme mencionado, seguem em anexo a modificação sugerida. Testei a qui em Curitiba/PR com o certificado de homologação funcionou 100%. Uma dúvida apenas: No arquivo ACBrNFSeWebServices.pas na linha 3617 possui a passagem :   if (TACBrNFSe(FACBrNFSe).Configuracoes.Geral.ConsultaLoteAposEnvio) and (Result) then. Esse parâmetro ConsultaLoteAposEnvio é alterado em algum campo do arquivo ini de configuração ou altero diretamente no componente?

Obrigado. 

ACBrDFe.zip

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Fundadores

E se apenas modificarmos o IF da verificação do Certificado para verificar se o CNPJ lido do Certificado está vazio ?

  // verificar somente os 8 primeiros digitos, para evitar problemas quando
  // a filial estiver utilizando o certificado da matriz
  if (CNPJCertificado <> '') and (Copy(CNPJEmitente, 1, 8) <> Copy(CNPJCertificado, 1, 8)) then
    raise EACBrNFeException.Create('Erro ao Assinar. O XML informado possui CNPJ diferente do Certificado Digital' );

 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3071 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.