Пример #1
0
        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));
        }
Пример #2
0
        public void VerificarCnpj()
        {
            var cert    = ObterCertificado.Obter(configServico.ConfigCertificado);
            var cpfCnpj = ObterCertificado.ExtrairCNPJArquivo(cert);

            System.Console.WriteLine(cert.Validade());
            Assert.IsTrue(DateTime.Now < cert.NotAfter);
        }
        private string GerarXmlEvento(string chaveAcesso, eTipoEventoNFe tipoEvento, string justificativa = null)
        {
            if (tipoEvento == eTipoEventoNFe.OperacaoNaoRealizada && justificativa == null)
            {
                throw new ArgumentNullException("Justificativa deve ser informada");
            }

            if (tipoEvento != eTipoEventoNFe.OperacaoNaoRealizada)
            {
                justificativa = null;
            }

            var infEvento = new infEventoEnv
            {
                chNFe      = chaveAcesso,
                CNPJ       = config.Emitente.CNPJ,
                CPF        = config.Emitente.CPF,
                cOrgao     = eUF.AN,
                dhEvento   = DateTime.Now,
                nSeqEvento = 1,
                tpAmb      = config.TipoAmbiente,
                tpEvento   = tipoEvento,
                verEvento  = config.VersaoManifestacaoDestinatario.Descricao(),
                Id         = "ID" + ((int)tipoEvento) + chaveAcesso + nSeqEvento.ToString().PadLeft(2, '0'),
                detEvento  = new detEvento()
                {
                    versao     = config.VersaoManifestacaoDestinatario.Descricao(),
                    descEvento = tipoEvento.Descricao().RemoverAcentos()
                }
            };

            var evento = new evento
            {
                versao    = config.VersaoManifestacaoDestinatario.Descricao(),
                infEvento = infEvento
            };

            evento.Assinar(ObterCertificado.Obter(config.ConfigCertificado), config.ConfigCertificado.SignatureMethodSignedXml, config.ConfigCertificado.DigestMethodReference);

            var pedEvento = new envEvento
            {
                versao = config.VersaoManifestacaoDestinatario.Descricao(),
                idLote = 1,
                evento = new List <evento> {
                    evento
                }
            };

            var xmlEvento = XmlUtils.ClasseParaXmlString <envEvento>(pedEvento);

            return(xmlEvento);
        }
        private inutNFe FabricarInutNFe(eTipoAmbiente tpAmb, eUF uf, int ano, string cnpj, eModeloDocumento modelo, int serie, int numeroInicial, int numeroFinal, string justificativa)
        {
            //Zion.Common.Assertions.ZionAssertion.StringHasMinLen(justificativa, 15, "Justificativa deve conter entre 15 e 255 caracteres");
            //Zion.Common.Assertions.ZionAssertion.StringHasMaxLen(justificativa, 255, "Justificativa deve conter entre 15 e 255 caracteres");

            string versaoServico = cfgServico.VersaoInutilizacaoNFe.Descricao();

            var pedInutilizacao = new inutNFe
            {
                versao  = versaoServico,
                infInut = new infInutEnv
                {
                    tpAmb  = tpAmb,
                    cUF    = uf,
                    ano    = ano,
                    CNPJ   = cnpj,
                    mod    = modelo,
                    serie  = serie,
                    nNFIni = numeroInicial,
                    nNFFin = numeroFinal,
                    xJust  = justificativa
                }
            };

            var numId = string.Concat(
                (int)pedInutilizacao.infInut.cUF,
                pedInutilizacao.infInut.ano.ToString("D2"),
                pedInutilizacao.infInut.CNPJ, (int)pedInutilizacao.infInut.mod,
                pedInutilizacao.infInut.serie.ToString().PadLeft(3, '0'),
                pedInutilizacao.infInut.nNFIni.ToString().PadLeft(9, '0'),
                pedInutilizacao.infInut.nNFFin.ToString().PadLeft(9, '0')
                );

            pedInutilizacao.infInut.Id = "ID" + numId;

            pedInutilizacao.Assinar(ObterCertificado.Obter(cfgServico.ConfigCertificado));

            return(pedInutilizacao);
        }
        public virtual async Task <string> TransmitirAsync(UrlSefaz sefazUrl, XmlDocument envelope)
        {
            logger.LogInformation($"Iniciando transmissão Sefaz [{sefazUrl.Url}]");
            HttpWebRequest webRequest = SoapEnvelopeFabrica.CriarWebRequest(sefazUrl.Url, "application/soap+xml;charset=utf-8");

            Soap.InserirSoapEnvelopeWebRequest(envelope, webRequest);

            webRequest.ClientCertificates.Add(ObterCertificado.Obter(configuracao.ConfigCertificado));

            IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);

            string soapResult;

            using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
            {
                using StreamReader rd = new StreamReader(webResponse.GetResponseStream());
                soapResult            = await rd.ReadToEndAsync();
            }

            logger.LogInformation($"Encerrando transmissão Sefaz");
            return(soapResult);
        }
