Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa Tarde, na versão anterior Trunk da NFe exista a possibilidade de selecionar o certificado pela chamada "NFe.Configuracoes.Certificados.SelecionarCertificado" notei que agora no Trunk2 essa função não exite mais. Existe alguma outra maneira de chamar essa função?

João Paulo F. Bellucci

Analista e Programador

  • 3 semanas depois ...
Postado

Anteriormente no Trunk usava no sistema apenas a linha

ACBrNFe.Configuracoes.Certificados.NumeroSerie

 

Ao migrar para o trunk 2 estou obtendo erro de certificado não encontrado.

 

Aqui uso SSLLib configurado para capicom o certificado é A1 e está instalado no windows corretamente... preciso informar mais alguma coisa?

Grato.

Postado

Fiz novos testes...

Usando: ACBrNFe.Configuracoes.Certificados.NumeroSerie obtive:  Exception class EACBrDFeException with message 'Certificado Digital não encontrado!'.

 

Usando: ACBrNFe.SSL.NumeroSerie obtive:  Exception class EACBrDFeException with message 'Certificado Digital não encontrado!'.

Novamente, uso Delphi 2010, atualizaei do trunk2 as 14:30 de hj, uso um certificado A1 serasa, no windows xp, com o componente ACBrNFe configurado com SSLLib = libCapicom

Com a nova propriedade SSL é necessario informar algo mais ao componente?

Postado (editado)

Amigo para você selecionar um Certificado use:

ACBrNFe1.SSL.SelecionarCertificado ;

para checar se o Certificado foi carregado

  if ACBrNFe1.SSL.CertificadoLido then
     c_Certificado.text := ACBrNFe1.SSL.CertNumeroSerie ;

para associar o certificado ao componente:

ACBrNFe1.SSL.NumeroSerie := c_Certificado.text ;

ACBrNFe1.SSL.CarregarCertificado ;

e por a vai.

Solivan!

 

Editado por Solivan
  • Curtir 4
  • Obrigado 1

Sistema de Automação Comercial para diversos segmentos
NF-e, NFC-e, SPED Fiscal - www.arenasoft.com.br

Postado

Olá Solivan, entendi, mas tenho uma outra questão, anteriormente bastava configurar ACBrNFe.Configuracoes.Certificados.NumeroSerie, eu trazia os dados do cliente do BD, alimentava a série e pronto, não se pedia mais nada do certificado, além claro da senha.

Desta forma como tu me sugere (pelo que vejo é a única possível agora) o usuário terá que escolher o certificado e depois inserir a senha.

Gostaria de saber se no novo código é possível carregar o certificado sem que se abra uma tela para que o usuário selecione o certificado, já que anteriormente funcionava assim..

  • Moderadores
Postado

Para configurar o certificado que vai utilizar você usa:

ACBrNFe.Configuracoes.Certificados.NumeroSerie := <Numero de serie>;
ACBrNFe.Configuracoes.Certificados.Senha := <Senha>;

 

Para acessar dados do certificado utiliza ACBrNFe.SSL. e a propriedade que quer acessar.

Para selecionar o certificado utiliza: ACBrNFe.SSL.SelecionarCertificado, vai abrir a caixa de seleção do certificado retornando o número de série para você gravar ou usar.

  • Curtir 1

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Certo, então quando for necessário enviar um evento ou disparar uma requisição ao DistribuicaoDFe por exemplo, para que o certificado seja acessado eu tenho que previamente usar o ACBrNFe.SSL.SelecionarCertificado?

Só estou tentando entender pq antes a única configuração que fazia era ACBrNFe.Configuracoes.certificados.NumeroSerie, e quando eu disparava qualquer método que utilizava o certificado ele abria direto a tela para digitar a senha/pin, ou com alguns certificados A1 nem a senha pedia(creio que por uma configuração), até então entendia que o componente carregava o certificado baseado na informação do número de série que eu lhe fornecia, agora eu tenho que explicitamente fazer o usuário selecionar um certificado? Ou entendi algo errado?

Obrigado pela ajuda

Postado (editado)

Certo aí, entra que tive a Exception que citei lá em cima "Certificado digital não encontrado!"... Testei inclusive em outros computadores, com outros certificados e o erro persistiu, ou seja não foi algo da instalação ou do certificado em si

Editado por Tiago Ravache
correção ortográfica
  • Moderadores
Postado

Aqui eu tenho isso em produção funcionando perfeitamente e não vi outros relatos no fórum quanto a isso, então com certeza o componente está correto a não ser que o seu repositório tenha sido alterado.

Outra provável causa pode ser a instalação do certificado ou a falta da capicom correta.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Outra provável causa pode ser a instalação do certificado ou a falta da capicom correta.

Sobre certificado, testei com mais de um certificado, em mais de um computador, e estou usando a capicom fornecida com o trunk2

O AV persiste...

Postado

Pior que não cara, tudo verde acabei de verificar...

Não sei o que fazer com isso tbm, com o trunk funciona, no trunk2 não, foi a única alteração... como o trunk2 se tornará o oficial gostaria de resolver para ficar atualizado com o projeto mas parece que não vai ter como...

Postado

No momento tenho 2 VM's as duas são extamente iguais(mesmo windows o xp sp3, mesmo delphi o 2010, mesmo certificado), salvo pelo trunk/trunk2. O mesmo código roda no trunk mas não roda no trunk2

