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.

Posts Relacionados

Tags: ,



6 Comentários

  • At 2009.06.04 10:16, rodrigo said:

    ola Caio,
    estou com uma duvida qto aos certificados e talvez vc possa me ajudar. adquirindo um certificado A1 eu poderei instala-lo em varios pcs assim emitindo nfe de varios pcs ou eu poderei instala-lo em apenas um pc e emitir nfe apenas de um computador? Abraço.

    • At 2009.06.04 13:14, admin said:

      Olá Rodrigo,

      Sobre certificado tipo A1, vc pode sim instalá-lo em vários pcs e emitir NF-e de cada um deles.

      Obs. Repare que por motivo de segurança, seria interessante que tivesse um serviço centralizado de envio/consulta das NF-e; assim o seu certificado não fica exposto à usos indevidos e a manutenção do sistema fica mais prática.

      Sds, Caio

      • At 2009.07.20 07:08, Emanuel Gadelha said:

        Olá.. Caio tou usando esse código ai pra selecionar o certificado, mas tá dando erro, diz que nao foi encontrado nenhum certificado válido no repositorio com o nome do meu certificado, que por sinal está instalado corretamente! O que pode ser? Nao entendo muito de certificados.. Me ajude, por favor!

        • At 2009.07.20 08:16, Caio said:

          Olá Emanuel,

          Abra o Internet Explorer e verifique se vc consegue visualizar o certificado à partir da opção “Ferramentas\Opções da Internet\Conteúdo\Certificados”. Se não, reinstale o certificado.

          Sds,

          • At 2009.07.21 07:56, Emanuel Gadelha said:

            Sim Caio, consigo ver tanto no Internet Explorer quanto no Mozilla, mas de qualquer forma obrigado.. nao sei como faço mais!

            • At 2009.07.21 13:07, Emanuel Gadelha said:

              Olá, novamente por aqui.. Só pra avisar que deu tudo certinho agora.. hehehe! Eu tava vacilando aqui.

              Abraço!

              You must be logged in to post a comment.