Пример #1
0
        /// <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;
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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;
        }
Пример #6
0
        /// <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);
            }
        }
Пример #7
0
        /// <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;
        }
Пример #8
0
 /// <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() + ")");
     }
 }
Пример #9
0
        /// <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 });
        }
Пример #10
0
 /// <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");
 }
Пример #11
0
        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);
            }
        }
Пример #12
0
        /// <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);
            }
        }
Пример #13
0
 /// <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);
 }
Пример #14
0
        /// <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 });
            }
        }
Пример #15
0
 private void DirecionarArquivo(Empresa empresa, string arquivoXmlEnvio, string localSalvarXmlRetorno, object nfe, string metodo)
 {
     //Processa ou envia o XML
     EnviarArquivo(empresa, arquivoXmlEnvio, localSalvarXmlRetorno, nfe, metodo);
 }
Пример #16
0
        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);
            }
        }
Пример #17
0
 public abstract void Execute(Empresa empresa);