Пример #6
0
        private async Task <retEnvEvento> Cancelar(List <evento> eventos, eModeloDocumento modeloDoc)
        {
            var pedEvento = new envEvento
            {
                versao = versao,
                idLote = 1,
                evento = eventos
            };

            foreach (var eventoTmp in eventos)
            {
                eventoTmp.infEvento.Id = "ID" + ((int)eventoTmp.infEvento.tpEvento) + eventoTmp.infEvento.chNFe +
                                         eventoTmp.infEvento.nSeqEvento.ToString().PadLeft(2, '0');

                var _certificado = ObterCertificado.Obter(cfgServico.ConfigCertificado);
                eventoTmp.Assinar(_certificado, cfgServico.ConfigCertificado.SignatureMethodSignedXml, cfgServico.ConfigCertificado.DigestMethodReference);
            }

            var xmlEvento = XmlUtils.ClasseParaXmlString <envEvento>(pedEvento);

            var arqEnv = Path.Combine("Logs", $"{DateTime.Now.Ticks}-ped-eve.xml");
            await storage.SaveAsync(arqEnv, xmlEvento);

            var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.CancelarNFe, cfgServico.TipoAmbiente, modeloDoc, cfgServico.UF);
            var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.CancelarNFe, xmlEvento);

            var retornoXmlString = await transmitir.TransmitirAsync(sefazUrl, envelope);

            var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retEnvEvento").OuterXml;

            var arqRet = Path.Combine("Logs", $"{DateTime.Now.Ticks}-ret-eve.xml");
            await storage.SaveAsync(arqRet, retornoXmlStringLimpa);

            var retEnvEvento = new retEnvEvento().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento);

            return(retEnvEvento);
        }
        public async Task <retEnvEvento> TransmitirCorrecao(IList <InfoCartaCorrecao> infos)
        {
            if (infos == null || infos.Count <= 0)
            {
                throw new Exception("Informações da NFe não encontrada");
            }

            if (infos.Count > 20)
            {
                throw new Exception("No máximo 20 NFes podem ser Corrigidas");
            }


            List <evento> eventos = new List <evento>();

            foreach (var item in infos)
            {
                var chave      = item.ChaveAcesso;
                var correcao   = item.Correcao;
                var nSeqEvento = item.nSeqEvento;
                chave = chave.Replace("NFe", "");
                eModeloDocumento _modeloDocumento = chave.Substring(20, 2).ModeloDocumento();

                if (item.Correcao.Length < 15 || item.Correcao.Length > 1000)
                {
                    throw new FalhaValidacaoException("A descrição da correção deve conter entre 15 e 1000 caracteres");
                }

                if (_modeloDocumento != eModeloDocumento.NFe)
                {
                    throw new FalhaValidacaoException("Somente NFe pode ter Carta Correção");
                }

                var infEvento = new infEventoEnv
                {
                    chNFe      = chave,
                    CNPJ       = cfgServico.Emitente.CNPJ,
                    CPF        = cfgServico.Emitente.CPF,
                    cOrgao     = cfgServico.UF,
                    dhEvento   = DateTime.Now,
                    nSeqEvento = nSeqEvento,
                    tpAmb      = cfgServico.TipoAmbiente,
                    tpEvento   = eTipoEventoNFe.NFeCartaCorrecao,
                    verEvento  = _versao,
                    detEvento  = new detEvento()
                    {
                        versao     = _versao,
                        descEvento = "Carta de Correção",
                        xCorrecao  = correcao
                    }
                };
                var evento = new evento {
                    versao = _versao, infEvento = infEvento
                };
                eventos.Add(evento);
            }

            foreach (var eventoTmp in eventos)
            {
                eventoTmp.infEvento.Id = "ID" + ((int)eventoTmp.infEvento.tpEvento) + eventoTmp.infEvento.chNFe +
                                         eventoTmp.infEvento.nSeqEvento.ToString().PadLeft(2, '0');

                var _certificado = ObterCertificado.Obter(cfgServico.ConfigCertificado);
                eventoTmp.Assinar(_certificado, cfgServico.ConfigCertificado.SignatureMethodSignedXml, cfgServico.ConfigCertificado.DigestMethodReference);
            }

            var pedEvento = new envEvento
            {
                versao = _versao,
                idLote = 1,
                evento = eventos
            };

            var xmlEvento = XmlUtils.ClasseParaXmlString <envEvento>(pedEvento);

            var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ped-eve.xml", cfgServico));
            await storage.SaveAsync(arqEnv, xmlEvento);

            var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.CartaCorrecao, cfgServico.TipoAmbiente, eModeloDocumento.NFe, cfgServico.UF);
            var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.CartaCorrecao, xmlEvento);

            var retornoXmlString = await transmitir.TransmitirAsync(sefazUrl, envelope);

            var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retEnvEvento").OuterXml;

            var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ret-eve.xml", cfgServico));
            await storage.SaveAsync(arqRet, retornoXmlStringLimpa);

            var retorno = new retEnvEvento().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento);

            return(retorno);
        }