Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFSeX - Equiplano - Cancelamento - 1056 - Rejeição: Assinatura - Digest difere do calculado


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

Recommended Posts

Postado

Ola!

Ao tentar cancelar ocorre a rejeição do Digest difere do calculado, passei algumas horas debugando mas não obtive sucesso.

 

Estou fazendo o cancelamento usando de base o exemplo do ACBrNFSeX

 

          LInfCancelamento := TInfCancelamento.Create;
          try
            LInfCancelamento.NumeroNFSe      := IntToStr(LNumNota);
            LInfCancelamento.SerieNFSe       := LSerie;
            LInfCancelamento.ChaveNFSe       := LcdAut;
            LInfCancelamento.MotCancelamento := LxMotivo;
            LInfCancelamento.NumeroLote      := IntToStr(ANotaId);
            LInfCancelamento.NumeroRps       := LNumRPS;
            //LInfCancelamento.SerieRps        := LSerie;
            //LInfCancelamento.ValorNFSe       := StrToFloatDef(ValNFSe, 0);
            //LInfCancelamento.CodVerificacao  := CodVerif;

            // Codigo de Cancelamento
            // 1 - Erro de emissão
            // 2 - Serviço não concluido
            // 3 - RPS Cancelado na Emissão
            if LACBrNFSeX.Configuracoes.Geral.Provedor in [proCoplan, proWebISS] then
            begin
              LInfCancelamento.NumeroNFSe       := FormatFloat('0000', YearOf(LDataEmissao)) +
                                                   FormatFloat('00000000000', LNumNota);
              LInfCancelamento.CodCancelamento  := '2';
            end
            else
              LInfCancelamento.CodCancelamento := '1';

            LACBrNFSeX.CancelarNFSe(LInfCancelamento);
          finally
            LInfCancelamento.Free;
          end;

 

e o retorno (LACBrNFSeX.WebService.CancelaNFSe.Erros): 1056 - Rejeição: Assinatura - Digest difere do calculado

-=Ma®©oS=-

  • Consultores
Postado

Bom dia Marcos,

Faça o seguinte alteração na unit Equiplano.Provider - Procedure Configuracao:

    with CancelarNFSe do
    begin
//      InfElemento := 'prestador';
      InfElemento := 'esCancelarNfseEnvio';
      DocElemento := 'esCancelarNfseEnvio';
    end;

Essa alteração no conteúdo de InfElemento vai fazer com que mude o valor do DigestValue da assinatura.

Altere e faça um novo teste.

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

Postado
3 horas atrás, Italo Giurizzato Junior disse:

Bom dia Marcos,

Faça o seguinte alteração na unit Equiplano.Provider - Procedure Configuracao:

    with CancelarNFSe do
    begin
//      InfElemento := 'prestador';
      InfElemento := 'esCancelarNfseEnvio';
      DocElemento := 'esCancelarNfseEnvio';
    end;

Essa alteração no conteúdo de InfElemento vai fazer com que mude o valor do DigestValue da assinatura.

Altere e faça um novo teste.

Boa Tarde Italo!

 

Sem sucesso.

 

Anexo XMLs capturados diretamente do AService.Envio e do AService.Retorno dentro da procedure TACBrNFSeXProvider.CancelaNFSe

 

envio.html retorno.html

-=Ma®©oS=-

Postado
Em 25/02/2022 at 14:41, Italo Giurizzato Junior disse:

Boa tarde Marcos,

Se essa alteração não deu certo, o jeito vai ser entrar em contato com eles para e pedir um XML de pedido de cancelamento validado por eles.

Boa Tarde Italo!

 

Anexo envio e retorno capturadas direto das variáveis FPEnvelopeSoap (envio) e FPRetornoWS (retorno) do cancelamento que ocorre corretamente no ACBrNFSe (dentro do ACBrDFeWebService na versão anterior do componente)

 

envio_acbrnfse.xml retorno_acbrnfse.xml

-=Ma®©oS=-

Postado
1 hora atrás, Italo Giurizzato Junior disse:

Marcos,

Qual é a configuração usada no componente antigo e no novo?

Pois agora ele esta gerando o pedido de cancelamento igual ao do antigo.

 

Abaixo

  AACBrNFSeX.Configuracoes.Geral.SSLXmlSignLib 		:= xsMsXml;
  AACBrNFSeX.SSL.SSLXmlSignLib                      := xsMsXml;
  AACBrNFSeX.Configuracoes.Geral.SSLLib             := libWinCrypt;
  AACBrNFSeX.Configuracoes.Certificados.DadosPFX    := LCertificado.DadosPFX;
  AACBrNFSeX.Configuracoes.Certificados.NumeroSerie := LCertificado.NumeroSerie;
  AACBrNFSeX.Configuracoes.Certificados.Senha       := LCertificado.Senha;


  AACBrNFSe.Configuracoes.Geral.SSLXmlSignLib   := xsMsXml;
  AACBrNFSe.SSL.SSLXmlSignLib                   := xsMsXml;
  AACBrNFSe.Configuracoes.Geral.SSLLib          := libWinCrypt;
  AACBrNFSe.SSL.Senha        					:= LCertificado.Senha;
  AACBrNFSe.SSL.NumeroSerie  					:= LCertificado.NumeroSerie;
  AACBrNFSe.SSL.DadosPFX     					:= LCertificado.DadosPFX;
  AAcBrNFSe.SSL.SSLType                    		:= LT_TLSv1_2;
  AAcBrNFSe.Configuracoes.Geral.SSLHttpLib 		:= httpOpenSSL;

  

 

