private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento) { var url = DefinicaoWsdl.ObterUrl(servico, tipoRecepcaoEvento, _cFgServico); switch (servico) { case ServicoNFe.NfeStatusServico: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeStatusServico(url, _certificado, _cFgServico.TimeOut)); } return(new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeConsultaProtocolo: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return(new NfeConsulta3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return(new NfeConsulta(url, _certificado, _cFgServico.TimeOut)); } return(new NfeConsulta2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeRecepcao: return(new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeRetRecepcao: return(new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NFeAutorizacao: return(new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NFeRetAutorizacao: return(new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeInutilizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut)); } return(new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.RecepcaoEvento: return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeConsultaCadastro: return(new CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut)); } return(null); }
internal static string ObterArquivoSchema(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, bool loteNfe = true) { switch (servicoNFe) { case ServicoNFe.NfeRecepcao: return loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd"; case ServicoNFe.RecepcaoEvento: switch (tipoRecepcaoEvento) { case TipoRecepcaoEvento.Cancelmento: return "envEventoCancNFe_v1.00.xsd"; case TipoRecepcaoEvento.CartaCorrecao: return "envCCe_v1.00.xsd"; case TipoRecepcaoEvento.Epec: return "envEPEC_v1.00.xsd"; } break; case ServicoNFe.NfeInutilizacao: switch (versaoServico) { case VersaoServico.ve200: return "inutNFe_v2.00.xsd"; case VersaoServico.ve310: return "inutNFe_v3.10.xsd"; } break; case ServicoNFe.NfeConsultaProtocolo: switch (versaoServico) { case VersaoServico.ve200: return "consSitNFe_v2.01.xsd"; case VersaoServico.ve310: return "consSitNFe_v3.10.xsd"; } break; case ServicoNFe.NfeStatusServico: switch (versaoServico) { case VersaoServico.ve200: return "consStatServ_v2.00.xsd"; case VersaoServico.ve310: return "consStatServ_v3.10.xsd"; } break; case ServicoNFe.NFeAutorizacao: return loteNfe ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd"; case ServicoNFe.NfeConsultaCadastro: return "consCad_v2.00.xsd"; case ServicoNFe.NfeDownloadNF: return "downloadNFe_v1.00.xsd"; } return null; }
private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento) { var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico); if (servico != ServicoNFe.NFeAutorizacao) { throw new Exception( $"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!"); } if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) { return(new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut)); } return(new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut)); }
public static void Valida(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, string stringXml, bool loteNfe = true) { var pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas; if (!Directory.Exists(pathSchema)) { throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); } var arquivoSchema = pathSchema + @"\" + ObterArquivoSchema(servicoNFe, tipoRecepcaoEvento, versaoServico, loteNfe); // Define o tipo de validação var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; // Carrega o arquivo de esquema var schemas = new XmlSchemaSet(); cfg.Schemas = schemas; // Quando carregar o eschema, especificar o namespace que ele valida // e a localização do arquivo schemas.Add(null, arquivoSchema); // Especifica o tratamento de evento para os erros de validacao cfg.ValidationEventHandler += ValidationEventHandler; // cria um leitor para validação var validator = XmlReader.Create(new StringReader(stringXml), cfg); try { // Faz a leitura de todos os dados XML while (validator.Read()) { } } catch (XmlException err) { // Um erro ocorre se o documento XML inclui caracteres ilegais // ou tags que não estão aninhadas corretamente throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + err.Message); } finally { validator.Close(); } }
/// <summary> /// Envia um evento genérico /// </summary> /// <param name="idlote"></param> /// <param name="eventos"></param> /// <param name="tipoRecepcaoEvento"></param> /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns> private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List <evento> eventos, TipoRecepcaoEvento tipoRecepcaoEvento) { var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento); #region Cria o objeto wdsl para consulta var ws = CriarServico(ServicoNFe.RecepcaoEvento, tipoRecepcaoEvento); ws.nfeCabecMsg = new nfeCabecMsg { cUF = _cFgServico.cUF, versaoDados = versaoServico }; #endregion #region Cria o objeto envEvento var pedEvento = new envEvento { versao = versaoServico, idLote = idlote, evento = eventos }; foreach (var evento in eventos) { evento.infEvento.Id = "ID" + evento.infEvento.tpEvento + evento.infEvento.chNFe + evento.infEvento.nSeqEvento.ToString().PadLeft(2, '0'); evento.Assina(); } #endregion #region Valida, Envia os dados e obtém a resposta var xmlEvento = pedEvento.ObterXmlString(); Validador.Valida(ServicoNFe.RecepcaoEvento, tipoRecepcaoEvento, _cFgServico.VersaoRecepcaoEvento, xmlEvento); var dadosEvento = new XmlDocument(); dadosEvento.LoadXml(xmlEvento); SalvarArquivoXml(idlote + "-ped-eve.xml", xmlEvento); var retorno = ws.Execute(dadosEvento); var retornoXmlString = retorno.OuterXml; var retEnvEvento = new retEnvEvento().CarregarDeXmlString(retornoXmlString); SalvarArquivoXml(idlote + "-eve.xml", retornoXmlString); #region Obtém um procEventoNFe de cada evento e salva em arquivo var listprocEventoNFe = new List <procEventoNFe>(); foreach (var evento in eventos) { var eve = evento; var query = (from retevento in retEnvEvento.retEvento where retevento.infEvento.chNFe == eve.infEvento.chNFe && retevento.infEvento.tpEvento == eve.infEvento.tpEvento select retevento).SingleOrDefault(); var procevento = new procEventoNFe { evento = eve, versao = eve.versao, retEvento = new List <retEvento> { query } }; listprocEventoNFe.Add(procevento); if (!_cFgServico.SalvarXmlServicos) { continue; } var proceventoXmlString = procevento.ObterXmlString(); SalvarArquivoXml(procevento.evento.infEvento.Id.Substring(2) + "-procEventoNFe.xml", proceventoXmlString); } #endregion return(new RetornoRecepcaoEvento(pedEvento.ObterXmlString(), retEnvEvento.ObterXmlString(), retornoXmlString, retEnvEvento, listprocEventoNFe)); #endregion }
private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento) { var url = DefinicaoWsdl.ObterUrl(servico, tipoRecepcaoEvento, _cFgServico); switch (servico) { case ServicoNFe.NfeStatusServico: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeStatusServico(url, _certificado, _cFgServico.TimeOut)); } return(new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeConsultaProtocolo: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return(new NfeConsulta3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return(new NfeConsulta(url, _certificado, _cFgServico.TimeOut)); } return(new NfeConsulta2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeRecepcao: return(new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeRetRecepcao: return(new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NFeAutorizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) { return(new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut)); } return(new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NFeRetAutorizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) { return(new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut)); } return(new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeInutilizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut)); } return(new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.RecepcaoEvento: if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec) { return(new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut)); } return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeConsultaCadastro: switch (_cFgServico.cUF) { case Estado.CE: return(new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut)); } return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeDownloadNF: return(new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut)); } return(null); }
/// <summary> /// Envia um evento genérico /// </summary> /// <param name="idlote"></param> /// <param name="eventos"></param> /// <param name="tipoRecepcaoEvento"></param> /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns> private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List<evento> eventos, TipoRecepcaoEvento tipoRecepcaoEvento) { var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento); #region Cria o objeto wdsl para consulta var ws = CriarServico(ServicoNFe.RecepcaoEvento, tipoRecepcaoEvento); ws.nfeCabecMsg = new nfeCabecMsg { cUF = _cFgServico.cUF, versaoDados = versaoServico }; #endregion #region Cria o objeto envEvento var pedEvento = new envEvento { versao = versaoServico, idLote = idlote, evento = eventos }; foreach (var evento in eventos) { evento.infEvento.Id = "ID" + evento.infEvento.tpEvento + evento.infEvento.chNFe + evento.infEvento.nSeqEvento.ToString().PadLeft(2, '0'); evento.Assina(); } #endregion #region Valida, Envia os dados e obtém a resposta var xmlEvento = pedEvento.ObterXmlString(); Validador.Valida(ServicoNFe.RecepcaoEvento, tipoRecepcaoEvento, _cFgServico.VersaoRecepcaoEvento, xmlEvento); var dadosEvento = new XmlDocument(); dadosEvento.LoadXml(xmlEvento); SalvarArquivoXml(idlote + "-ped-eve.xml", xmlEvento); var retorno = ws.Execute(dadosEvento); var retornoXmlString = retorno.OuterXml; var retEnvEvento = new retEnvEvento().CarregarDeXmlString(retornoXmlString); SalvarArquivoXml(idlote + "-eve.xml", retornoXmlString); #region Obtém um procEventoNFe de cada evento e salva em arquivo var listprocEventoNFe = new List<procEventoNFe>(); foreach (var evento in eventos) { var eve = evento; var query = (from retevento in retEnvEvento.retEvento where retevento.infEvento.chNFe == eve.infEvento.chNFe && retevento.infEvento.tpEvento == eve.infEvento.tpEvento select retevento).SingleOrDefault(); var procevento = new procEventoNFe {evento = eve, versao = eve.versao, retEvento = new List<retEvento> {query}}; listprocEventoNFe.Add(procevento); if (!_cFgServico.SalvarXmlServicos) continue; var proceventoXmlString = procevento.ObterXmlString(); SalvarArquivoXml(procevento.evento.infEvento.Id.Substring(2) + "-procEventoNFe.xml", proceventoXmlString); } #endregion return new RetornoRecepcaoEvento(pedEvento.ObterXmlString(), retEnvEvento.ObterXmlString(), retornoXmlString, retEnvEvento, listprocEventoNFe); #endregion }
private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento) { var url = DefinicaoWsdl.ObterUrl(servico, tipoRecepcaoEvento, _cFgServico); switch (servico) { case ServicoNFe.NfeStatusServico: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return new NfeStatusServico(url, _certificado, _cFgServico.TimeOut); } return new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeConsultaProtocolo: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return new NfeConsulta3(url, _certificado, _cFgServico.TimeOut); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return new NfeConsulta(url, _certificado, _cFgServico.TimeOut); } return new NfeConsulta2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeRecepcao: return new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeRetRecepcao: return new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NFeAutorizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) return new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut); return new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NFeRetAutorizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) return new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut); return new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeInutilizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut); } return new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.RecepcaoEvento: if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec) return new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut); return new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeConsultaCadastro: switch (_cFgServico.cUF) { case Estado.CE: return new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut); } return new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeDownloadNF: return new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut); } return null; }
/// <summary> /// Obtém uma url a partir de uma lista armazenada em enderecoServico e povoada dinamicamente no create desta classe /// </summary> /// <param name="servico"></param> /// <param name="tipoRecepcaoEvento"></param> /// <param name="cfgServico"></param> /// <returns></returns> public static string ObterUrlServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento, ConfiguracaoServico cfgServico) { //Se o serviço for RecepcaoEvento e o tipo de emissão for dpec, a url deve ser a do ambiente nacional para EPEC e da propria sefaz para os demais casos var tipoEmissao = servico == ServicoNFe.RecepcaoEvento & cfgServico.tpEmis == TipoEmissao.teEPEC & tipoRecepcaoEvento != TipoRecepcaoEvento.Epec ? TipoEmissao.teNormal : cfgServico.tpEmis; var definicao = from d in ListaEnderecos where d.Estado == cfgServico.cUF && d.ServicoNFe == servico && d.TipoAmbiente == cfgServico.tpAmb && d.TipoEmissao == tipoEmissao && d.VersaoServico == ObterVersaoServico(servico, cfgServico) && d.ModeloDocumento == cfgServico.ModeloDocumento select d.Url; var listaRetorno = definicao as IList<string> ?? definicao.ToList(); var qtdeRetorno = listaRetorno.Count(); if (qtdeRetorno == 0) throw new Exception(Erro(servico, cfgServico)); if (qtdeRetorno > 1) throw new Exception("A função ObterUrlServico obteve mais de um resultado!"); return listaRetorno.FirstOrDefault(); }
private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento) { var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico); switch (servico) { case ServicoNFe.NfeStatusServico: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe) { return(new NfeStatusServico(url, _certificado, _cFgServico.TimeOut)); } return(new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeConsultaProtocolo: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return(new NfeConsulta3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe) { return(new NfeConsulta(url, _certificado, _cFgServico.TimeOut)); } return(new NfeConsulta2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeRecepcao: return(new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeRetRecepcao: return(new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NFeAutorizacao: throw new Exception($"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!"); case ServicoNFe.NFeRetAutorizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) { return(new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut)); } return(new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeInutilizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut)); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe) { return(new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut)); } return(new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.RecepcaoEvento: if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec) { return(new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut)); } return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeConsultaCadastro: switch (_cFgServico.cUF) { case Estado.CE: return(new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut)); } return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfeDownloadNF: return(new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.NfceAdministracaoCSC: return(new NfceCsc(url, _certificado, _cFgServico.TimeOut)); } return(null); }
private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento) { var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico); switch (servico) { case ServicoNFe.NfeStatusServico: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe) { return new NfeStatusServico(url, _certificado, _cFgServico.TimeOut); } return new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeConsultaProtocolo: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return new NfeConsulta3(url, _certificado, _cFgServico.TimeOut); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe) { return new NfeConsulta(url, _certificado, _cFgServico.TimeOut); } return new NfeConsulta2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeRecepcao: return new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeRetRecepcao: return new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NFeAutorizacao: throw new Exception($"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!"); case ServicoNFe.NFeRetAutorizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) return new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut); return new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeInutilizacao: if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310) { return new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut); } if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe) { return new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut); } return new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.RecepcaoEvento: if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec) return new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut); return new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeConsultaCadastro: switch (_cFgServico.cUF) { case Estado.CE: return new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut); } return new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfeDownloadNF: return new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.NfceAdministracaoCSC: return new NfceCsc(url, _certificado, _cFgServico.TimeOut); } return null; }
private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento) { var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico); if (servico != ServicoNFe.NFeAutorizacao) throw new Exception( $"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!"); if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310) return new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut); return new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut); }
public static void Valida(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, string stringXml, bool loteNfe = true) { var pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas; if (!Directory.Exists(pathSchema)) throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); var arquivoSchema = pathSchema + @"\" + ObterArquivoSchema(servicoNFe, tipoRecepcaoEvento, versaoServico, loteNfe); // Define o tipo de validação var cfg = new XmlReaderSettings {ValidationType = ValidationType.Schema}; // Carrega o arquivo de esquema var schemas = new XmlSchemaSet(); cfg.Schemas = schemas; // Quando carregar o eschema, especificar o namespace que ele valida // e a localização do arquivo schemas.Add(null, arquivoSchema); // Especifica o tratamento de evento para os erros de validacao cfg.ValidationEventHandler += ValidationEventHandler; // cria um leitor para validação var validator = XmlReader.Create(new StringReader(stringXml), cfg); try { // Faz a leitura de todos os dados XML while (validator.Read()) { } } catch (XmlException err) { // Um erro ocorre se o documento XML inclui caracteres ilegais // ou tags que não estão aninhadas corretamente throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + err.Message); } finally { validator.Close(); } }
internal static string ObterArquivoSchema(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, bool loteNfe = true) { switch (servicoNFe) { case ServicoNFe.NfeRecepcao: return(loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd"); case ServicoNFe.RecepcaoEvento: switch (tipoRecepcaoEvento) { case TipoRecepcaoEvento.Cancelmento: return("envEventoCancNFe_v1.00.xsd"); case TipoRecepcaoEvento.CartaCorrecao: return("envCCe_v1.00.xsd"); case TipoRecepcaoEvento.Epec: return("envEPEC_v1.00.xsd"); } break; case ServicoNFe.NfeInutilizacao: switch (versaoServico) { case VersaoServico.ve200: return("inutNFe_v2.00.xsd"); case VersaoServico.ve310: return("inutNFe_v3.10.xsd"); } break; case ServicoNFe.NfeConsultaProtocolo: switch (versaoServico) { case VersaoServico.ve200: return("consSitNFe_v2.01.xsd"); case VersaoServico.ve310: return("consSitNFe_v3.10.xsd"); } break; case ServicoNFe.NfeStatusServico: switch (versaoServico) { case VersaoServico.ve200: return("consStatServ_v2.00.xsd"); case VersaoServico.ve310: return("consStatServ_v3.10.xsd"); } break; case ServicoNFe.NFeAutorizacao: return(loteNfe ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd"); case ServicoNFe.NfeConsultaCadastro: return("consCad_v2.00.xsd"); case ServicoNFe.NfeDownloadNF: return("downloadNFe_v1.00.xsd"); } return(null); }