public async Task <retEnvEvento> ManifestarAsync(ChaveFiscal chaveNFe, eTipoEventoNFe tipoEvento, string justificativa = null) { if (tipoEvento != eTipoEventoNFe.CienciaOperacao && tipoEvento != eTipoEventoNFe.ConfirmacaoOperacao && tipoEvento != eTipoEventoNFe.DesconhecimentoOperacao && tipoEvento != eTipoEventoNFe.OperacaoNaoRealizada) { throw new Exception("Evento não permitido nesse serviço"); } var xmlEvento = GerarXmlEvento(chaveNFe.Chave, tipoEvento, justificativa); var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ped-eve.xml", config)); await storage.SaveAsync(arqEnv, xmlEvento); await storage.SaveAsync($"{DateTime.Now.Ticks}-ped-eve.xml", xmlEvento); Schemas.ValidarSchema(eTipoServico.ManifestacaoDestinatario, xmlEvento, config); var envelope = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ManifestacaoDestinatario, xmlEvento); var sefazUrl = FabricarUrl.ObterUrl(eTipoServico.ManifestacaoDestinatario, config.TipoAmbiente, eModeloDocumento.NFe, eUF.AN); var xmlRetorno = await transmitir.TransmitirAsync(sefazUrl, envelope); var xmlRetLimpo = Soap.LimparEnvelope(xmlRetorno, "retEnvEvento").OuterXml; var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ret-eve.xml", config)); await storage.SaveAsync(arqRet, xmlRetLimpo); var retEnvEvento = XmlUtils.XmlStringParaClasse <retEnvEvento>(xmlRetLimpo); return(retEnvEvento); }
public async Task <IRetornoAutorizacao> Autorizar(IList <NFe> nfes, int idLote = 0) { new ValidarNFeAutorizacao(nfes, cfgServico).Validar(); new TratarNFeAutorizacao(ref nfes, cfgServico).Tratar(); if (idLote <= 0) { idLote = new Random().Next(10000000, 99999999); } var nfesAssinadas = new List <NFe>(); foreach (var nfe in nfes) { var nfeAssinada = nfe.Assinar(ObterCertificado.Obter(cfgServico.ConfigCertificado)); var xml = XmlUtils.ClasseParaXmlString <NFe>(nfeAssinada); xml = xml.Replace("xmlns=\"http://www.portalfiscal.inf.br/nfe\"", string.Empty); Schemas.ValidarSchema(eTipoServico.AutorizarNFe, xml, cfgServico); nfesAssinadas.Add(nfeAssinada); } var mod = nfes.Select(x => x.infNFe.ide.mod) .Distinct() .SingleOrDefault() .Parse(); var versaoServico = cfgServico.VersaoAutorizacaoNFe.Descricao(); var enviNFe = new enviNFe(versaoServico, idLote, IndicadorSincronizacao.Sincrono, nfesAssinadas); var xmlEnviNFe = XmlUtils.ClasseParaXmlString <enviNFe>(enviNFe); return(await Autorizar(xmlEnviNFe, mod)); }
private async Task <string> PrepararTransmissao(distDFeInt distDFeInt, bool validarXmlConsulta = true) { var xml = XmlUtils.ClasseParaXmlString <distDFeInt>(distDFeInt); if (validarXmlConsulta) { Schemas.ValidarSchema(eTipoServico.NFeDistribuicaoDFe, xml, Configuracao); } var nomeArqEnv = $"{Configuracao.Emitente.CNPJ ?? Configuracao.Emitente.CPF}-{DateTime.Now.Ticks}-ped-DistDFeInt.xml"; var arqEnv = Path.Combine("Logs", nomeArqEnv); var stRet = await storage.SaveAsync(arqEnv, xml); var envelope = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.NFeDistribuicaoDFe, xml); var sefazUrl = FabricarUrl.ObterUrl(eTipoServico.NFeDistribuicaoDFe, Configuracao.TipoAmbiente, eModeloDocumento.NFe, eUF.AN); var retorno = await Transmitir.TransmitirAsync(sefazUrl, envelope); var retornoLimpo = Soap.LimparEnvelope(retorno, "retDistDFeInt").OuterXml; var nomeArqRetorno = $"{Configuracao.Emitente.CNPJ ?? Configuracao.Emitente.CPF}-{DateTime.Now.Ticks}-retDistDFeInt.xml"; var arqRet = Path.Combine("Logs", nomeArqRetorno); await storage.SaveAsync(arqRet, retornoLimpo); return(retornoLimpo); }