Ir para conteúdo
  • Cadastre-se

dev botao

Função Para Verificar Existência De Certificado


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

Recommended Posts

Bom dia ACBr ...

 

Estou implementando uma função em meu sistema, a qual necessita executar apenas no terminal que estiver com o certificado A3 presente.

 

Tenho revirado o fonte em busca da função, mas não estou conseguindo achar.

 

Alguém sabe como faço?

 

 

Antigamente bastava colocar essa linha que aparecia a mensagem de "Certificado digital ausente"

 


ACBrNFe1.Configuracoes.Certificados.GetCertificado

 

 

Porém não está mais funcionando.

 

 

Vou fazer uma verificação a cada primeiro acesso do dia para fazer uma busca por NFe emitidas, assim monto a base de dados para posterior ciencia da operação.

 

Marcelo Henrique Morini
Analista de Sistemas e Programador
Plásticos Assencio Ltda
[email protected]
Ibitinga - SP
Delphi Tokio 10.2 (ACBr - Jedi - Zeos - Rave - QuickReport - FastReport) > Firebird 2.5 em Windows 10 64b

Link para o comentário
Compartilhar em outros sites

Ja tentou colocando antes do Get o  Número do Certificado a ser pesquisado ?

 

Assim :

 

var Dt_Validade : String ;

begin

ACBrNFe1.Configuracoes.Certificados.NumeroSerie := Numero_De_Serie_do_Certificado_Digital_Desejado ;
ACBrNFe1.Configuracoes.Certificados.GetCertificado ;
Dt_Validade := DateToStr(ACBrNFe1.Configuracoes.Certificados.DataVenc);

if Trim(Dt_Validade) = '' then

   showmessage('Certificado não Encontrado !');

end ;

 

Obs :  Capicom !!!

Editado por marcelo_sp
Link para o comentário
Compartilhar em outros sites

Xará ... dentro da função GetCertificado, quando o certificado não está presente, não está chegando até o final da procedure para exibir a mensagem:

 

'Certificado Digital não encontrado!'

 

Ele exibe a mensagem:

 

'Erro ao criar a chave do CSP.'

 

e passa normalmente sem o certificado.

 

Isso começou a ocorrer após a reinstalação do ACBr para atualização no inicio do mês, até então eu sempre utilizei a função GetCertificado para parar a execução antes de entrar na procedure.

 

Será que mudaram alguma coisa?

Marcelo Henrique Morini
Analista de Sistemas e Programador
Plásticos Assencio Ltda
[email protected]
Ibitinga - SP
Delphi Tokio 10.2 (ACBr - Jedi - Zeos - Rave - QuickReport - FastReport) > Firebird 2.5 em Windows 10 64b

Link para o comentário
Compartilhar em outros sites

Encontrei um novo método, mas também tem hora que funciona e tem hora que não funciona.

 

ACBrNFe1.Configuracoes.Certificados.GetCertificado.Template.IsPresent; do tipo "WordBool"

 

To tentando!

Marcelo Henrique Morini
Analista de Sistemas e Programador
Plásticos Assencio Ltda
[email protected]
Ibitinga - SP
Delphi Tokio 10.2 (ACBr - Jedi - Zeos - Rave - QuickReport - FastReport) > Firebird 2.5 em Windows 10 64b

Link para o comentário
Compartilhar em outros sites

Marcelão , atualizei ontem o componente e descobri porque no meu sistema ele não da este pau , vou explicar :

 

Tenho alguns Clientes que utilizam mais de um Certificado no mesmo Sistema , ou seja , filiais , Certo ? No caso utilizo um cadastro do emitente e cadastro o Numero de Série do Certificado Digital porque todas as vezes que vai fazer algo no Sistema , CCe , CAn , NFe ... etc... o usuario tem que selecionar o Certificado do emitente que vai executar que esta no BD , só que consegue mostrar somente os Emitentes que o sistema consegue enchergar o Certificado ativo na maquina , vou colocar uma imagem e o trecho de código que alimento no grid todas as vezes que vai fazer algo no sistema :

 

 

