public async Task <retDistDFeInt> ConsultarPorNSUAsync(string nsu, bool validarXmlConsulta = true) { logger.LogInformation($"Consultar documentos destinados por NSU {nsu}"); if (string.IsNullOrEmpty(nsu)) { throw new ArgumentNullException(nameof(nsu)); } if (nsu.Length > 15) { throw new ArgumentOutOfRangeException(nameof(nsu)); } nsu = nsu.PadLeft(15, '0'); var distDFeInt = new distDFeInt { Versao = "1.01", Cnpj = Configuracao.Emitente.CNPJ, consNSU = new consNSU { NSU = nsu }, cUFAutor = ((int)Configuracao.UF).ToString(), TpAmb = Configuracao.TipoAmbiente }; var retorno = await PrepararTransmissao(distDFeInt, validarXmlConsulta); var retDistDFeInt = XmlUtils.XmlStringParaClasse <retDistDFeInt>(retorno); return(retDistDFeInt); }
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); }
static async Task Main(string[] args) { Console.WriteLine("Insira o caminho do certificado[sem aspas]:"); var pathCertificado = Console.ReadLine(); Console.WriteLine("Insira a senha do certificado:"); var senha = Console.ReadLine(); var certificate = new X509Certificate2(pathCertificado, senha); INFeDistribuicaoDFe client = HttpsSoapClientFactory.NFeDistribuicaoDFe(certificate); var dfe = new distDFeInt { cUFAutor = "23", CNPJ = certificate.FriendlyName.Split(':')[1], tpAmb = "1", versao = "1.01", distNSU = new distNSU { ultNSU = "0" } }; try { var nfeDistDFeInteresseResponse = await client.NFeDistDFeInteresseAsync(XElement.Parse(dfe.ToXml())); Console.WriteLine(nfeDistDFeInteresseResponse.Body.NFeDistDFeInteresseResult.ToString()); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
private CTeDistDFeInteresse InicializaCTeDistDFeInteresse(string documento, string ultNSU, string nSU, out distDFeInt pedDistDFeInt, out XmlDocument dadosConsulta, ConfiguracaoServico configuracaoServico) { var versaoServico = configuracaoServico.VersaoLayout; #region Cria o objeto wdsl para consulta var ws = WsdlFactory.CriaWsdlCTeDistDFeInteresse(configuracaoServico); #endregion #region Cria o objeto distCTeInt pedDistDFeInt = new distDFeInt { versao = "1.00", tpAmb = configuracaoServico.tpAmb, cUFAutor = configuracaoServico.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 pedDistDFeInt.ValidaSchema(configuracaoServico); var xmlConsulta = pedDistDFeInt.ObterXmlString(); dadosConsulta = new XmlDocument(); dadosConsulta.LoadXml(xmlConsulta); string path = DateTime.Now.ParaDataHoraString() + "-ped-DistDFeInt.xml"; SalvarArquivoXml(path, xmlConsulta, configuracaoServico); return(ws); }
public static void SalvarXmlEmDisco(this distDFeInt pedDistDFeInt, string arquivoSalvar) { var instanciaServico = ConfiguracaoServico.Instancia; if (instanciaServico.NaoSalvarXml()) { return; } var arquivoXml = instanciaServico.DiretorioSalvarXml + arquivoSalvar; FuncoesXml.ClasseParaArquivoXml(pedDistDFeInt, arquivoXml); }
public static void ValidaSchema(this distDFeInt pedDistDFeInt) { var xmlValidacao = pedDistDFeInt.ObterXmlString(); if (pedDistDFeInt.versao.Equals("1.00")) { Validador.Valida(xmlValidacao, "retDistDFeInt_v1.00.xsd"); } else if (pedDistDFeInt.versao.Equals("1.10")) { Validador.Valida(xmlValidacao, "retDistDFeInt_v1.10.xsd"); } else { throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + "versão 1.00 é 1.10"); } }
public async Task <retDistDFeInt> ConsultarPorChaveAsync(ChaveFiscal chaveNFe, bool validarXmlConsulta = true) { var distDFeInt = new distDFeInt { Versao = "1.01", Cnpj = Configuracao.Emitente.CNPJ, consChNFe = new consChNFe { ChNFe = chaveNFe.Chave }, cUFAutor = ((int)Configuracao.UF).ToString(), TpAmb = Configuracao.TipoAmbiente }; var retorno = await PrepararTransmissao(distDFeInt, validarXmlConsulta); var retDistDFeInt = XmlUtils.XmlStringParaClasse <retDistDFeInt>(retorno); return(retDistDFeInt); }
/// <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> /// Recebe um objeto ExtdistDFeInt e devolve a string no formato XML /// </summary> /// <param name="pedDistDFeInt">Objeto do Tipo distDFeInt</param> /// <returns>string com XML no do objeto distDFeInt</returns> public static string ObterXmlString(this distDFeInt pedDistDFeInt) { return(FuncoesXml.ClasseParaXmlString(pedDistDFeInt)); }
/// <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 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 = 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 }