/// <summary> /// Validar Consulta ao Status do Serviço /// </summary> /// <param name="entity"></param> private void ValidarSchema(consReciNFe 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); }
/// <summary> /// Obter dados /// </summary> /// <returns></returns> private consReciNFe ObterDados() { var enitty = new consReciNFe { nRec = Convert.ToString(_numRecibo), 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, consReciNFe 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> /// Recebe o retorno do processamento de uma ou mais NFe's pela SEFAZ /// </summary> /// <param name="recibo"></param> /// <returns>Retorna um objeto da classe RetornoNFeRetAutorizacao com com os dados do processamento do lote</returns> public RetornoNFeRetAutorizacao NFeRetAutorizacao(string recibo) { var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.NFeRetAutorizacao, _cFgServico.VersaoNFeRetAutorizacao); #region Cria o objeto wdsl para consulta var ws = CriarServico(ServicoNFe.NFeRetAutorizacao, TipoRecepcaoEvento.Nenhum); ws.nfeCabecMsg = new nfeCabecMsg { cUF = _cFgServico.cUF, versaoDados = versaoServico }; #endregion #region Cria o objeto consReciNFe var pedRecibo = new consReciNFe { versao = versaoServico, tpAmb = _cFgServico.tpAmb, nRec = recibo }; #endregion #region Envia os dados e obtém a resposta var xmlRecibo = pedRecibo.ObterXmlString(); var dadosRecibo = new XmlDocument(); dadosRecibo.LoadXml(xmlRecibo); SalvarArquivoXml(recibo + "-ped-rec.xml", xmlRecibo); var retorno = ws.Execute(dadosRecibo); var retornoXmlString = retorno.OuterXml; var retRecibo = new retConsReciNFe().CarregarDeXmlString(retornoXmlString); SalvarArquivoXml(recibo + "-pro-rec.xml", retornoXmlString); return(new RetornoNFeRetAutorizacao(pedRecibo.ObterXmlString(), retRecibo.ObterXmlString(), retornoXmlString, retRecibo)); #endregion }
/// <summary> /// Salvar arquivo Xml /// </summary> private void SalvarPedido(consReciNFe entity) { if (!_emisorEmissorServicoConfig.SalvarArquivoRetorno) { return; } //SalvarArquivo if (string.IsNullOrWhiteSpace(_emisorEmissorServicoConfig.DiretorioArquivoRetornoXml)) { throw new InvalidOperationException("Informe um diretório válido."); } var nomeArq = $"{_numRecibo}-ped-rec.xml"; var caminho = Path.Combine(_emisorEmissorServicoConfig.DiretorioArquivoRetornoXml, "Recibos", "Enviados"); var xml = Utils.ObterStringXML(entity); Utils.EscreverArquivo(caminho, nomeArq, xml); }
/// <summary> /// Converte o objeto consReciNFe para uma string no formato XML /// </summary> /// <param name="pedRecibo"></param> /// <returns>Retorna uma string no formato XML com os dados do objeto consReciNFe</returns> public static string ObterXmlString(this consReciNFe pedRecibo) { return(FuncoesXml.ClasseParaXmlString(pedRecibo)); }