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; |
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; |
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. |
i:= Util.Assinar(xmlNaoAssinado, 'infNFe', nomecertificado,
xmlAssinado, mensagem);
// a variável "nomercertificado" já contendo os dados do certificado
// conforme obtido no exemplo 02.
Tags: Certificado Digital, NF-e