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)); }
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); }
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); }