Então fiz um novo teste aqui, na VM com o trunk2, coloquei o número de série do certificado direto no object inspector e tudo funcionou perfeitamente, o problema de "certificado não encontrado" ocorre apenas quando eu tento atribuir o número de série em tempo de execução, depois do compontente já ter sido criado (é criado junto com o form), creio que esteja por aí o problema, será que isso lança alguma luz nessa situação?

 

Postado

Bem, aqui segue esses passos:

O cliente escolhe a empresa que ele vai lidar, ao escolher essa empresa carrego algumas informações do cadastro, dentre elas cnpj, numero de serie do certificado e etc...

Com estas informações configuro o acbr.

E uso as funcionalidades como por exemplo envio de eventos, consulta ao DistribuicaoDFe e por aí vai.

Isso com o trunk está funcionando, quando mudei para o trunk2 o mesmo código parou de funcionar, não digo que não seja algo aqui, mas como está em produção com o trunk, mesmo que seja uma falha no meu código é decorrente da atualização, ou seja estou deixando passar algum detalhe, o que me intriga é o que o Regys comentou que nessa parte não houve alterações... e quando abri o projeto com o acbr do trunk2 as únicas alterações foram relacionadas a propriedades como a PathSalvar, a nomenclatura do enumerado de schemas e nome de métodos como o EnviarEvento() que antes era EnviarEventoNFe()... Ainda nesse sentido fiz o teste e configurei o acbr em tempo de desenvolvimento com os dados de uma empresa em específico, e quando rodei meu sistema funcionou perfeitamente, só não funciona qdo tento atribuir em runtime.

Pode ser de valia citar que a configuração do acbr não ocorre durante o FormCreate ou FormShow, é posterior(já que o cliente precisa antes selecionar a empresa que quer trabalhar). Com todas essas informações, isso dá alguma idéia do que possa estar ocorrendo, há algo nos passos que citei que podem estar causando o meu problema?

Grato pela ajuda Srs.

Postado (editado)

Não consegui nem usar o Demo, fecha sozinho antes que eu realize qualquer ação...

Como não consegui testar com o demo fiz um programinha de teste, bem simples apenas para consulta status do serviço testando o certificado, tem o seguinte código implementado
 

procedure TForm2.FormShow(Sender: TObject);
begin
  Query.Open;//a query me traz apenas um registro, o do cliente que tenho o certificado instalado aqui.
  ACBrNFe1.Configuracoes.Certificados.NumeroSerie := Query.FieldByName('Certificado_Serie').AsString;
  //se entendi o que o Regys postou essa linha basta para configurar o certificado no ACBr
end;

procedure TForm2.BtConsultaClick(Sender: TObject);
begin
    ACBrNFe1.WebServices.StatusServico.Executar;
    ShowMessage('Foi! - '+ACBrNFe1.WebServices.StatusServico.xMotivo);
end;

Continuo obtendo o erro de certificado não encontrado, esse código no trunk funciona, o que posso estar esquecendo?

Editado por Tiago Ravache
Postado (editado)


Bom dia pessoal, desculpem ressucitar o tópico mas é pq encontrei o porquê do meu problema aqui vai a explicação e solução:

No meu código configuro o componente assim:

ACBrNFe1.Configuracoes.Certificados.NumeroSerie := Query.FieldByName('Certificado_Serie').AsString;

Isso executa o código abaixo:

procedure TCertificadosConf.SetNumeroSerie(const AValue: String);
begin
  if FNumeroSerie = AValue then Exit;
  FNumeroSerie := Trim(UpperCase(StringReplace(AValue, ' ', '', [rfReplaceAll])));
  TACBrDFe(FConfiguracoes.Owner).SSL.NumeroSerie := AValue;
end;

O problema está no seguinte FNumero recebe AValue após este ser modificado para maiúsculas e ter os espaços removidos, ao passo que SSL.NumeroSerie recebe apenas AValue, lá na frente quando é necessário usar o certificado na unit ACBrDFeCapicom.pas na linha 283 existe esse código:

if Cert.SerialNumber = FpDFeSSL.NumeroSerie then

Bem no meu caso esses dois caras não estavam iguais Cert.SerialNumber continha a série formatada em maiúsculas e sem espaços e FpDFeSSL.NumeroSerie tinha apenas aquele AValue sem formatação alguma algo como - e8 3f b3 00 f1 b5 rh 4c - quando na verdade deveria ter - E83FB300F1B5RH4C - para solucionar eu simplesmente adicionei na configuração do componente o seguinte:

ACBrNFe1.Configuracoes.Certificados.NumeroSerie := Trim(UpperCase(StringReplace(Query.FieldByName('Certificado_Serie').AsString, ' ', '', [rfReplaceAll])));

E tudo voltou a funcionar perfeitamente!

 

Apesar do problema estar de fato na maneira como eu configurava achei válido postar todo o caminho que percorri para encontrar o erro e deixar postado aqui para o caso de algum colega passar pelo mesmo problema poder testar esses detalhes.

 

Muito obrigado a todos pela ajuda!

Editado por Tiago Ravache
ortografia
  • Curtir 3
  • Este tópico foi criado há 2585 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.