Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFe como serviço do windows


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

Recommended Posts

Boa tarde a todos,

Aqui na empresa, precisamos converter nosso aplicativo servidor para um serviço do windows mas esbarramos em um problema: O ACBr não encontra o certificado digital, pois ele procura no repositório do usuário logado e não no repositório da máquina. Depois de muito pesquisar, encontramos a referencia abaixo que resolveu o problema, apenas alterando as chamadas ao método Store.Open conforme abaixo:


function TCertificadosConf.GetCertificado: ICertificate2;

var

  Store        : IStore3;

...

//  Store.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_STORE_NAME, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

  Store.Open(CAPICOM_LOCAL_MACHINE_STORE, CAPICOM_STORE_NAME, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

...

end;


function TCertificadosConf.SelecionarCertificado: AnsiString;

var

  Store        : IStore3;

...

//  Store.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_STORE_NAME, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

  Store.Open(CAPICOM_LOCAL_MACHINE_STORE, CAPICOM_STORE_NAME, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

...

end;

http://msdn.microsoft.com/en-us/library/windows/desktop/aa388130(v=vs.85).aspx

A pergunta é: Seria possível criar uma propriedade para definir de qual reposítorio a ACBrNFe deverá buscar os certificados?

[]'s

Rafael Soares

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

  • 6 meses depois ...
  • 1 ano depois...
  • Fundadores

Sei que o Post é muito muito antigo... mas acabei caindo no mesmo problema... e implementei uma maneira de permitir configurar o "StoreLocation" na CAPICOM...

 

Porém as mudanças são apenas para o "trunk2"
 

ACBrDFeCapicom.pas -
  - Adicionada a propriedade "property StoreLocation: CAPICOM_STORE_LOCATION", para permitir carregar certificados da Máquina e não do Usuário

ACBrDFeSSL.pas
  - Expondo a classe interna através de uma propriedade: property SSLClass: TDFeSSLClass, para permitir acesso a propriedades da mesma através de Typecast

ACBrDFeOpenSSL.pas
  - Rotina de Carga de XMLSec revisada para usar a versão atual, disponível na pasta DLLs do Trunk2 (1.2.18)

 

Exemplo de uso:

procedure TForm1.sbtnGetCertClick(Sender: TObject);
begin
  if (ACBrNFe1.SSL.SSLClass is TDFeCapicom) then
    TDFeCapicom(ACBrNFe1.SSL.SSLClass).StoreLocation := CAPICOM_LOCAL_MACHINE_STORE;

  edtNumSerie.Text := ACBrNFe1.SSL.SelecionarCertificado;
end;
  • Curtir 2
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

  • 1 ano depois...

Boa tarde @Daniel Simoes, @Alexandre_Bernardes e @rf.soares

Como o post já é meio antigo não sei se vocês conseguiram resolver mais estou com um problema parecido:

Desenvolvi um serviço do Windows para fazer toda parte de emissão e consultas de NFe, visto que meu cliente possui um certificado A3 e quer usar de mais de uma maquina. Faço toda a comunicação entre meu sistema e o serviço através de um banco especifico para troca das informações e o serviço fica encarregado de receber tais consultas/emissões, executa-las e enviar a resposta. A questão que vem é a seguinte. Com o Windows 10 funciona perfeitamente, porém quando o cliente possui um Windows 7, eu fico recebendo a mensagem de Inativo ou inoperante, e reparo que o led do leitor do cartão nem chega a piscar, dando impressão que não houve comunicação com o certificado digital. Experimentei rodar no Windows 7 com um certificado A1, e nesse caso funcionou. Não sei então se o problema é o acesso efetivo ao certificado A3 ou a leitora. Vocês saberiam de algo que eu pudesse fazer ou conseguiram rodar esses serviços com A3 no Windows 7 ? 

 

Obs:- Já esta adicionada na Unit Principal e no projeto as Uses Windows, Forms e ActiveX, e também o serviço esta configurado com o usuário administrador.

 

Obrigado desde já pela atenção.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
11 minutos atrás, danielznt disse:

Boa tarde @Daniel Simoes, @Alexandre_Bernardes e @rf.soares

Como o post já é meio antigo não sei se vocês conseguiram resolver mais estou com um problema parecido:

Desenvolvi um serviço do Windows para fazer toda parte de emissão e consultas de NFe, visto que meu cliente possui um certificado A3 e quer usar de mais de uma maquina. Faço toda a comunicação entre meu sistema e o serviço através de um banco especifico para troca das informações e o serviço fica encarregado de receber tais consultas/emissões, executa-las e enviar a resposta. A questão que vem é a seguinte. Com o Windows 10 funciona perfeitamente, porém quando o cliente possui um Windows 7, eu fico recebendo a mensagem de Inativo ou inoperante, e reparo que o led do leitor do cartão nem chega a piscar, dando impressão que não houve comunicação com o certificado digital. Experimentei rodar no Windows 7 com um certificado A1, e nesse caso funcionou. Não sei então se o problema é o acesso efetivo ao certificado A3 ou a leitora. Vocês saberiam de algo que eu pudesse fazer ou conseguiram rodar esses serviços com A3 no Windows 7 ? 

 

Obs:- Já esta adicionada na Unit Principal e no projeto as Uses Windows, Forms e ActiveX, e também o serviço esta configurado com o usuário administrador.

 

Obrigado desde já pela atenção.

Leia as regras do fórum e poste em um lugar tu fez o mesmo post em outro tópico igual

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...
Em 16/06/2015 at 20:05, Daniel Simoes disse:

Sei que o Post é muito muito antigo... mas acabei caindo no mesmo problema... e implementei uma maneira de permitir configurar o "StoreLocation" na CAPICOM...

 

Porém as mudanças são apenas para o "trunk2"
 

 

Exemplo de uso:


procedure TForm1.sbtnGetCertClick(Sender: TObject);
begin
  if (ACBrNFe1.SSL.SSLClass is TDFeCapicom) then
    TDFeCapicom(ACBrNFe1.SSL.SSLClass).StoreLocation := CAPICOM_LOCAL_MACHINE_STORE;

  edtNumSerie.Text := ACBrNFe1.SSL.SelecionarCertificado;
end;

Bom dia.

O Post está antigo, esse código não funciona mais. Alguém tem um exemplo atual?

Welder Vieira

Análise e Densenvolvimento

Link para o comentário
Compartilhar em outros sites

  • Moderadores
  • Solution
32 minutos atrás, wellder disse:

O Post está antigo, esse código não funciona mais. Alguém tem um exemplo atual?

Tente:

ACBrNFe1.SSL.StoreLocation := slLocalMachine;

Declare a unit ACBrDFeSSL na cláusula uses.

  • Obrigado 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.