Trecho de código que lista os certificados dando o get pra ver se o Certificado esta ativo (OnShow do Form) :

 

Lista com Try Except !!!

 

 

procedure TFrmSelecao_Certificado_Emitente.FormShow(Sender: TObject);
  var QryEmitentes : TQuery ;
      Dt_Validade  : String ;
begin
  GridEmitentes.ClearRows ;
  QryEmitentes := TQuery.Create(self);
  QryEmitentes.DatabaseName := 'ComplusNFe' ;
  QryEmitentes.Close ;
  QryEmitentes.SQL.Clear ;
  QryEmitentes.SQL.Add('Select * From CADASTRO_EMITENTES') ;
  QryEmitentes.Prepare ;
  QryEmitentes.Open ;
  while not QryEmitentes.Eof do
        begin
        try
        FrmPrincipal.ACBrNFe1.Configuracoes.Certificados.NumeroSerie := Trim(QryEmitentes.FieldByName('NUM_SERIE_CERT_DIGITAL').AsString) ;
        FrmPrincipal.ACBrNFe1.Configuracoes.Certificados.GetCertificado ;
        Dt_Validade := DateToStr(FrmPrincipal.ACBrNFe1.Configuracoes.Certificados.DataVenc);
        GridEmitentes.AddCells([ QryEmitentes.FieldByName('CNPJ').AsString ,
                                 QryEmitentes.FieldByName('RAZAO_SOCIAL').AsString ,
                                 QryEmitentes.FieldByName('NUM_SERIE_CERT_DIGITAL').AsString ,
                                 Dt_Validade ]);
        except
        end ;
        QryEmitentes.Next ;
        end ;
  GridEmitentes.ApplyEditing ;
  QryEmitentes.Free ;   
  if GridEmitentes.RowCount > 0 then
     GridEmitentes.SelectFirstRow ;
end;

 

 

 

Consegui ser claro ?

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Interessante ...

 

Eu repliquei, no meu sistema, praticamente o sistema demo do ACBR, e o numero de série do certificado fica no arquivo .INI, pois como tenho apenas um certificado por máquina, até então nunca deu erro.

 

Utilizamos o certificado A3 e basta o cartão estar na leitora que ele ja fica ativo, por isso, penso eu, que a função GetCertificado dava certo ... vou tentar fazer um IF do numero de série do arquivo INI com o numero de série do componente para ver se consigo filtrar.

 

E que eu quero fazer uma verificação simples tipo:

 

Se certificado presente na máquinha então

   inicio
     Busca Notas Fiscais emitidas para o CNPJ
     
     se encontrar alguma nota então
       inicio
         salva no banco de dados para posterior envio do Manifesto
       fim
   fim
senão
  não faz nada

Marcelo Henrique Morini
Analista de Sistemas e Programador
Plásticos Assencio Ltda
[email protected]
Ibitinga - SP
Delphi Tokio 10.2 (ACBr - Jedi - Zeos - Rave - QuickReport - FastReport) > Firebird 2.5 em Windows 10 64b

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...

Estou fazendo o seguinte e por enquanto esta dando certo:

ACBrNFe1.Configuracoes.Certificados.NumeroSerie:=DataModule1.ibConfig.fieldbyname('NFE_CERTIFICADO_ID').asstring;
ACBrNFe1.Configuracoes.Certificados.Senha:=DataModule1.ibConfig.fieldbyname('NFE_CERTIFICADO_SENHA').asstring;
ACBrNFe1.Configuracoes.Certificados.GetCertificado;
try
 if ACBrNFe1.Configuracoes.Certificados.GetCertificado.PrivateKey.IsHardwareDevice=false then
 Except
   ShowMessage('ERRO: Certificado selecionado não encontrado. Nota não emitida');
   exit;
 end;

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...