/// <summary> /// Validar Consulta ao Status do Serviço /// </summary> /// <param name="entity"></param> private void ValidarSchema(consSitNFe entity) { var caminhoSchema = _emisorEmissorServicoConfig.DiretorioSchemaXsd; if (!Directory.Exists(caminhoSchema)) { throw new Exception("Diretório de Schemas não encontrado: \n" + caminhoSchema); } // Define o tipo de validação var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; //Listar arquivos XSD e inclui-las na validação var list = ObterListaNomeSchemas().ToList(); list.ForEach(n => { cfg.Schemas.Add(null, Path.Combine(caminhoSchema, n)); }); cfg.ValidationEventHandler += ValidationEventHandler; var xml = Utils.ObterStringXML(entity); var reader = XmlReader.Create(new StringReader(xml), cfg); var document = new XmlDocument(); document.Load(reader); //Valida xml document.Validate(ValidationEventHandler); }
public async Task <retConsSitNFe> ConsultarPelaChave(string chaveAcesso, string versao) { var chave = new ChaveFiscal(chaveAcesso); var consSit = new consSitNFe { chNFe = chaveAcesso, tpAmb = Configuracao.TipoAmbiente, versao = versao }; var xmlEvento = XmlUtils.ClasseParaXmlString <consSitNFe>(consSit); var arqEnv = Path.Combine("Logs", $"{DateTime.Now.Ticks}-pedConsSitNFe.xml"); await storage.SaveAsync(arqEnv, xmlEvento); var modeloDoc = chave.Modelo; var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.ConsultaSituacaoNFe, Configuracao.TipoAmbiente, modeloDoc, Configuracao.UF); var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ConsultaSituacaoNFe, xmlEvento); var retornoXmlString = await Transmitir.TransmitirAsync(sefazUrl, envelope); var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retConsSitNFe").OuterXml; var arqRet = Path.Combine("Logs", $"{DateTime.Now.Ticks}-retConsSitNFe.xml"); await storage.SaveAsync(arqRet, retornoXmlStringLimpa); var retEnvEvento = new retConsSitNFe().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento); return(retEnvEvento); }
public async Task <retConsSitNFe> ConsultarPelaChave(string chaveAcesso) { chaveAcesso = chaveAcesso.Replace("NFe", ""); var consSit = new consSitNFe { chNFe = chaveAcesso, tpAmb = cfgServico.TipoAmbiente, versao = versao }; var xmlEvento = XmlUtils.ClasseParaXmlString <consSitNFe>(consSit); var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("pedConsSitNFe.xml", cfgServico)); await storage.SaveAsync(arqEnv, xmlEvento); var modeloDoc = chaveAcesso.Substring(20, 2).ModeloDocumento(); var sefazUrl = FabricarUrl.ObterUrl(eTipoServico.ConsultaSituacaoNFe, cfgServico.TipoAmbiente, modeloDoc, cfgServico.UF); var envelope = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ConsultaSituacaoNFe, xmlEvento); var retornoXmlString = await sefaz.TransmitirAsync(sefazUrl, envelope); var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retConsSitNFe").OuterXml; var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("retConsSitNFe.xml", cfgServico)); await storage.SaveAsync(arqRet, retornoXmlStringLimpa); var retEnvEvento = new retConsSitNFe().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento); return(retEnvEvento); }
/// <summary> /// Obter dados /// </summary> /// <returns></returns> private consSitNFe ObterDados() { var chave = _documento == DocumentoProtocolo.Chave ? _chaveNfe : ObterChave(); //Retirar letras, se houver _chaveNfe = chave.RetirarLetras(); var enitty = new consSitNFe { chNFe = _chaveNfe, tpAmb = _emisorEmissorServicoConfig.Ambiente, versao = _versao.ObterVersaoServico() }; return(enitty); }
/// <summary> /// Obter mensagem Soap em formato Xml /// <para>Corpo da mensagem compativel com a especificação SOAP e requisitos Sefaz</para> /// </summary> /// <param name="urlWsdl">Endereço WSDL do serviço</param> /// <param name="entity"></param> /// <example></example> /// <returns></returns> protected virtual string ObterCorpoMensagemSoap(string urlWsdl, consSitNFe entity) { var xmlCorpo = Utils.ObterStringXML(entity); var stringBuilder = new StringBuilder(); stringBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>"); stringBuilder.Append( "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"); stringBuilder.Append("<soap:Body>"); stringBuilder.Append("<nfeDadosMsg xmlns=\"" + urlWsdl + "\">" + xmlCorpo + "</nfeDadosMsg>"); stringBuilder.Append("</soap:Body>"); stringBuilder.Append("</soap:Envelope>"); var msg = stringBuilder.ToString(); return(msg); }
/// <summary> /// Salvar arquivo Xml /// </summary> private void SalvarPedido(consSitNFe entity) { if (!_emisorEmissorServicoConfig.SalvarArquivoRetorno) { return; } //SalvarArquivo if (string.IsNullOrWhiteSpace(_emisorEmissorServicoConfig.DiretorioArquivoRetornoXml)) { throw new InvalidOperationException("Informe um diretório válido."); } var nomeArq = $"{entity.chNFe}-ped-sit.xml"; var caminho = Path.Combine(_emisorEmissorServicoConfig.DiretorioArquivoRetornoXml, "Protocolos", "Enviados"); var xml = Utils.ObterStringXML(entity); Utils.EscreverArquivo(caminho, nomeArq, xml); }
/// <summary> /// Consulta a Situação da NFe /// </summary> /// <returns>Retorna um objeto da classe RetornoNfeConsultaProtocolo com os dados da Situação da NFe</returns> public RetornoNfeConsultaProtocolo NfeConsultaProtocolo(string chave) { var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.NfeConsultaProtocolo, _cFgServico.VersaoNfeConsultaProtocolo); #region Cria o objeto wdsl para consulta var ws = CriarServico(ServicoNFe.NfeConsultaProtocolo, TipoRecepcaoEvento.Nenhum); ws.nfeCabecMsg = new nfeCabecMsg { cUF = _cFgServico.cUF, versaoDados = versaoServico }; #endregion #region Cria o objeto consSitNFe var pedConsulta = new consSitNFe { versao = versaoServico, tpAmb = _cFgServico.tpAmb, chNFe = chave }; #endregion #region Valida, Envia os dados e obtém a resposta var xmlConsulta = pedConsulta.ObterXmlString(); Validador.Valida(ServicoNFe.NfeConsultaProtocolo, TipoRecepcaoEvento.Nenhum, _cFgServico.VersaoNfeConsultaProtocolo, xmlConsulta); var dadosConsulta = new XmlDocument(); dadosConsulta.LoadXml(xmlConsulta); SalvarArquivoXml(chave + "-ped-sit.xml", xmlConsulta); var retorno = ws.Execute(dadosConsulta); var retornoXmlString = retorno.OuterXml; var retConsulta = new retConsSitNFe().CarregarDeXmlString(retornoXmlString); SalvarArquivoXml(chave + "-sit.xml", retornoXmlString); return(new RetornoNfeConsultaProtocolo(pedConsulta.ObterXmlString(), retConsulta.ObterXmlString(), retornoXmlString, retConsulta)); #endregion }
/// <summary> /// Converte o objeto consSitNFe para uma string no formato XML /// </summary> /// <param name="pedConsulta"></param> /// <returns>Retorna uma string no formato XML com os dados do objeto consSitNFe</returns> public static string ObterXmlString(this consSitNFe pedConsulta) { return(FuncoesXml.ClasseParaXmlString(pedConsulta)); }