Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Fundadores
Postado

Compreendo... apenas quis deixar bem claro, porque esse assunto "já deu pano pra manga"...

Se você usar SSL.SSLXmlSignLib := xsLibXml2, não usará a obsoleta MSXML, o que alguns nesse tópico acusam de ser a causa dos problemas

A MSXML tem os seguintes problemas, e seu uso deve ser descontinuado

  • Obsoleta
  • Não suporta 64 bits
  • Não suporta SHA256
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.

  • Membros Pro
Postado

Bom dia,

Então, no caso, quando eu for utilizar AcbrNFe1.Configuracoes.Geral.SSLLib = libWinCrypt, o ideal é que eu tenha também AcbrNFe1.Configuracoes.Geral.SSLXmlSignLib = xsLibXml2, seria isso?

Se positivo, não seria interessante o próprio componente já fazer isso automaticamente, ou seja, quando eu atribuir SSLLib = libWinCrypt, o componente já mudar também SSLXmlSignLib = xsLibXml2 ?

Fiz um teste e, ao setar SSLLib = libWinCrypt, o componente seta automaticamente SSLXmlSignLib = xsMsXml.

 

Obrigado!

 

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Fundadores
Postado

Evite configurar usando AcbrNFe1.Configuracoes.Geral.SSLLib.

Ela foi criada apenas para manter compatibilidade com aplicações anteriores...

Veja esse vídeo sobre a DFeSSL, onde isso é explicado em detalhes...

 

  • Curtir 1
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.

  • Membros Pro
Postado

Boa tarde,

Obrigado Daniel. Eu não visto o vídeo. Muito bom. Realmente ajudou bastante.

O vídeo também mostrou algo que eu ainda não conhecia e achei interessante. É a opção para guardar o certificado no banco de dados e depois alimentar a propriedade SSL.DadosPFX do componente.
Aí veio uma dúvida: como eu capturo os dados do arquivo .pfx para uma string para popular o campo do banco de dados? Poderia me dar uma dica de como fazer isso?

Obrigado.

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Fundadores
Postado

Existem várias maneiras... tente algo usando TMemoryStream ou TStringStream

var
  SS: TStringStream;
begin
  SS := TStringStream.Create('');
  try
    with sqlSuaTabela do
    begin
       Open;
       TBlobField(FieldByName('CERTIFICADO_PFX')).SaveToStream( SS );
       ACBrNFe1.Configuracoes.Certificados.DadosPFX := SS.DataString;
    end;
  finally
    SS.Free;
  end;
end;

 

  • Curtir 1
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.

  • Membros Pro
Postado
16 horas atrás, Daniel Simoes disse:

Existem várias maneiras... tente algo usando TMemoryStream ou TStringStream


var
  SS: TStringStream;
begin
  SS := TStringStream.Create('');
  try
    with sqlSuaTabela do
    begin
       Open;
       TBlobField(FieldByName('CERTIFICADO_PFX')).SaveToStream( SS );
       ACBrNFe1.Configuracoes.Certificados.DadosPFX := SS.DataString;
    end;
  finally
    SS.Free;
  end;
end;

 

Bom dia,

Agradeço a dica,  mas essa seria a parte de popular o Acbr depois que o certificado já está gravado no banco de dados.

Minha dúvida seria mais relacionada a parte de alimentar o banco de dados, ou seja, colocar o certificado no banco de dados.

Eu abro o arquivo .pfx do certificado normal, como se fosse um .txt, por exemplo? E aí jogo esse  conteúdo no campo da tabela do meu BD? 

Não precisa fazer alguma decodificação? Vi alguns artigos falando em codificação base64, mas não achei nada muito esclarecedor.

Se puder me dar alguma dica nessa parte...

Obrigado!

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Membros Pro
Postado

Boa tarde,

Estou testando a seguinte configuração:

AcbrNFe1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt;
AcbrNFe1.Configuracoes.Geral.SSLHttpLib := httpWinHttp;
AcbrNFe1.Configuracoes.Geral.SSLXmlSignLib := xsLibXml2;

Está funcionando beleza, desde que os schemas estejam na mesma máquina onde está rodando o sistema.
Como eu tenho a pasta \Schemas centralizada no computador servidor e todas as demais máquinas buscam os schemas nesse servidor, aí dá o erro abaixo

if (schema = nil) then
 begin
  MsgErro := ACBrStr('Erro: Schema inválido');  <-- ocorre esse erro. Esta é a linha 366 da ACBrDFeXsLibXml2.pas
  Exit;
end;

O path dos schemas fica assim \\SERVIDOR\NomeCompartilhamento\Schemas\NFe\.
O erro ocorre quando ele vai buscar o arquivo nfe_v3.10.xsd (string final = \\SERVIDOR\NomeCompartilhamento\Schemas\NFe\ nfe_v3.10.xsd).
Verifiquei a pasta no servidor está tudo certo, compartilhada e acessível pela rede. Inclusive acessei e copiei esse arquivo nfe_v3.10.xsd vai rede, ou seja, a rede está dando acesso normal ao arquivo.

A mesma rotina, porém colocando o path do schemas = C:\MeuSistema\Schemas\NFe\, aí tudo certo, sem erro.

O problema na verdade ocorre na instrução schema := xmlSchemaParse(parser_ctxt) (linha 362 da  ACBrDFeXsLibXml2.pas). Mas essa instrução não consigo debugar.

O que poderia ser? 
Alguma dica?

Obrigado

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Fundadores
Postado

Compartilhamentos de Rede do Windows são um terror para suporte... sempre morrem sem mais nem menos...

E nem todos os métodos e componentes do Delphi suportam a nomenclatura " \\SERVIDOR\NomeCompartilhamento\ ", para nomes de arquivos...

Sugiro mapear uma Unidade de Rede, como por exemplo Z:

  • Curtir 1
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.

  • Membros Pro
Postado
47 minutos atrás, Daniel Simoes disse:

Compartilhamentos de Rede do Windows são um terror para suporte... sempre morrem sem mais nem menos...

E nem todos os métodos e componentes do Delphi suportam a nomenclatura " \\SERVIDOR\NomeCompartilhamento\ ", para nomes de arquivos...

Sugiro mapear uma Unidade de Rede, como por exemplo Z:

 

Perfeito, mudei para mapeamento e deu tudo certo.

Obrigado pela dica Daniel.

 

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Membros Pro
Postado

Boa noite,

Vou postar nesse tópico porque acho que tem relação.

Estou com o "Erro: Falha ao localizar o nó de Assinatura". 

Estou usando o seguinte trio e o certificado é A3 com cartão.
AcbrNFe1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt;
AcbrNFe1.Configuracoes.Geral.SSLHttpLib := httpWinHttp;
AcbrNFe1.Configuracoes.Geral.SSLXmlSignLib := xsLibXml2;


O erro acontece quando compila a seguinte rotina:
if (SignNode = nil) then //esta é a linha 557 da ACBrDFeXsLibXml2.pas. A sentença dessa linha é verdadeira, o que dispara o except abaixo.
    raise EACBrDFeException.Create(cErrFindSignNode);

Alguma sugestão?

Obrigado!

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Fundadores
Postado
25 minutos atrás, valdirdill disse:

Estou com o "Erro: Falha ao localizar o nó de Assinatura". 

Isso não é um erro é uma Exceção muda... observe que apenas em Debug ela ocorre... Basta configurar sua IDE para ignorar esse erro..

  • Curtir 1
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.

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