/// <summary> /// Fazer a leitura do conteúdo do XML de consulta lote rps e disponibilizar conteúdo em um objeto para analise /// </summary> /// <param name="arquivoXML">Arquivo XML que é para efetuar a leitura</param> public void PedLoteRps(string arquivoXML, Core.Empresa empresa) { oDadosPedLoteRps = new DadosPedLoteRps(empresa); XmlDocument doc = new XmlDocument(); doc.Load(arquivoXML); XmlNodeList infConsList = doc.GetElementsByTagName("ConsultarLoteRpsEnvio"); foreach (XmlNode infConsNode in infConsList) { XmlElement infConsElemento = (XmlElement)infConsNode; oDadosPedLoteRps.Protocolo = infConsElemento.GetElementsByTagName("Protocolo")[0].InnerText; XmlElement infPrestadorElemento = (XmlElement)infConsElemento.GetElementsByTagName("Prestador").Item(0); if (infPrestadorElemento.GetElementsByTagName("tipos:Cnpj")[0] != null) { oDadosPedLoteRps.Cnpj = infPrestadorElemento.GetElementsByTagName("tipos:Cnpj")[0].InnerText; } else if (infPrestadorElemento.GetElementsByTagName("Cnpj")[0] != null) { oDadosPedLoteRps.Cnpj = infPrestadorElemento.GetElementsByTagName("Cnpj")[0].InnerText; } if (infPrestadorElemento.GetElementsByTagName("tipos:InscricaoMunicipal")[0] != null) { oDadosPedLoteRps.InscricaoMunicipal = infPrestadorElemento.GetElementsByTagName("tipos:InscricaoMunicipal")[0].InnerText; } else if (infPrestadorElemento.GetElementsByTagName("InscricaoMunicipal")[0] != null) { oDadosPedLoteRps.InscricaoMunicipal = infPrestadorElemento.GetElementsByTagName("InscricaoMunicipal")[0].InnerText; } } }
public override void Execute(Empresa empresa) { //Definir o serviço que será executado para a classe Servico = Servicos.ConsultarURLNfse; oDadosPedURLNfse = new DadosPedSitNfse(empresa); //Ler o XML para pegar parâmetros de envio PedURLNfse(NomeArquivoXML); //Criar objetos das classes dos serviços dos webservices do SEFAZ WebServiceProxy wsProxy = null; object pedURLNfse = null; string cabecMsg = ""; PadroesNFSe padraoNFSe = Functions.PadraoNFSe(/*ler.*/oDadosPedURLNfse.cMunicipio); switch (padraoNFSe) { case PadroesNFSe.ISSNET: case PadroesNFSe.GIF: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedURLNfse.cMunicipio, oDadosPedURLNfse.tpAmb, oDadosPedURLNfse.tpEmis); pedURLNfse = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedURLNfse.cMunicipio)); break; default: throw new Exception("Não foi possível detectar o padrão da NFS-e."); } //Assinar o XML AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, empresa, Convert.ToInt32(oDadosPedURLNfse.cMunicipio)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.InvocarNFSe(wsProxy, pedURLNfse, NomeMetodoWS(Servico, oDadosPedURLNfse.cMunicipio, empresa.tpAmb), cabecMsg, this, "-ped-urlnfse", "-urlnfse", padraoNFSe, Servico, empresa); }
public void ProcessaArquivo(Empresa empresa, string arquivoXmlEnvio, string localSalvarXmlRetorno, Servicos servico) { if (servico == Servicos.Nulo) throw new Exception("Não pode identificar o tipo de serviço baseado no arquivo " + arquivoXmlEnvio); NFSE.Net.Core.ConfiguracaoApp.ValidarConfig(empresa); NFSE.Net.Core.ConfiguracaoApp.CarregarDados(); if (Propriedade.TipoAplicativo == TipoAplicativo.Nfse) { #region Executar o serviço da NFS-e switch (servico) { case Servicos.ConsultarLoteRps: CertVencido(empresa); IsConnectedToInternet(); this.DirecionarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, new TaskConsultarLoteRps()); break; case Servicos.CancelarNfse: CertVencido(empresa); IsConnectedToInternet(); this.DirecionarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, new TaskCancelarNfse()); break; case Servicos.ConsultarSituacaoLoteRps: CertVencido(empresa); IsConnectedToInternet(); this.DirecionarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, new TaskConsultaSituacaoLoteRps()); break; case Servicos.ConsultarNfse: CertVencido(empresa); IsConnectedToInternet(); this.DirecionarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, new TaskConsultarNfse()); break; case Servicos.ConsultarNfsePorRps: CertVencido(empresa); IsConnectedToInternet(); this.DirecionarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, new TaskConsultarNfsePorRps()); break; case Servicos.RecepcionarLoteRps: CertVencido(empresa); IsConnectedToInternet(); this.DirecionarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, new TaskRecepcionarLoteRps()); break; case Servicos.ConsultarURLNfse: CertVencido(empresa); IsConnectedToInternet(); this.DirecionarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, new TaskConsultarURLNfse()); break; } #endregion } }
public static void SalvarNovaEmpresa(Core.Empresa empresa, string cnpj, string nome) { string caminhoConfiguracaoEmpresa = System.IO.Path.Combine(Propriedade.PastaExecutavel, cnpj, "nfse", Propriedade.NomeArqConfig); if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(caminhoConfiguracaoEmpresa))) { System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(caminhoConfiguracaoEmpresa)); } if (System.IO.File.Exists(Propriedade.NomeArqEmpresa)) { var serializar = new Layouts.Serializador(); bool erro; var empresas = serializar.TryLerXml <Empresas>(Propriedade.NomeArqEmpresa, out erro); if (erro) { empresas = new Empresas(); } if (!empresas.ListaEmpresas.Exists(x => x.Cnpj == cnpj)) { empresas.ListaEmpresas.Add(new InfoEmpresa() { Cnpj = cnpj, Nome = nome }); } serializar.SalvarXml <Empresas>(empresas, Propriedade.NomeArqEmpresa); serializar.SalvarXml <Core.Empresa>(empresa, caminhoConfiguracaoEmpresa); } else { var serializar = new Layouts.Serializador(); var dicionarioEmpresas = new List <InfoEmpresa>(); dicionarioEmpresas.Add(new InfoEmpresa() { Cnpj = cnpj, Nome = nome }); serializar.SalvarXml <Empresas>(new Empresas() { ListaEmpresas = dicionarioEmpresas }, Propriedade.NomeArqEmpresa); serializar.SalvarXml <Core.Empresa>(empresa, caminhoConfiguracaoEmpresa); } }
public static X509Certificate2 BuscaConfiguracaoCertificado(Empresa empresa) { //Ajustar o certificado digital de String para o tipo X509Certificate2 X509Store store = new X509Store("MY", StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates; X509Certificate2Collection collection1 = new X509Certificate2Collection(); if (!string.IsNullOrEmpty(empresa.CertificadoThumbPrint)) collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByThumbprint, empresa.CertificadoThumbPrint, false); else if (!string.IsNullOrWhiteSpace(empresa.Certificado)) collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindBySubjectDistinguishedName, empresa.Certificado, false); for (int i = 0; i < collection1.Count; i++) { //Verificar a validade do certificado if (DateTime.Compare(DateTime.Now, collection1[i].NotAfter) == -1) { empresa.X509Certificado = collection1[i]; break; } } if (empresa.X509Certificado == null && !string.IsNullOrWhiteSpace(empresa.CertificadoArquivo)) { try { using (FileStream fs = new FileStream(empresa.CertificadoArquivo, FileMode.Open)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); empresa.X509Certificado = new X509Certificate2(buffer, empresa.CertificadoSenha); } } catch (System.Security.Cryptography.CryptographicException e) { empresa.ErrosValidacao.Add(e.Message); } catch (System.IO.DirectoryNotFoundException d) { empresa.ErrosValidacao.Add(d.Message); } catch (System.IO.FileNotFoundException f) { empresa.ErrosValidacao.Add(f.Message); } catch (Exception) { empresa.ErrosValidacao.Add("Configurações do certificado são inválidas."); } } return empresa.X509Certificado; }
/// <summary> /// Verifica se algumas das informações das configurações tem algum problema ou falha /// </summary> /// <param name="validarCertificado">Se valida se tem certificado informado ou não nas configurações</param> public static void ValidarConfig(Empresa empresaValidar) { empresaValidar.ErrosValidacao.Clear(); #region Verificar se o certificado foi informado string aplicacao = "NF-e"; switch (Propriedade.TipoAplicativo) { case TipoAplicativo.Nfse: aplicacao = "NFS-e"; break; } if (empresaValidar.CertificadoInstalado && empresaValidar.CertificadoThumbPrint.Equals(string.Empty)) { empresaValidar.ErrosValidacao.Add("Selecione o certificado digital a ser utilizado na autenticação dos serviços da " + aplicacao + ".\r\n" + empresaValidar.Nome + "\r\n" + empresaValidar.CNPJ); } if (!empresaValidar.CertificadoInstalado) { if (empresaValidar.CertificadoArquivo.Equals(string.Empty)) { empresaValidar.ErrosValidacao.Add("Informe o local de armazenamento do certificado digital a ser utilizado na autenticação dos serviços da " + aplicacao + ".\r\n" + empresaValidar.Nome + "\r\n" + empresaValidar.CNPJ); } else if (!File.Exists(empresaValidar.CertificadoArquivo)) { empresaValidar.ErrosValidacao.Add("Arquivo do certificado digital a ser utilizado na autenticação dos serviços da " + aplicacao + " não foi encontrado.\r\n" + empresaValidar.Nome + "\r\n" + empresaValidar.CNPJ); } else if (empresaValidar.CertificadoSenha.Equals(string.Empty)) { empresaValidar.ErrosValidacao.Add("Informe a senha do certificado digital a ser utilizado na autenticação dos serviços da " + aplicacao + ".\r\n" + empresaValidar.Nome + "\r\n" + empresaValidar.CNPJ); } else { try { using (FileStream fs = new FileStream(empresaValidar.CertificadoArquivo, FileMode.Open)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); empresaValidar.X509Certificado = new X509Certificate2(buffer, empresaValidar.CertificadoSenha, X509KeyStorageFlags.MachineKeySet); } } catch (System.Security.Cryptography.CryptographicException ex) { empresaValidar.ErrosValidacao.Add(ex.Message + ".\r\n" + empresaValidar.Nome + "\r\n" + empresaValidar.CNPJ); } catch (Exception ex) { empresaValidar.ErrosValidacao.Add(ex.Message + ".\r\n" + empresaValidar.Nome + "\r\n" + empresaValidar.CNPJ); } } } #endregion if (empresaValidar.ErrosValidacao.Count > 0) { string mensagemCompleta = "Erros de validação. Consulta a lista de erros:\r\n"; foreach (var item in empresaValidar.ErrosValidacao) { mensagemCompleta += "\u2022 " + item; } throw new Exception(mensagemCompleta); } }
/// <summary> /// Certificado digita está vencido ou não /// </summary> /// <param name="emp">Empresa que é para ser verificado o certificado</param> /// <returns>true = Certificado Vencido</returns> public bool Vencido(Empresa empresa) { bool retorna = false; PrepInfCertificado(empresa.X509Certificado); if (lLocalizouCertificado == true) { if (DateTime.Compare(DateTime.Now, dValidadeFinal) > 0) { retorna = true; } } return retorna; }
/// <summary> /// Verificar se o certificado digital está vencido /// </summary> /// <param name="emp">Empresa que é para ser verificado o certificado digital</param> /// <remarks> /// Retorna uma exceção ExceptionCertificadoDigital caso o certificado esteja vencido /// </remarks> protected void CertVencido(Empresa empresa) { CertificadoDigital CertDig = new CertificadoDigital(); if (CertDig.Vencido(empresa)) { throw new ExceptionCertificadoDigital(ErroPadrao.CertificadoVencido, "(" + CertDig.dValidadeInicial.ToString() + " a " + CertDig.dValidadeFinal.ToString() + ")"); } }
/// <summary> /// Analisa o tipo do XML que está na pasta de envio e executa a operação necessária. Exemplo: Envia ao SEFAZ, reconfigura o UniNFE, etc... /// </summary> /// <param name="cArquivo">Nome do arquivo XML a ser enviado ou analisado</param> /// <param name="oNfe">Objeto da classe UniNfeClass a ser utilizado nas operações</param> private void EnviarArquivo(Empresa empresa, string arquivoXmlEnvio, string localSalvarXmlRetorno, Object nfe, string metodo) { //Definir o tipo do serviço Type tipoServico = nfe.GetType(); //Definir o arquivo XML para a classe UniNfeClass tipoServico.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.SetProperty, null, nfe, new object[] { arquivoXmlEnvio }); tipoServico.InvokeMember("SalvarXmlRetornoEm", System.Reflection.BindingFlags.SetProperty, null, nfe, new object[] { localSalvarXmlRetorno }); tipoServico.InvokeMember(metodo, System.Reflection.BindingFlags.InvokeMethod, null, nfe, new[] { empresa }); }
/// <summary> /// Direcionar o arquivo /// </summary> /// <param name="arquivos">Arquivo</param> /// <param name="metodo">Método a ser executado do serviço da NFe</param> /// <param name="nfe">Objeto do serviço da NFe a ser executado</param> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 18/04/2011 /// </remarks> private void DirecionarArquivo(Empresa empresa, string arquivoXmlEnvio, string localSalvarXmlRetorno, object taskClass) { //Processa ou envia o XML EnviarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, taskClass, "Execute"); }
public override void Execute(Empresa empresa) { //Definir o serviço que será executado para a classe Servico = Servicos.RecepcionarLoteRps; oDadosEnvLoteRps = new DadosEnvLoteRps(empresa); //Ler o XML para pegar parâmetros de envio //LerXML ler = new LerXML(); /*ler.*/ EnvLoteRps(empresa, NomeArquivoXML); //Criar objetos das classes dos serviços dos webservices do SEFAZ WebServiceProxy wsProxy = null; object envLoteRps = null; string cabecMsg = ""; //PadroesNFSe padraoNFSe = Functions.PadraoNFSe(/*ler.*/oDadosPedSitLoteRps.cMunicipio); PadroesNFSe padraoNFSe = Functions.PadraoNFSe(/*ler.*/oDadosEnvLoteRps.cMunicipio); switch (padraoNFSe) { case PadroesNFSe.IPM: //código da cidade da receita federal, este arquivo pode ser encontrado em ~\uninfe\doc\Codigos_Cidades_Receita_Federal.xls</para> //O código da cidade está hardcoded pois ainda está sendo usado apenas para campo mourão // Resgatar o caminho para salvar o xml de retorno IPM ipm = new IPM(empresa.UsuarioWS, empresa.SenhaWS, 7483, this.SalvarXmlRetornoEm); ipm.EmitirNF(NomeArquivoXML, (TpAmb)empresa.tpAmb); break; case PadroesNFSe.GINFES: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); cabecMsg = "<ns2:cabecalho versao=\"3\" xmlns:ns2=\"http://www.ginfes.com.br/cabecalho_v03.xsd\"><versaoDados>3</versaoDados></ns2:cabecalho>"; break; case PadroesNFSe.BETHA: wsProxy = new WebServiceProxy(empresa.X509Certificado); wsProxy.Betha = new Betha(); break; case PadroesNFSe.THEMA: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); break; case PadroesNFSe.CANOAS_RS: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); cabecMsg = "<cabecalho versao=\"201001\"><versaoDados>V2010</versaoDados></cabecalho>"; break; case PadroesNFSe.ISSNET: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosEnvLoteRps.cMunicipio)); break; case PadroesNFSe.ISSONLINE: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosEnvLoteRps.cMunicipio)); break; case PadroesNFSe.BLUMENAU_SC: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosEnvLoteRps.cMunicipio)); #region Encriptar tag <Assinatura> EncryptAssinatura(empresa); #endregion break; case PadroesNFSe.BHISS: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosEnvLoteRps.cMunicipio)); cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.GIF: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis, padraoNFSe); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); break; case PadroesNFSe.DUETO: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis, padraoNFSe); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); break; case PadroesNFSe.WEBISS: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis, padraoNFSe); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.PAULISTANA: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosEnvLoteRps.cMunicipio)); #region Encriptar tag <Assinatura> EncryptAssinatura(empresa); #endregion break; case PadroesNFSe.SALVADOR_BA: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis, padraoNFSe); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); break; case PadroesNFSe.PORTOVELHENSE: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); cabecMsg = "<cabecalho versao=\"2.00\" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.00</versaoDados></cabecalho>"; break; case PadroesNFSe.PRONIN: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosEnvLoteRps.cMunicipio, /*ler.*/oDadosEnvLoteRps.tpAmb, /*ler.*/oDadosEnvLoteRps.tpEmis, padraoNFSe); envLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio)); break; default: throw new Exception("Não foi possível detectar o padrão da NFS-e."); } if (padraoNFSe != PadroesNFSe.IPM) { //Assinar o XML AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, empresa, Convert.ToInt32(/*ler.*/oDadosEnvLoteRps.cMunicipio)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.InvocarNFSe(wsProxy, envLoteRps, NomeMetodoWS(Servico, /*ler.*/oDadosEnvLoteRps.cMunicipio, empresa.tpAmb), cabecMsg, this, "-env-loterps", "-ret-loterps", padraoNFSe, Servico, empresa); } }
/// <summary> /// Fazer a leitura do conteúdo do XML de consulta nfse por rps e disponibiliza conteúdo em um objeto para analise /// </summary> /// <param name="arquivoXML">Arquivo XML que é para efetuar a leitura</param> public void PedSitNfseRps(string arquivoXML, Core.Empresa empresa) { oDadosPedSitNfseRps = new DadosPedSitNfseRps(empresa); }
/// <summary> /// Metodo responsável por invocar o serviço do WebService do SEFAZ /// </summary> /// <param name="oWSProxy">Objeto da classe construida do WSDL</param> /// <param name="oServicoWS">Objeto da classe de envio do XML</param> /// <param name="cMetodo">Método da classe de envio do XML que faz o envio</param> /// <param name="cabecMsg">Objeto da classe de cabecalho do serviço</param> /// <param name="oServicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param> /// <param name="cFinalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param> /// <param name="cFinalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 17/03/2010 /// </remarks> public void InvocarNFSe(WebServiceProxy oWSProxy, object oServicoWS, string cMetodo, string cabecMsg, object oServicoNFe, string cFinalArqEnvio, string cFinalArqRetorno, PadroesNFSe padraoNFSe, Servicos servicoNFSe, Core.Empresa empresa) { XmlDocument docXML = new XmlDocument(); // Definir o tipo de serviço da NFe Type typeServicoNFe = oServicoNFe.GetType(); // Resgatar o nome do arquivo XML a ser enviado para o webservice string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null)); // Resgatar o caminho para salvar o xml de retorno string caminhoSalvarXmlRetorno = (string)(typeServicoNFe.InvokeMember("SalvarXmlRetornoEm", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null)); // Validar o Arquivo XML ValidarXML validar = new ValidarXML(XmlNfeDadosMsg, empresa.CodigoMunicipio); string cResultadoValidacao = validar.ValidarArqXML(XmlNfeDadosMsg); if (cResultadoValidacao != "") { throw new Exception(cResultadoValidacao); } // Montar o XML de Lote de envio de Notas fiscais docXML.Load(XmlNfeDadosMsg); // Definir Proxy if (ConfiguracaoApp.Proxy) { if (padraoNFSe != PadroesNFSe.BETHA) { oWSProxy.SetProp(oServicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta)); } else { oWSProxy.Betha.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); } } // Limpa a variável de retorno string strRetorno = string.Empty; //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009 //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento. if (padraoNFSe != PadroesNFSe.BETHA) { oWSProxy.SetProp(oServicoWS, "Timeout", 60000); } //Invocar o membro switch (padraoNFSe) { #region Padrão BETHA case PadroesNFSe.BETHA: switch (cMetodo) { case "ConsultarSituacaoLoteRps": strRetorno = oWSProxy.Betha.ConsultarSituacaoLoteRps(docXML, empresa.tpAmb); break; case "ConsultarLoteRps": strRetorno = oWSProxy.Betha.ConsultarLoteRps(docXML, empresa.tpAmb); break; case "CancelarNfse": strRetorno = oWSProxy.Betha.CancelarNfse(docXML, empresa.tpAmb); break; case "ConsultarNfse": strRetorno = oWSProxy.Betha.ConsultarNfse(docXML, empresa.tpAmb); break; case "ConsultarNfsePorRps": strRetorno = oWSProxy.Betha.ConsultarNfsePorRps(docXML, empresa.tpAmb); break; case "RecepcionarLoteRps": strRetorno = oWSProxy.Betha.RecepcionarLoteRps(docXML, empresa.tpAmb); break; } break; #endregion #region Padrão ISSONLINE case PadroesNFSe.ISSONLINE: int operacao; string senhaWs = Functions.GetMD5Hash(empresa.SenhaWS); switch (servicoNFSe) { case Servicos.RecepcionarLoteRps: operacao = 1; break; case Servicos.CancelarNfse: operacao = 2; break; default: operacao = 3; break; } strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Convert.ToSByte(operacao), empresa.UsuarioWS, senhaWs, docXML.OuterXml }); break; #endregion #region Padrão Blumenau-SC case PadroesNFSe.BLUMENAU_SC: strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { 1, docXML.OuterXml }); break; #endregion #region Padrão Paulistana case PadroesNFSe.PAULISTANA: strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { 1, docXML.OuterXml }); break; #endregion #region Demais padrões case PadroesNFSe.GINFES: case PadroesNFSe.THEMA: case PadroesNFSe.SALVADOR_BA: case PadroesNFSe.CANOAS_RS: case PadroesNFSe.ISSNET: case PadroesNFSe.DUETO: default: if (string.IsNullOrEmpty(cabecMsg)) { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { docXML.OuterXml }); } else { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { cabecMsg.ToString(), docXML.OuterXml }); } break; #endregion } //Atualizar o atributo do serviço da Nfe com o conteúdo retornado do webservice do sefaz typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, oServicoNFe, new object[] { strRetorno }); // Registra o retorno de acordo com o status obtido if (cFinalArqEnvio != string.Empty && cFinalArqRetorno != string.Empty) { typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, oServicoNFe, new Object[] { cFinalArqEnvio + ".xml", caminhoSalvarXmlRetorno }); } }
private void DirecionarArquivo(Empresa empresa, string arquivoXmlEnvio, string localSalvarXmlRetorno, object nfe, string metodo) { //Processa ou envia o XML EnviarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, nfe, metodo); }
public override void Execute(Empresa empresa) { //Definir o serviço que será executado para a classe Servico = Servicos.ConsultarNfse; oDadosPedSitNfse = new DadosPedSitNfse(empresa); //Ler o XML para pegar parâmetros de envio //LerXML ler = new LerXML(); /*ler.*/ PedSitNfse(NomeArquivoXML); //Criar objetos das classes dos serviços dos webservices do SEFAZ WebServiceProxy wsProxy = null; object pedLoteRps = null; string cabecMsg = ""; PadroesNFSe padraoNFSe = Functions.PadraoNFSe(/*ler.*/oDadosPedSitNfse.cMunicipio); switch (padraoNFSe) { case PadroesNFSe.GINFES: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosPedSitNfse.cMunicipio, /*ler.*/oDadosPedSitNfse.tpAmb, /*ler.*/oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosPedSitNfse.cMunicipio)); cabecMsg = "<ns2:cabecalho versao=\"3\" xmlns:ns2=\"http://www.ginfes.com.br/cabecalho_v03.xsd\"><versaoDados>3</versaoDados></ns2:cabecalho>"; break; case PadroesNFSe.BETHA: wsProxy = new WebServiceProxy(empresa.X509Certificado); wsProxy.Betha = new Betha(); break; case PadroesNFSe.THEMA: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosPedSitNfse.cMunicipio, /*ler.*/oDadosPedSitNfse.tpAmb, /*ler.*/oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosPedSitNfse.cMunicipio)); break; case PadroesNFSe.CANOAS_RS: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, /*ler.*/oDadosPedSitNfse.cMunicipio, /*ler.*/oDadosPedSitNfse.tpAmb, /*ler.*/oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, /*ler.*/oDadosPedSitNfse.cMunicipio)); cabecMsg = "<cabecalho versao=\"201001\"><versaoDados>V2010</versaoDados></cabecalho>"; break; case PadroesNFSe.ISSNET: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); break; case PadroesNFSe.BLUMENAU_SC: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); break; case PadroesNFSe.BHISS: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.GIF: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); break; case PadroesNFSe.DUETO: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis, padraoNFSe); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); break; case PadroesNFSe.WEBISS: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis, padraoNFSe); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.PAULISTANA: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); break; case PadroesNFSe.SALVADOR_BA: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis, padraoNFSe); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); break; case PadroesNFSe.PORTOVELHENSE: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis, padraoNFSe); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); cabecMsg = "<cabecalho versao=\"2.00\" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.00</versaoDados></cabecalho>"; break; case PadroesNFSe.PRONIN: wsProxy = ConfiguracaoApp.DefinirWS(Servico, empresa, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis, padraoNFSe); pedLoteRps = wsProxy.CriarObjeto(NomeClasseWS(Servico, oDadosPedSitNfse.cMunicipio)); break; default: throw new Exception("Não foi possível detectar o padrão da NFS-e."); } if (padraoNFSe != PadroesNFSe.IPM) { //Assinar o XML AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, empresa, Convert.ToInt32(/*ler.*/oDadosPedSitNfse.cMunicipio)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.InvocarNFSe(wsProxy, pedLoteRps, NomeMetodoWS(Servico, /*ler.*/oDadosPedSitNfse.cMunicipio, empresa.tpAmb), cabecMsg, this, "-ped-sitnfse", "-sitnfse", padraoNFSe, Servico, empresa); } }
public abstract void Execute(Empresa empresa);