Ir para conteúdo
  • Cadastre-se

dev botao

Função para detectar se o Certificado A3 está operacional


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

Recommended Posts

Boa tarde, amigos

Antes da refatoração do componente usava a função abaixo

AcbrNfe1.SSL.CertificadoLido

para testar se o Certificado tipo A3 estava operacional:

Mas agora, não funciona, ora ela identifica a ausência, ora não,  pelo menos eu não estou sabendo fazer.

E muitos dos meus atendimentos é para esta chatice. Tem alguma forma de verificar isto?

A presença/funcionalidade do certificado no computador? 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
11 minutos atrás, marcio-carneiro disse:

Boa tarde, amigos

Antes da refatoração do componente usava a função abaixo

AcbrNfe1.SSL.CertificadoLido

para testar se o Certificado tipo A3 estava operacional:

Mas agora, não funciona, ora ela identifica a ausência, ora não,  pelo menos eu não estou sabendo fazer.

E muitos dos meus atendimentos é para esta chatice. Tem alguma forma de verificar isto?

A presença/funcionalidade do certificado no computador? 

 

 

Boa tarde, marcio-carneiro.

O tópico abaixo é antigo, porém talvez possa te ajudar:

 

  • Curtir 1
Equipe ACBr

Felipe Eduardo Resende Mesquita

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

  • Fundadores

Você pode usar o Ponteiro do Certificado PCCERT_CONTEXT, e manipular ele diretamente com a WinCrypt... Tente isso:


    if ACBrNFe1.SSL.SSLCryptClass is TDFeWinCrypt then
    begin
      try
        GetCertIsHardware(TDFeWinCrypt(ACBrNFe1.SSL.SSLCryptClass).Certificado);
        Ok := True;
      except
        Ok := False;
      end;
    end;

 

  • Curtir 3
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

Obrigado pela atenção.

Daniel, não funcionou. Não encontra o certificado.

O token está presente e operacional, pois antes de entrar no módulo nfce testei no módulo nfe uma consulta ao webservice.

Mas quando entra, mesmo presente, não encontra.

Posso estar não preenchendo todos os dados, mas o componente AcbrNfe já está configurado, antes da pesquisa, com os dados do certificado, como número e senha.

Onde posso estar errando?  

Debugando no Delphi dá um erro de acess violation e não mostra nem a mensagem de erro.

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Fiz um teste com nosso Certificado A3, modelo leitora de cartão... e o funcionamento foi plenamente satisfatório...

procedure TForm1.Button13Click(Sender: TObject);
begin
  if ACBrNFe1.SSL.SSLCryptClass is TDFeWinCrypt then
  begin
    try
      GetCertIsHardware(TDFeWinCrypt(ACBrNFe1.SSL.SSLCryptClass).Certificado);
      ShowMessage('PRESENTE');
    except
       ShowMessage('ERRO');
    end;
  end;
end;   

Remover o Cartão, ou o cabo USB do leitor de cartão, sempre acusou a mensagem ERRO... Após inserir o Cartão ou reconectar o cabo USB, a mensagem PRESENTE passou a ser exibida...

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

  • Moderadores
  • Solution

Fiz teste com o demo, também tive o AV aqui com a mensagem de ERRO com esse método, com um token A3.

Percebi que se tentasse acessar as informações do certificado, como data de vencimento, depois disso o teste passava a retornar como presente.

Incluí a chamada ao CarregarCertificadoSeNecessario e passou a funcionar:

procedure TForm1.Button6Click(Sender: TObject);
begin

  if ACBrNFe1.SSL.SSLCryptClass is TDFeWinCrypt then
  begin
    try
      ACBrNFe1.SSL.CarregarCertificadoSeNecessario;
      GetCertIsHardware(TDFeWinCrypt(ACBrNFe1.SSL.SSLCryptClass).Certificado);
      ShowMessage('PRESENTE');
    except
       ShowMessage('ERRO');
    end;
  end;

end;

 

  • Curtir 3
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Obrigado novamente pela ajuda. 

Sem dúvida, o método CarregarCertificado funciona.

Mas tudo tem um porém: mesmo inserindo o token, após a apresentação da tela de solicitação de certificado digital, o botão OK continua inabilitado,

e apertando o botão cancelar que é a única opção habilitada, e mesmo com o cartão/token  inserido, ele emite a mensagem de erro, Mas a função do mestre Daniel Simões 

reconhece o certificado e retorna TRUE.

Não tem como a rotina que solicita o certIficado digital, quando notado a presença do certificado, liberar o OK?

Link para o comentário
Compartilhar em outros sites

  • Fundadores
13 minutos atrás, marcio-carneiro disse:

Não tem como a rotina que solicita o certIficado digital, quando notado a presença do certificado, liberar o OK?

Isso é feito pela API do hardware do certificado...

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

Obrigado pela atenção. 

É uma pena que não possa retonar o OK, pois ficava completo.

O A1 é muito melhor, mas os muquiranas dos clientes não compram.

Então, se muitas vezes, mesmo plugado o token/certificado ele não reconhece.

É somente tirar e colocar novamente, que ele retorna o funcionamento.

Mas a média dos operadores são muito fracos, ficam falando enquanto inicializam o módulo, e não percebem o funcionamento do software.

Quando deixei de usar a função -   AcbrNfe1.SSL.CertificadoLido, passei a usar esta, CarregarSeNecessário, mas travei nesta tela que pede para inserir um certificado, 

e eu, na minha santa ignorância, achava que estava faltando alguma coisa, pois o botão do OK não liberava.

E para o usuário, falar que tem que inserir o certificado e mesmo assim apertar o botão CANCELAR para avançar, era muito para a inteligência, infelizmente de muitos,

até mesmo entendo, pois cancelar significa que você não quer continuar, então a lógica fica confusa.

Com esta rotina que você caridosamente me ensinou, Daniel, já melhorou muito e o detalhe final do BigWings, acabou de arrematar, pois agora inabilito o botão de envio do cupom.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Administradores

Obrigado por reportar.

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

  • Curtir 1
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 !!

Link para o comentário
Compartilhar em outros sites

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