-=Ma®©oS=-

Postado

Observando minha resposta anterior, testei alterando tambem no ACBrNFSeX

 AACBrNFSeX.SSL.SSLType                    		:= LT_TLSv1_2;
 AACBrNFSeX.Configuracoes.Geral.SSLHttpLib 		:= httpOpenSSL;

porem o erro (1056 - Rejeição: Assinatura - Digest difere do calculado) continua

-=Ma®©oS=-

Postado
20 minutos atrás, Italo Giurizzato Junior disse:

Boa tarde Marcos,

Tente esta configuração:

Configuracao.jpg

SSLType = LT_LTSv1_2

Boa Tarde!

Mesmo problema.

 

Pelo vi entre o ACBrNFSe e o ACBrNFSeX a direfença está no envelope soap, porem na teoria não deveria impactar já que não é o envelope que é assinado.

-=Ma®©oS=-

Postado
2 horas atrás, Renato Rubinho disse:

O motivo é a única informação que seria variável, por mais que esteja igual e funcionando no componente antigo, testa mandar um texto simples, sem o ; : e / da data e hora.

 

Essa sua idéia me fez realizar um debug mais detalhado no motivo do cancelamento e acabei encontrando uma falha.

No ACBrNFSe tratava:

erador.wCampo(tcStr, '#4', 'MotivoCancelamento', 01, 36, 1, MotivoCanc, '');

Gerador.wCampo(tcStr, '#4', 'MotivoCancelamento', 01, 36, 1, MotivoCanc, '');

Já no ACBrNFSeX:

procedure TACBrNFSeProviderEquiplano.PrepararCancelaNFSe( Response: TNFSeCancelaNFSeResponse);

Response.ArquivoEnvio := '<es:esCancelarNfseEnvio' + NameSpace + '>' +
                         '<prestador>' +
                           '<nrInscricaoMunicipal>' +
                              OnlyNumber(Emitente.InscMun) +
                           '</nrInscricaoMunicipal>' +
                           '<cnpj>' +
                              OnlyNumber(Emitente.CNPJ) +
                           '</cnpj>' +
                           '<idEntidade>' +
                              FpCodigoCidade +
                           '</idEntidade>' +
                         '</prestador>' +
                         '<nrNfse>' +
                            Response.InfCancelamento.NumeroNFSe +
                         '</nrNfse>' +
                         '<dsMotivoCancelamento>' +
                            Response.InfCancelamento.MotCancelamento + <--- AQUI
                         '</dsMotivoCancelamento>' +
                       '</es:esCancelarNfseEnvio>';

Apenas concatena, não removendo a quebra de linha.

Removi manualmente e autorizou corretamente o cancelamento.

-=Ma®©oS=-

Postado

- Esta questão da quebra de linha será tratada no componente ou na aplicação ? (Particularmente prefiro no componente assim já evita problemas para outros desenvolvedores)

- Outra questão (que está ligada diretamente a esta) é a consulta de status (ConsultaNFSePorRPS) de uma NFSe cancelada, não está considerando o cancelamento no retorno.

 

Retorno:

<es:esConsultarNfsePorRpsResposta xmlns:es="http://www.equiplano.com.br/esnfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.equiplano.com.br/esnfs consultarNfsePorRpsResposta_v01.xsd">
  <nfse>
    <nrNfse>32</nrNfse>
    <cdAutenticacao>F2ACDF08BDD106755D8263CB198B50CB</cdAutenticacao>
    <dtEmissaoNfs>2022-03-04T09:10:30</dtEmissaoNfs>
    <nrRps>357</nrRps>
    <nrEmissorRps>1</nrEmissorRps>
    <cancelamento>
      <dtCancelamento>2022-03-04T09:13:24</dtCancelamento>
      <dsCancelamento>TESTE CANCELAMENTO DATA/HORA CANCELAMENTO: 04/03/2022 09:11:34</dsCancelamento>
    </cancelamento>
  </nfse>
</es:esConsultarNfsePorRpsResposta>

 

Veja que é retornado o bloco de cancelamento, porem o TNFSeConsultaNFSeporRpsResponse não suporta tais campos, se não houver objeção posso tentar implementar

 

-=Ma®©oS=-

Postado

Bom Dia Italo!

 

- Segue anexo sugestão de melhoria para a ConsultaNFSePorRPS de NFS-e Cancelada.

- Testei com NFS-e Cancelada e não cancelada.

- Falta a questão da quebra de linha

 

ACBrNFSeXWebservicesResponse.pas Equiplano.Provider.pas

2 minutos atrás, Italo Giurizzato Junior disse:

Marcos,

Enviei para o SVN uma possível solução para a quebra de linha colocada no motivo de cancelamento.

Agora o componente vai trocar a quebra de linha pelo caractere ";" automaticamente.

Vou fazer update e testar, estava postando a questão do ConsultaNFSeporRPS, ja testo e atualizo novamente aqui

-=Ma®©oS=-

Postado
Em 04/03/2022 at 15:02, Italo Giurizzato Junior disse:

Marcos,

Já esta no SVN.

 

Boa Tarde Italo!

Atualizei e realizei os testes, está funcionando corretamente.

Desculpe pela demora em testar, estava com outros problemas aqui para resolver.

Obrigado

-=Ma®©oS=-

  • Administradores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 993 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.