public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico) { switch (versaoServico) { case VersaoServico.ve100: switch (servicoNFe) { case ServicoNFe.NFeDistribuicaoDFe: return("1.01"); } return("1.00"); case VersaoServico.ve200: switch (servicoNFe) { case ServicoNFe.NfeConsultaProtocolo: return("2.01"); } return("2.00"); case VersaoServico.ve310: return("3.10"); case VersaoServico.ve400: return("4.00"); } return(""); }
/// <summary> /// Procurar os arquivos XML´s a serem enviados aos web-services ou para ser executado alguma rotina /// </summary> /// <param name="pTipoArq">Mascara dos arquivos as serem pesquisados. Ex: *.xml *-nfe.xml</param> public override void BuscaXML(object parametroThread) { ParametroThread param = (ParametroThread)parametroThread; ServicoNFe oNfe = new ServicoNFe(); //Criar XML de controle de fluxo de envios de Notas Fiscais FluxoNfe oFluxoNfe = new FluxoNfe(); try { oFluxoNfe.CriarXml(true); } catch (Exception ex) { MessageBox.Show("Ocorreu um erro ao tentar criar o XML para o controle do fuxo do envio dos documentos eletrônicos.\r\n\r\nErro:" + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } while (true) { this.ProcessaXML(oNfe, param.Servico); Thread.Sleep(1000); //Pausa na Thread de 1000 milissegundos ou 1 segundo } }
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); }
/// <summary> /// Procurar os arquivos XML´s a serem enviados aos web-services ou para ser executado alguma rotina /// </summary> /// <param name="pTipoArq">Mascara dos arquivos as serem pesquisados. Ex: *.xml *-nfe.xml</param> public override void BuscaXML(object parametroThread) { ParametroThread param = (ParametroThread)parametroThread; ServicoNFe oNfe = new ServicoNFe(); //Criar XML de controle de fluxo de envios de Notas Fiscais FluxoNfe oFluxoNfe = new FluxoNfe(); try { oFluxoNfe.CriarXml(true); } catch (Exception ex) { //danasa 27-2-2011 string exMessage = "Ocorreu um erro ao tentar criar o XML para o controle do fuxo do envio dos documentos eletrônicos.\r\n\r\nErro:" + ex.Message; new Auxiliar().GravarArqErroERP(string.Format(InfoApp.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddThhmmss")), exMessage); //MessageBox.Show("Ocorreu um erro ao tentar criar o XML para o controle do fuxo do envio dos documentos eletrônicos.\r\n\r\nErro:" + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } while (true) { this.ProcessaXML(oNfe, param.Servico); Thread.Sleep(1000); //Pausa na Thread de 1000 milissegundos ou 1 segundo } }
public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico) { if (versaoServico == VersaoServico.ve100 && servicoNFe == ServicoNFe.NFeDistribuicaoDFe) { return("1.01"); } else if (versaoServico == VersaoServico.ve100 || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoDestinatario) { return("1.00"); } else if (versaoServico == VersaoServico.ve200 && servicoNFe == ServicoNFe.NfeConsultaProtocolo) { return("2.01"); } else if (versaoServico == VersaoServico.ve200) { return("2.00"); } else if (versaoServico == VersaoServico.ve310) { return("3.10"); } else if (versaoServico == VersaoServico.ve400 && servicoNFe == ServicoNFe.RecepcaoEventoCancelmento) { return("1.00"); } else if (versaoServico == VersaoServico.ve400) { return("4.00"); } return(""); }
/// <summary> /// Obtém uma exceção. /// Se o status da <see cref="WebException"/> estiver na lista <see cref="ListaComunicacaoException"/>, /// será retornada uma exceção do tipo <see cref="ComunicacaoException"/>, /// senão será retornada a própria <see cref="WebException"/> passada no parâmetro /// </summary> /// <param name="servico"></param> /// <param name="webException"></param> /// <returns></returns> public static Exception ObterException(ServicoNFe servico, WebException webException) { if (ListaComunicacaoException.Contains(webException.Status)) { return(new ComunicacaoException(servico, webException.Message)); } return(webException); }
public EstadoUrl(Estado estado, TipoAmbiente tipoAmbiente, ServicoNFe servicoNFe, string url) : this() { this.CodigoEstado = estado; this.TipoAmbiente = tipoAmbiente; this.TipoServico = servicoNFe; this.Url = url; }
public EstadoUrl GetEstadoUrl(Estado estado, TipoAmbiente tpAmbiente, ServicoNFe servicoNFe) { var url = Urls.FirstOrDefault( c => c.CodigoEstado == estado && c.TipoAmbiente == tpAmbiente && c.TipoServico == servicoNFe); return url; }
public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true, string pathSchema = null) { var falhas = new StringBuilder(); if (!Directory.Exists(pathSchema)) { throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); } var arquivoSchema = Path.Combine(pathSchema, ObterArquivoSchema(servicoNFe, versaoServico, stringXml, loteNfe)); // Define o tipo de validação var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; // Carrega o arquivo de esquema var schemas = new XmlSchemaSet(); schemas.XmlResolver = new XmlUrlResolver(); 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 += delegate(object sender, ValidationEventArgs args) { falhas.AppendLine($"[{args.Severity}] - {args.Message} {args.Exception?.Message} na linha {args.Exception.LineNumber} posição {args.Exception.LinePosition} em {args.Exception.SourceUri}".ToString()); }; // 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 { } finally { validator.Close(); } if (falhas.Length > 0) { throw new ValidacaoSchemaException($"Ocorreu o seguinte erro durante a validação XML: {Environment.NewLine}{falhas}"); } return(falhas.ToString().Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); }
public EnderecoServico(ServicoNFe servicoNFe, VersaoServico versaoServico, TipoAmbiente tipoAmbiente, TipoEmissao tipoEmissao, Estado estado, ModeloDocumento modeloDocumento, string url) { ServicoNFe = servicoNFe; VersaoServico = versaoServico; TipoAmbiente = tipoAmbiente; TipoEmissao = tipoEmissao; Estado = estado; Url = url; ModeloDocumento = modeloDocumento; }
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; }
// criado pois tem estado que o evento de cancelamento sempre será versão 1.00 e a webservice podera ser 2.00 ou 3.00 ou seja // na montagem do xml vai ser 1.00 e a versão do webservice vai ser diferente da montagem exemplo: MT public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico, Estado?estado) { if (servicoNFe == ServicoNFe.NfeConsultaCadastro && versaoServico != VersaoServico.ve100) { return("2.00"); } if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento || servicoNFe == ServicoNFe.RecepcaoEventoCartaCorrecao) { return("1.00"); } return(VersaoServicoParaString(servicoNFe, versaoServico)); }
public static void Valida(ServicoNFe servicoNFe, 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, 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); } catch (Exception ex) { throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + ex.Message); } finally { validator.Close(); } }
public static void Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true, ConfiguracaoServico cfgServico = null) { var pathSchema = String.Empty; if (cfgServico == null || (cfgServico != null && string.IsNullOrWhiteSpace(cfgServico.DiretorioSchemas))) { pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas; } else { pathSchema = cfgServico.DiretorioSchemas; } Valida(servicoNFe, versaoServico, stringXml, loteNfe, pathSchema); }
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)); }
private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico) { var url = Enderecador.ObterUrlServico(servico, _cFgServico); if (servico != ServicoNFe.NFeAutorizacao) { throw new Exception( string.Format("O serviço {0} não pode ser criado no método {1}!", servico, 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 string VersaoServicoParaString(ServicoNFe servicoNFe, VersaoServico? versaoServico) { switch (versaoServico) { case VersaoServico.ve100: return "1.00"; case VersaoServico.ve200: switch (servicoNFe) { case ServicoNFe.NfeConsultaProtocolo: return "2.01"; } return "2.00"; case VersaoServico.ve310: return "3.10"; } return ""; }
public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico) { if (servicoNFe == ServicoNFe.NfeConsultaCadastro && versaoServico != VersaoServico.Versao100) { return("2.00"); } if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento || servicoNFe == ServicoNFe.RecepcaoEventoCartaCorrecao || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoDestinatario || servicoNFe == ServicoNFe.RecepcaoEventoEpec) { return("1.00"); } switch (versaoServico) { case VersaoServico.Versao100: switch (servicoNFe) { case ServicoNFe.NFeDistribuicaoDFe: return("1.01"); } return("1.00"); case VersaoServico.Versao200: switch (servicoNFe) { case ServicoNFe.NfeConsultaProtocolo: return("2.01"); } return("2.00"); case VersaoServico.Versao310: return("3.10"); case VersaoServico.Versao400: return("4.00"); } return(""); }
public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico) { switch (versaoServico) { case VersaoServico.ve100: switch (servicoNFe) { case ServicoNFe.NFeDistribuicaoDFe: return("1.01"); } return("1.00"); case VersaoServico.ve200: switch (servicoNFe) { case ServicoNFe.NfeConsultaProtocolo: return("2.01"); } return("2.00"); case VersaoServico.ve310: return("3.10"); case VersaoServico.ve400: switch (servicoNFe) { case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: case ServicoNFe.RecepcaoEventoCancelmento: case ServicoNFe.RecepcaoEventoCartaCorrecao: case ServicoNFe.RecepcaoEventoEpec: return("1.00"); } return("4.00"); } return(""); }
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; }
public static object VersaoServicoParaString(ServicoNFe nfceAdministracaoCSC, object versaoNfceAministracaoCSC) { throw new NotImplementedException(); }
/// <summary> /// Houve problemas com a internet, durante o envio dos dados para um webservice da NFe /// </summary> /// <param name="servico">Serviço que gerou o erro</param> /// <param name="message"></param> public ComunicacaoException(ServicoNFe servico, string message) : base(string.Format("Sem comunicação com o serviço {0}:\n{1}", servico, message)) { }
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); }
public static string ObterUrl(Console.Estado.Estado estado, TipoAmbiente tpAmbiente, ServicoNFe servico) { var urlSefaz = new EstadoUrlRepository().GetEstadoUrl(estado, tpAmbiente, servico); return urlSefaz.Url; }
internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico versaoServico, bool loteNfe = true) { switch (servicoNFe) { case ServicoNFe.NfeRecepcao: return(loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd"); case ServicoNFe.RecepcaoEventoCancelmento: return("envEventoCancNFe_v1.00.xsd"); case ServicoNFe.RecepcaoEventoCartaCorrecao: return("envCCe_v1.00.xsd"); case ServicoNFe.RecepcaoEventoEpec: return("envEPEC_v1.00.xsd"); case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: return("envConfRecebto_v1.00.xsd"); 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"); case ServicoNFe.NFeDistribuicaoDFe: return("distDFeInt_v1.00.xsd"); } return(null); }
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 string com a mensagem de erro. /// Essa função é acionada quando não é encontrada uma url para os parâmetros informados na função ObterUrlServico. /// </summary> /// <param name="servico"></param> /// <param name="cfgServico"></param> /// <returns></returns> private static string Erro(ServicoNFe servico, ConfiguracaoServico cfgServico) { return "Serviço " + servico + ", versão " + Auxiliar.VersaoServicoParaString(servico, ObterVersaoServico(servico, cfgServico)) + ", não disponível para a UF " + cfgServico.cUF + ", no ambiente de " + Auxiliar.TpAmbParaString(cfgServico.tpAmb) + " para emissão tipo " + Auxiliar.TipoEmissaoParaString(cfgServico.tpEmis) + ", documento: " + Auxiliar.ModeloDocumentoParaString(cfgServico.ModeloDocumento) + "!"; }
/// <summary> /// Obtém a versão configurada para um determinado serviço. /// A versão configurada para o serviço é armazenada em ConfiguracaoServico /// </summary> /// <param name="servico"></param> /// <param name="cfgServico"></param> /// <returns>Retorna um item do enum VersaoServico, com a versão do serviço</returns> private static VersaoServico? ObterVersaoServico(ServicoNFe servico, ConfiguracaoServico cfgServico) { switch (servico) { case ServicoNFe.RecepcaoEvento: return cfgServico.VersaoRecepcaoEvento; case ServicoNFe.NfeRecepcao: return cfgServico.VersaoNfeRecepcao; case ServicoNFe.NfeRetRecepcao: return cfgServico.VersaoNfeRetRecepcao; case ServicoNFe.NfeConsultaCadastro: return cfgServico.VersaoNfeConsultaCadastro; case ServicoNFe.NfeInutilizacao: return cfgServico.VersaoNfeInutilizacao; case ServicoNFe.NfeConsultaProtocolo: return cfgServico.VersaoNfeConsultaProtocolo; case ServicoNFe.NfeStatusServico: return cfgServico.VersaoNfeStatusServico; case ServicoNFe.NFeAutorizacao: return cfgServico.VersaoNFeAutorizacao; case ServicoNFe.NFeRetAutorizacao: return cfgServico.VersaoNFeRetAutorizacao; case ServicoNFe.NFeDistribuicaoDFe: return cfgServico.VersaoNFeDistribuicaoDFe; case ServicoNFe.NfeConsultaDest: return cfgServico.VersaoNfeConsultaDest; case ServicoNFe.NfeDownloadNF: return cfgServico.VersaoNfeDownloadNF; } return null; }
public void DeveUfSvcRsTerServicoDeAutorizacaoParaNFe4(Estado uf, TipoAmbiente tipoAmbiente, ServicoNFe servicoAutorizacao) { var lista = Enderecador.ObterEnderecoServicosMaisRecentes(VersaoServico.Versao400, uf, tipoAmbiente, ModeloDocumento.NFe, TipoEmissao.teSVCRS); Assert.Equal(1, lista.Count(n => n.ServicoNFe == servicoAutorizacao)); }
internal static string ObterArquivoSchema(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, Boolean 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"); } return(null); }
/// <summary> /// Envia um evento genérico /// </summary> /// <param name="idlote"></param> /// <param name="eventos"></param> /// <param name="servicoEvento">Tipo de serviço do evento: valores válidos: RecepcaoEventoCancelmento, RecepcaoEventoCartaCorrecao, RecepcaoEventoEpec e RecepcaoEventoManifestacaoDestinatario</param> /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns> private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List <evento> eventos, ServicoNFe servicoEvento) { var listaEventos = new List <ServicoNFe> { ServicoNFe.RecepcaoEventoCartaCorrecao, ServicoNFe.RecepcaoEventoCancelmento, ServicoNFe.RecepcaoEventoEpec, ServicoNFe.RecepcaoEventoManifestacaoDestinatario }; if ( !listaEventos.Contains(servicoEvento)) { throw new Exception(string.Format("Serviço {0} é inválido para o método {1}!\nServiços válidos: \n • {2}", servicoEvento, MethodBase.GetCurrentMethod().Name, string.Join("\n • ", listaEventos.ToArray()))); } var versaoServico = servicoEvento.VersaoServicoParaString(_cFgServico.VersaoRecepcaoEventoCceCancelamento); #region Cria o objeto wdsl para consulta var ws = CriarServico(servicoEvento); 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(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, 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) { var url = Enderecador.ObterUrlServico(servico, _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(string.Format("O serviço {0} não pode ser criado no método {1}!", servico, 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.RecepcaoEventoCancelmento: case ServicoNFe.RecepcaoEventoCartaCorrecao: case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: return new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut); case ServicoNFe.RecepcaoEventoEpec: return new RecepcaoEPEC(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); case ServicoNFe.NFeDistribuicaoDFe: return new NfeDistDFeInteresse(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); }
internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true) { switch (servicoNFe) { case ServicoNFe.NfeRecepcao: return(loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd"); case ServicoNFe.RecepcaoEventoCancelmento: var strEvento = FuncoesXml.ObterNodeDeStringXml(nameof(envEvento), stringXml); var evento = FuncoesXml.XmlStringParaClasse <envEvento>(strEvento); return(evento.evento.FirstOrDefault()?.infEvento?.tpEvento == NFeTipoEvento.TeNfeCancelamentoSubstituicao ? "envEventoCancSubst_v1.00.xsd" : "envEventoCancNFe_v1.00.xsd"); case ServicoNFe.RecepcaoEventoCartaCorrecao: return("envCCe_v1.00.xsd"); case ServicoNFe.RecepcaoEventoEpec: return("envEPEC_v1.00.xsd"); case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: return("envConfRecebto_v1.00.xsd"); case ServicoNFe.NfeInutilizacao: switch (versaoServico) { case VersaoServico.Versao200: return("inutNFe_v2.00.xsd"); case VersaoServico.Versao310: return("inutNFe_v3.10.xsd"); case VersaoServico.Versao400: return("inutNFe_v4.00.xsd"); } break; case ServicoNFe.NfeConsultaProtocolo: switch (versaoServico) { case VersaoServico.Versao200: return("consSitNFe_v2.01.xsd"); case VersaoServico.Versao310: return("consSitNFe_v3.10.xsd"); case VersaoServico.Versao400: return("consSitNFe_v4.00.xsd"); } break; case ServicoNFe.NfeStatusServico: switch (versaoServico) { case VersaoServico.Versao200: return("consStatServ_v2.00.xsd"); case VersaoServico.Versao310: return("consStatServ_v3.10.xsd"); case VersaoServico.Versao400: return("consStatServ_v4.00.xsd"); } break; case ServicoNFe.NFeAutorizacao: if (versaoServico != VersaoServico.Versao400) { return(loteNfe ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd"); } return(loteNfe ? "enviNFe_v4.00.xsd" : "nfe_v4.00.xsd"); case ServicoNFe.NfeConsultaCadastro: return("consCad_v2.00.xsd"); case ServicoNFe.NfeDownloadNF: return("downloadNFe_v1.00.xsd"); case ServicoNFe.NFeDistribuicaoDFe: return("distDFeInt_v1.01.xsd"); // "distDFeInt_v1.00.xsd"; } 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 INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico) { var url = Enderecador.ObterUrlServico(servico, _cFgServico); if (servico != ServicoNFe.NFeAutorizacao) throw new Exception( string.Format("O serviço {0} não pode ser criado no método {1}!", servico, 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(); } }
// criado pois tem estado que o evento de cancelamento sempre será versão 1.00 e a webservice podera ser 2.00 ou 3.00 ou seja // na montagem do xml vai ser 1.00 e a versão do webservice vai ser diferente da montagem exemplo: MT public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico, Estado?estado) { switch (estado) { case Estado.AC: case Estado.AL: case Estado.AP: case Estado.AM: case Estado.BA: case Estado.CE: case Estado.DF: case Estado.ES: case Estado.GO: case Estado.MA: case Estado.MS: case Estado.MG: case Estado.PA: case Estado.PB: case Estado.PR: case Estado.PE: case Estado.PI: case Estado.RJ: case Estado.RN: case Estado.RS: case Estado.RO: case Estado.RR: case Estado.SC: case Estado.SP: case Estado.SE: case Estado.TO: case Estado.AN: case Estado.EX: case null: return(VersaoServicoParaString(servicoNFe, versaoServico)); case Estado.MT: switch (versaoServico) { case VersaoServico.ve100: switch (servicoNFe) { case ServicoNFe.NFeDistribuicaoDFe: return("1.01"); } return("1.00"); case VersaoServico.ve200: if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento) { return("1.00"); } switch (servicoNFe) { case ServicoNFe.NfeConsultaProtocolo: return("2.01"); } return("2.00"); case VersaoServico.ve310: if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento) { return("1.00"); } return("3.10"); } return(""); default: throw new ArgumentOutOfRangeException("estado", estado, null); } }
/// <summary> /// Obtém a versão configurada para um determinado serviço. /// A versão configurada para o serviço é armazenada em ConfiguracaoServico /// </summary> /// <param name="servico"></param> /// <param name="cfgServico"></param> /// <returns>Retorna um item do enum VersaoServico, com a versão do serviço</returns> private static VersaoServico? ObterVersaoServico(ServicoNFe servico, ConfiguracaoServico cfgServico) { switch (servico) { case ServicoNFe.RecepcaoEventoCartaCorrecao: case ServicoNFe.RecepcaoEventoCancelmento: return cfgServico.VersaoRecepcaoEventoCceCancelamento; case ServicoNFe.RecepcaoEventoEpec: return cfgServico.VersaoRecepcaoEventoEpec; case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: return cfgServico.VersaoRecepcaoEventoManifestacaoDestinatario; case ServicoNFe.NfeRecepcao: return cfgServico.VersaoNfeRecepcao; case ServicoNFe.NfeRetRecepcao: return cfgServico.VersaoNfeRetRecepcao; case ServicoNFe.NfeConsultaCadastro: return cfgServico.VersaoNfeConsultaCadastro; case ServicoNFe.NfeInutilizacao: return cfgServico.VersaoNfeInutilizacao; case ServicoNFe.NfeConsultaProtocolo: return cfgServico.VersaoNfeConsultaProtocolo; case ServicoNFe.NfeStatusServico: return cfgServico.VersaoNfeStatusServico; case ServicoNFe.NFeAutorizacao: return cfgServico.VersaoNFeAutorizacao; case ServicoNFe.NFeRetAutorizacao: return cfgServico.VersaoNFeRetAutorizacao; case ServicoNFe.NFeDistribuicaoDFe: return cfgServico.VersaoNFeDistribuicaoDFe; case ServicoNFe.NfeConsultaDest: return cfgServico.VersaoNfeConsultaDest; case ServicoNFe.NfeDownloadNF: return cfgServico.VersaoNfeDownloadNF; case ServicoNFe.NfceAdministracaoCSC: return cfgServico.VersaoNfceAministracaoCSC; } return null; }
/// <summary> /// Envia um evento genérico /// </summary> /// <param name="idlote"></param> /// <param name="eventos"></param> /// <param name="servicoEvento">Tipo de serviço do evento: valores válidos: RecepcaoEventoCancelmento, RecepcaoEventoCartaCorrecao, RecepcaoEventoEpec e RecepcaoEventoManifestacaoDestinatario</param> /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns> private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List<evento> eventos, ServicoNFe servicoEvento) { var listaEventos = new List<ServicoNFe> { ServicoNFe.RecepcaoEventoCartaCorrecao, ServicoNFe.RecepcaoEventoCancelmento, ServicoNFe.RecepcaoEventoEpec, ServicoNFe.RecepcaoEventoManifestacaoDestinatario }; if ( !listaEventos.Contains(servicoEvento)) throw new Exception(string.Format("Serviço {0} é inválido para o método {1}!\nServiços válidos: \n • {2}", servicoEvento, MethodBase.GetCurrentMethod().Name, string.Join("\n • ", listaEventos.ToArray()))); var versaoServico = Conversao.VersaoServicoParaString(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento); #region Cria o objeto wdsl para consulta var ws = CriarServico(servicoEvento); 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(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, 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) { var url = Enderecador.ObterUrlServico(servico, _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(string.Format("O serviço {0} não pode ser criado no método {1}!", servico, 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.RecepcaoEventoCancelmento: case ServicoNFe.RecepcaoEventoCartaCorrecao: case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut)); case ServicoNFe.RecepcaoEventoEpec: return(new RecepcaoEPEC(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)); case ServicoNFe.NFeDistribuicaoDFe: return(new NfeDistDFeInteresse(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="cfgServico"></param> /// <returns></returns> public static string ObterUrlServico(ServicoNFe servico, ConfiguracaoServico cfgServico) { var definicao = from d in ListaEnderecos where d.Estado == cfgServico.cUF && d.ServicoNFe == servico && d.TipoAmbiente == cfgServico.tpAmb && d.TipoEmissao == cfgServico.tpEmis && 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 = 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); }
public static INfeServico CriaWsdlOutros( ServicoNFe servico, ConfiguracaoServico cfg, X509Certificate2 certificado) { var url = Enderecador.ObterUrlServico(servico, cfg); switch (servico) { case ServicoNFe.NfeStatusServico: if (cfg.cUF == Estado.PR & cfg.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeStatusServico3(url, certificado, cfg.TimeOut)); } if (cfg.cUF == Estado.BA & cfg.VersaoNfeStatusServico == VersaoServico.ve310 & cfg.ModeloDocumento == ModeloDocumento.NFe) { return(new NfeStatusServico(url, certificado, cfg.TimeOut)); } if (cfg.IsSvanNFe4()) { return(new NfeStatusServico4NFeSVAN(url, certificado, cfg.TimeOut)); } if (cfg.VersaoNfeStatusServico == VersaoServico.ve400) { return(new NfeStatusServico4(url, certificado, cfg.TimeOut)); } return(new NfeStatusServico2(url, certificado, cfg.TimeOut)); case ServicoNFe.NfeConsultaProtocolo: if (cfg.IsSvanNFe4()) { return(new NfeConsulta4SVAN(url, certificado, cfg.TimeOut)); } if (cfg.VersaoNfeConsultaProtocolo == VersaoServico.ve400) { return(new NfeConsulta4(url, certificado, cfg.TimeOut)); } if (cfg.cUF == Estado.PR & cfg.VersaoNfeConsultaProtocolo == VersaoServico.ve310) { return(new NfeConsulta3(url, certificado, cfg.TimeOut)); } if (cfg.cUF == Estado.BA & cfg.VersaoNfeConsultaProtocolo == VersaoServico.ve310 & cfg.ModeloDocumento == ModeloDocumento.NFe) { return(new NfeConsulta(url, certificado, cfg.TimeOut)); } return(new NfeConsulta2(url, certificado, cfg.TimeOut)); case ServicoNFe.NfeRecepcao: return(new NfeRecepcao2(url, certificado, cfg.TimeOut)); case ServicoNFe.NfeRetRecepcao: return(new NfeRetRecepcao2(url, certificado, cfg.TimeOut)); case ServicoNFe.NFeAutorizacao: throw new Exception(string.Format("O serviço {0} não pode ser criado no método {1}!", servico, MethodBase.GetCurrentMethod().Name)); case ServicoNFe.NFeRetAutorizacao: if (cfg.IsSvanNFe4()) { return(new NfeRetAutorizacao4SVAN(url, certificado, cfg.TimeOut)); } if (cfg.VersaoNFeRetAutorizacao == VersaoServico.ve400) { return(new NfeRetAutorizacao4(url, certificado, cfg.TimeOut)); } if (cfg.cUF == Estado.PR & cfg.VersaoNFeAutorizacao == VersaoServico.ve310) { return(new NfeRetAutorizacao3(url, certificado, cfg.TimeOut)); } return(new NfeRetAutorizacao(url, certificado, cfg.TimeOut)); case ServicoNFe.NfeInutilizacao: if (cfg.IsSvanNFe4()) { return(new NFeInutilizacao4SVAN(url, certificado, cfg.TimeOut)); } if (cfg.VersaoNfeStatusServico == VersaoServico.ve400) { return(new NFeInutilizacao4(url, certificado, cfg.TimeOut)); } if (cfg.cUF == Estado.PR & cfg.VersaoNfeStatusServico == VersaoServico.ve310) { return(new NfeInutilizacao3(url, certificado, cfg.TimeOut)); } if (cfg.cUF == Estado.BA & cfg.VersaoNfeStatusServico == VersaoServico.ve310 & cfg.ModeloDocumento == ModeloDocumento.NFe) { return(new NfeInutilizacao(url, certificado, cfg.TimeOut)); } return(new NfeInutilizacao2(url, certificado, cfg.TimeOut)); case ServicoNFe.RecepcaoEventoCancelmento: case ServicoNFe.RecepcaoEventoCartaCorrecao: if (cfg.IsSvanNFe4()) { return(new RecepcaoEvento4SVAN(url, certificado, cfg.TimeOut)); } if (cfg.VersaoRecepcaoEventoCceCancelamento == VersaoServico.ve400) { return(new RecepcaoEvento4(url, certificado, cfg.TimeOut)); } return(new RecepcaoEvento(url, certificado, cfg.TimeOut)); case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: { if (cfg.VersaoRecepcaoEventoManifestacaoDestinatario == VersaoServico.ve400) { return(new RecepcaoEvento4AN(url, certificado, cfg.TimeOut)); } return(new RecepcaoEvento(url, certificado, cfg.TimeOut)); } case ServicoNFe.RecepcaoEventoEpec: return(new RecepcaoEPEC(url, certificado, cfg.TimeOut)); case ServicoNFe.NfeConsultaCadastro: switch (cfg.cUF) { case Estado.CE: return(new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, certificado, cfg.TimeOut)); } if (cfg.VersaoNfeConsultaCadastro == VersaoServico.ve400) { return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro4(url, certificado, cfg.TimeOut)); } return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, certificado, cfg.TimeOut)); case ServicoNFe.NfeDownloadNF: return(new NfeDownloadNF(url, certificado, cfg.TimeOut)); case ServicoNFe.NfceAdministracaoCSC: return(new NfceCsc(url, certificado, cfg.TimeOut)); case ServicoNFe.NFeDistribuicaoDFe: return(new NfeDistDFeInteresse(url, certificado, cfg.TimeOut)); } return(null); }