Sempre que necessário assinar ou enviar dados para o serviço da NF-e; é necessário informar o nome do certificado digital; é interessante, então, armazenar esses dados de forma que sempre que houver necessidade de usar o certificado vc possa informar os dados armazenados evitando assim que tenha que selecionar o mesmo à cada comando;

Como fazer isso então? A primeira coisa a fazer é inserir uma opção de seleção do certificado na sua aplicação e nela, um evento onde após a seleção do certificado onde vc. guarda em um arquivo esses dados; veja abaixo o código que permite armazenar os dados do certificado (usando recursos da NFe_UTIL.dll):

Ex.01: Salvando dados do Certificado Digital Selecionado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var Util:NFe_Util_Interface;
    i:integer;
    F: TextFile;
begin
  Util := CoUtil.Create;
  Try
  nomeCertificado := '';
  i:= Util.PegaNomeCertificado(nomeCertificado, msg);
 
  if i > 1 then
      MessageDlg( 'Ocorreu uma falha no acesso ao repositório de certificados digitais...'+#13+#13+msg, mtInformation, [mbOk], 0)
  else
      begin
        AssignFile(F, 'CertificadoDigital.res');
        Rewrite(F);
        Write(F,nomeCertificado);
        CloseFile(F);
      end;
  finally
     Util := nil;
  end;

Ex.02 Recuperando dados do certificado digital selecionado

1
2
3
4
5
6
7
8
9
10
11
var F: TextFile;
    nomecertificado: string;
begin
  if FileExists('CertificadoDigital.res') then
  begin
     AssignFile(F, 'CertificadoDigital.res');
     Reset(F);
     Readln(F,nomecertificado); // a variável nomecertificado vai receber os dados armazenados.
     CloseFile(F);
  end;
end;

Com isso, problema resolvido, após ler os dados do certificado na variável “nomecertificado” vc pode passar essa informação, por exemplo, para assinar o XML como abaixo (o exemplo usa uma função da NFE_UTIL.dll):

          i:= Util.Assinar(xmlNaoAssinado, 'infNFe', nomecertificado, 
               xmlAssinado, mensagem);
          // a variável "nomercertificado" já contendo os dados do certificado 
          // conforme obtido no exemplo 02.

Tags: ,