private string CompactarXml(string xmlDelcaration) { return(Convert.ToBase64String(Compressao.Zip(new StringBuilder(xmlDelcaration).Append(Xml.LastChild.OuterXml).ToString()))); }
/// <summary> /// Serviço destinado à distribuição de informações resumidas e documentos fiscais eletrônicos de interesse de um ator, seja este pessoa física ou jurídica. /// </summary> /// <param name="ufAutor">Código da UF do Autor</param> /// <param name="documento">CNPJ/CPF do interessado no DF-e</param> /// <param name="ultNSU">Último NSU recebido pelo Interessado</param> /// <param name="nSU">Número Sequencial Único</param> /// <returns>Retorna um objeto da classe RetornoNfeDistDFeInt com os documentos de interesse do CNPJ/CPF pesquisado</returns> public RetornoNfeDistDFeInt NfeDistDFeInteresse(string ufAutor, string documento, string ultNSU, string nSU = "0") { var versaoServico = ServicoNFe.NFeDistribuicaoDFe.VersaoServicoParaString(_cFgServico.VersaoNFeDistribuicaoDFe); #region Cria o objeto wdsl para consulta var ws = CriarServico(ServicoNFe.NFeDistribuicaoDFe); ws.nfeCabecMsg = new nfeCabecMsg { cUF = _cFgServico.cUF, versaoDados = versaoServico }; #endregion #region Cria o objeto distDFeInt var pedDistDFeInt = new distDFeInt { versao = versaoServico, tpAmb = _cFgServico.tpAmb, cUFAutor = _cFgServico.cUF, distNSU = new distNSU { ultNSU = ultNSU.PadLeft(15, '0') } }; if (documento.Length == 11) { pedDistDFeInt.CPF = documento; } if (documento.Length > 11) { pedDistDFeInt.CNPJ = documento; } if (!nSU.Equals("0")) { pedDistDFeInt.consNSU = new consNSU { NSU = nSU.PadLeft(15, '0') } } ; #endregion #region Valida, Envia os dados e obtém a resposta var xmlConsulta = pedDistDFeInt.ObterXmlString(); Validador.Valida(ServicoNFe.NFeDistribuicaoDFe, _cFgServico.VersaoNFeDistribuicaoDFe, xmlConsulta); var dadosConsulta = new XmlDocument(); dadosConsulta.LoadXml(xmlConsulta); SalvarArquivoXml(DateTime.Now.ToString("yyyyMMddHHmmss") + "-ped-DistDFeInt.xml", xmlConsulta); var retorno = ws.Execute(dadosConsulta); var retornoXmlString = retorno.OuterXml; var retConsulta = new retDistDFeInt().CarregarDeXmlString(retornoXmlString); SalvarArquivoXml(DateTime.Now.ToString("yyyyMMddHHmmss") + "-distDFeInt.xml", retornoXmlString); #region Obtém um retDistDFeInt de cada evento e salva em arquivo if (retConsulta.loteDistDFeInt != null) { for (int i = 0; i < retConsulta.loteDistDFeInt.Length; i++) { string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe); string chNFe = string.Empty; if (conteudo.StartsWith("<retNFe")) { var retConteudo = FuncoesXml.XmlStringParaClasse <Classes.Servicos.DistribuicaoDFe.Schemas.resNFe>(conteudo); chNFe = retConteudo.chNFe; } else if (conteudo.StartsWith("<procEventoNFe")) { var procEventoNFeConteudo = FuncoesXml.XmlStringParaClasse <Classes.Servicos.DistribuicaoDFe.Schemas.procEventoNFe>(conteudo); chNFe = procEventoNFeConteudo.retEvento.infEvento.chNFe; } string[] schema = retConsulta.loteDistDFeInt[i].schema.Split('_'); SalvarArquivoXml(chNFe + "_" + schema[0] + ".xml", conteudo); } } #endregion return(new RetornoNfeDistDFeInt(pedDistDFeInt.ObterXmlString(), retConsulta.ObterXmlString(), retornoXmlString, retConsulta)); #endregion }
/// <summary> /// Serviço destinado à distribuição de informações resumidas e documentos fiscais eletrônicos de interesse de um ator, seja este pessoa física ou jurídica. /// </summary> /// <param name="ufAutor">Código da UF do Autor</param> /// <param name="documento">CNPJ/CPF do interessado no DF-e</param> /// <param name="ultNSU">Último NSU recebido pelo Interessado</param> /// <param name="nSU">Número Sequencial Único</param> /// <returns>Retorna um objeto da classe CTeDistDFeInteresse com os documentos de interesse do CNPJ/CPF pesquisado</returns> public async Task <RetornoCteDistDFeInt> CTeDistDFeInteresse(string ufAutor, string documento, string ultNSU = "0", string nSU = "0") { var versaoServico = ConfiguracaoServico.Instancia.VersaoLayout; #region Cria o objeto wdsl para consulta var ws = WsdlFactory.CriaWsdlCTeDistDFeInteresse(); #endregion #region Cria o objeto distCTeInt var pedDistDFeInt = new distDFeInt { versao = "1.00", tpAmb = ConfiguracaoServico.Instancia.tpAmb, cUFAutor = ConfiguracaoServico.Instancia.cUF }; if (documento.Length == 11) { pedDistDFeInt.CPF = documento; } if (documento.Length > 11) { pedDistDFeInt.CNPJ = documento; } pedDistDFeInt.distNSU = new distNSU { ultNSU = ultNSU.PadLeft(15, '0') }; if (!nSU.Equals("0")) { pedDistDFeInt.consNSU = new consNSU { NSU = nSU.PadLeft(15, '0') }; pedDistDFeInt.distNSU = null; } #endregion #region Valida, Envia os dados e obtém a resposta pedDistDFeInt.ValidaSchema(); var xmlConsulta = pedDistDFeInt.ObterXmlString(); var dadosConsulta = new XmlDocument(); dadosConsulta.LoadXml(xmlConsulta); string path = DateTime.Now.ParaDataHoraString() + "-ped-DistDFeInt.xml"; SalvarArquivoXml(path, xmlConsulta); XmlNode retorno = await ws.Execute(dadosConsulta); var retornoXmlString = retorno.OuterXml; var retConsulta = new retDistDFeInt().CarregarDeXmlString(retornoXmlString); SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-distDFeInt.xml", retornoXmlString); #region Obtém um retDistDFeInt de cada evento e salva em arquivo if (retConsulta.loteDistDFeInt != null) { for (int i = 0; i < retConsulta.loteDistDFeInt.Length; i++) { string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe); string chCTe = string.Empty; if (conteudo.StartsWith("<cteProc")) { var retConteudo = FuncoesXml.XmlStringParaClasse <CTe.Classes.cteProc>(conteudo); chCTe = retConteudo.protCTe.infProt.chCTe; } else if (conteudo.StartsWith("<procEventoCTe")) { var procEventoNFeConteudo = FuncoesXml.XmlStringParaClasse <Classes.Servicos.DistribuicaoDFe.Schemas.procEventoCTe>(conteudo); chCTe = procEventoNFeConteudo.eventoCTe.infEvento.chCTe; } string[] schema = retConsulta.loteDistDFeInt[i].schema.Split('_'); if (chCTe == string.Empty) { chCTe = DateTime.Now.ParaDataHoraString() + "_SEMCHAVE"; } SalvarArquivoXml(chCTe + "-" + schema[0] + ".xml", conteudo); } } #endregion return(new RetornoCteDistDFeInt(pedDistDFeInt.ObterXmlString(), retConsulta.ObterXmlString(), retornoXmlString, retConsulta)); #endregion }