Ir para conteúdo
  • Cadastre-se

areacentral

Membros
  • Total de ítens

    4
  • Registro em

  • Última visita

Contact Methods

  • Website URL
    http://www.areacentral.com.br

areacentral's Achievements

Rookie

Rookie (2/14)

  • First Post
  • Week One Done
  • One Month Later
  • One Year In
  • Conversation Starter

Recent Badges

1

Reputação

  1. Leonardo, quero verificar a data de vencimento antes de associar o certificado selecionado, o método SelecionarCertificado me força a chamar GetCertificado para ter a referência de ICertificate2 e ai caso não seja o certificado correto eu já perdi a referência de ICertificate2 anterior, isto pode acontecer quando o usuário vai atualizar o certificado por exemplo. Há alguma razão para que o método SelecionarCertificado não associe o certificado selecionado a PCertCarregado? E Então ao chamar GetCertificado a referência já estaria associada.
  2. Olá Pessoal, bom dia! Precisava de alguma forma selecionar o certificado, mas antes de associar o número de serie queria validar se o usuário selecionou o certificado correto, se o cnpj conferia com o cadastro da empresa, se está vencido ou não, então criei um segundo método SelecionarCertificado2 que retorna a referência de ICertificate2 ao invés do número de série. Com isso consigo validar, antes de o certificado ser de fato associado ao componente da Nfe: function TCertificadosConf.SelecionarCertificado2: ICertificate2; var Store : IStore3; Certs : ICertificates2; Certs2 : ICertificates2; Cert : ICertificate2; begin Store := CoStore.Create; Store.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_STORE_NAME, CAPICOM_STORE_OPEN_READ_ONLY); Certs := Store.Certificates as ICertificates2; Certs2 := Certs.Select('Certificado(s) Digital(is) disponível(is)', 'Selecione o Certificado Digital para uso no aplicativo', false); if not(Certs2.Count = 0) then begin Cert := IInterface(Certs2.Item[1]) as ICertificate2; //Não alterar o número de série, quem utilizar este método deve fazer isso manualmente para associar o certificado ao componente //FNumeroSerie := Cert.SerialNumber; //FDataVenc := Cert.ValidToDate; //FSubjectName := Cert.SubjectName; end; Result := Cert; end; Fica minha sugestão para adicionar a Biblioteca, mas para evitar redundância de código, seria melhor refatorar o método SelecionarCertificado para utilizar o SelecionarCertificado2: function TCertificadosConf.SelecionarCertificado: AnsiString; var Cert : ICertificate2; begin Cert := SelecionarCertificado2; if (Cert <> nil) then begin FNumeroSerie := Cert.SerialNumber; FDataVenc := Cert.ValidToDate; FSubjectName := Cert.SubjectName; Result := FNumeroSerie; end; end; Exemplo de utilização: procedure TFrmCertificado.btnSelecionarClick(Sender: TObject); var Cert: ICertificate2; begin Cert := ACBRNfe1.Configuracoes.Certificados.SelecionarCertificado2; if (Cert <> nil) then begin if (Cert.ValidToDate < Today) then raise Exception.Create('Certificado vencido!'); ACBRNfe1.Configuracoes.Certificados.NumeroSerie := Cert.SerialNumber; ACBRNfe1.Configuracoes.Certificados.GetCertificado; end; end;
  3. Olá Italo, Está resolvido, atualizei os pacotes, recompilei a biblioteca e funcionou tudo certo! Estava com problemas também no webservice de Download da Nfe, vi que já foi comentado para não utilizar a url da estadual, então também tá resolvido isso. Valeu, obrigado!
  4. Pessoal, estava tentando manifestar ciência da operação no ambiente nacional: Nfe.EventoNFe.Evento.Clear; with Nfe.EventoNFe.Evento.Add do begin infEvento.cOrgao := 91;//NotaUtil.UFtoCUF(Uf); infEvento.chNFe := Chave; infEvento.CNPJ := Cnpj; infEvento.dhEvento := Now; infEvento.tpEvento := teManifDestCiencia; end; Nfe.EnviarEventoNFe(1); Porém, sempre recebia Rejeicao: O autor do evento diverge do destinatario da NF-e Percebi que não estava direcionando para a url do ambiente nacional. A TNFeEnvEvento.DefinirURL coloca o FLayout := LayNFeEventoAN E na NotaUtil.GetURL é inicialmente retornado a url do ambiente nacional, mas em seguida no mesmo método é depois retornado a url do ambiente estadual, então fiz a seguinte alteração no NotaUtil.GetURL: class function NotaUtil.GetURL(const AUF, AAmbiente, FormaEmissao : Integer; ALayOut: TLayOut; AModeloDF: TpcnModeloDF = moNFe; AVersaoDF: TpcnVersaoDF = ve200): WideString; begin case FormaEmissao of 1,2,4,5,9 : begin case ALayOut of LayNfeEnvDPEC : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://www.nfe.fazenda.gov.br/SCERecepcaoRFB/SCERecepcaoRFB.asmx', 'https://hom.nfe.fazenda.gov.br/SCERecepcaoRFB/SCERecepcaoRFB.asmx'); LayNfeConsultaDPEC : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://www.nfe.fazenda.gov.br/SCEConsultaRFB/SCEConsultaRFB.asmx', 'https://hom.nfe.fazenda.gov.br/SCEConsultaRFB/SCEConsultaRFB.asmx'); LayNFeEventoAN : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://www.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx', 'https://hom.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx '); LayNfeConsNFeDest : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://www.nfe.fazenda.gov.br/NFeConsultaDest/NFeConsultaDest.asmx', 'https://hom.nfe.fazenda.gov.br/NFeConsultaDest/NFeConsultaDest.asmx'); LayNfeDownloadNFe : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://www.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx', 'https://hom.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx'); LayDistDFeInt : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://www1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', 'https://hom.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx'); https://www1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx end; if (ALayOut <> LayNFeEventoAN) then //Adicionei esta verificação begin case AUF of ... end; end; end; end; Bom, resolveu, me retornou a url do ambiente nacional, mas não tenho certeza se seria a melhor solução, e se for, para que seja adicionado aos fontes.
×
×
  • 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.

The popup will be closed in 10 segundos...