Ir para conteúdo
  • Cadastre-se

areacentral

Membros
  • Total de ítens

    4
  • Registro em

  • Última visita

Tudo que areacentral postou

  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...
The popup will be closed in 10 segundos...