示例#1
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosPedSit = new DadosPedSit();
                //Ler o XML para pegar parâmetros de envio
                PedSit(emp, dadosPedSit);// NomeArquivoXML);

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedSit.cUF, dadosPedSit.tpAmb, dadosPedSit.tpEmis);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                object oConsulta = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);//NomeClasseWS(Servico, dadosPedSit.cUF));
                object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedSit.cUF, Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), dadosPedSit.cUF.ToString());
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLMDFePedSit);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy,
                                    oConsulta,
                                    wsProxy.NomeMetodoWS[0],//NomeMetodoWS(Servico, dadosPedSit.cUF),
                                    oCabecMsg, this);

                //Efetuar a leitura do retorno da situação para ver se foi autorizada ou não
                //Na versão 1 não posso gerar o -procNfe, ou vou ter que tratar a estrutura do XML de acordo com a versão, a consulta na versão 1 é somente para obter o resultado mesmo.
                LerRetornoSitMDFe(dadosPedSit.chNFe);

                //Gerar o retorno para o ERP
                oGerarXML.XmlRetorno(Propriedade.ExtEnvio.PedSit_XML, Propriedade.ExtRetorno.Sit_XML, this.vStrXmlRetorno);
            }
            catch (Exception ex)
            {
                try
                {
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.PedSit_XML, Propriedade.ExtRetorno.Sit_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de pedido da consulta da situação da NFe, infelizmente
                    //não posso fazser mais nada, o UniNFe vai tentar mantar o arquivo novamente para o webservice, pois ainda não foi excluido.
                    //Wandrey 22/03/2010
                }
            }
        }
        /// <summary>
        /// Executa o serviço solicitado
        /// </summary>
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosPedSta = new DadosPedSta();
                //Ler o XML para pegar parâmetros de envio
                PedSta(emp, dadosPedSta);

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedSta.cUF, dadosPedSta.tpAmb, dadosPedSta.tpEmis, 0);
                System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedSta.cUF, dadosPedSta.tpAmb, dadosPedSta.tpEmis, Servico);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                var statusServico = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var cabecMsg      = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedSta.cUF, Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(cabecMsg, TpcnResources.cUF.ToString(), dadosPedSta.cUF.ToString());
                wsProxy.SetProp(cabecMsg, TpcnResources.versaoDados.ToString(), dadosPedSta.versao);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy, statusServico, wsProxy.NomeMetodoWS[0], cabecMsg, this,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioXML,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).RetornoXML,
                                    true,
                                    securityProtocolType);
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML,
                                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioXML,
                                                    Propriedade.ExtRetorno.Sta_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    //Deletar o arquivo de solicitação do serviço
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de solicitação do serviço,
                    //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar
                    //o arquivo novamente para o webservice
                    //Wandrey 09/03/2010
                }
            }
        }
示例#3
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            //Definir o serviço que será executado para a classe
            Servico = Servicos.MDFePedidoSituacaoLote;

            try
            {
                #region Parte do código que envia o XML de pedido de consulta do recibo
                dadosPedRec = new DadosPedRecClass();
                PedRec(emp, NomeArquivoXML);

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedRec.cUF, dadosPedRec.tpAmb, dadosPedRec.tpEmis);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                var oRepRecepcao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);//NomeClasseWS(Servico, dadosPedRec.cUF));
                var oCabecMsg    = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedRec.cUF, Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), dadosPedRec.cUF.ToString());
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLMDFePedRec);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy,
                                    oRepRecepcao,
                                    wsProxy.NomeMetodoWS[0],//NomeMetodoWS(Servico, dadosPedRec.cUF),
                                    oCabecMsg, this);
                #endregion

                #region Parte do código que trata o XML de retorno da consulta do recibo
                //Efetuar a leituras das notas do lote para ver se foi autorizada ou não
                LerRetornoLoteMDFe();

                //Gravar o XML retornado pelo WebService do SEFAZ na pasta de retorno para o ERP
                //Tem que ser feito neste ponto, pois somente aqui terminamos todo o processo
                //Wandrey 18/06/2009
                oGerarXML.XmlRetorno(Propriedade.ExtEnvio.PedRec_XML, Propriedade.ExtRetorno.ProRec_XML, vStrXmlRetorno);
                #endregion
            }
            catch (Exception ex)
            {
                try
                {
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.PedRec_XML, Propriedade.ExtRetorno.ProRec_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Pois ocorreu algum erro de rede, hd, permissão das pastas, etc. Wandrey 22/03/2010
                }
            }
            finally
            {
                //Deletar o arquivo de solicitação do serviço
                Functions.DeletarArquivo(NomeArquivoXML);
            }
        }
示例#4
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosPedInut = new DadosPedInut(emp);
                PedInut(emp);

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedInut.cUF, dadosPedInut.tpAmb, dadosPedInut.tpEmis, 0);
                System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedInut.cUF, dadosPedInut.tpAmb, dadosPedInut.tpEmis, Servico);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                object oInutilizacao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);//NomeClasseWS(Servico, dadosPedInut.cUF));
                object oCabecMsg     = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedInut.cUF, Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), dadosPedInut.cUF.ToString());
                wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), dadosPedInut.versao);

                //Criar objeto da classe de assinatura digita
                AssinaturaDigital oAD = new AssinaturaDigital();

                //Assinar o XML
                oAD.Assinar(ConteudoXML, emp, Convert.ToInt32(dadosPedInut.cUF));

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy,
                                    oInutilizacao,
                                    wsProxy.NomeMetodoWS[0],//NomeMetodoWS(Servico, dadosPedInut.cUF),
                                    oCabecMsg,
                                    this,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioXML,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).RetornoXML,
                                    true,
                                    securityProtocolType);

                //Ler o retorno do webservice
                this.LerRetornoInut();
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioXML,
                                                    Propriedade.ExtRetorno.Inu_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
        }
示例#5
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            //Definir o serviço que será executado para a classe
            Servico = Servicos.CTeConsultaStatusServico;

            try
            {
                dadosPedSta = new DadosPedSta();
                //Ler o XML para pegar parâmetros de envio
                PedSta(emp, dadosPedSta);//NomeArquivoXML);

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedSta.cUF, dadosPedSta.tpAmb, dadosPedSta.tpEmis);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                var oStatusServico = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var oCabecMsg      = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedSta.cUF, Servico, dadosPedSta.tpEmis));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), dadosPedSta.cUF.ToString());
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLCTeStatusServico);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy, oStatusServico, wsProxy.NomeMetodoWS[0], oCabecMsg, this, "-ped-sta", "-sta");
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.PedSta_XML, Propriedade.ExtRetorno.Sta_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    //Deletar o arquivo de solicitação do serviço
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de solicitação do serviço,
                    //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar
                    //o arquivo novamente para o webservice
                    //Wandrey 09/03/2010
                }
            }
        }
示例#6
0
        private void AddProxyUser()
        {
            if (!String.IsNullOrEmpty(ProxyUser))
            {
                System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ProxyUser, ProxyPass, ProxyServer);
                System.Net.WebRequest.DefaultWebProxy.Credentials = credentials;

                WebServiceProxy wsp = new WebServiceProxy(Certificate as X509Certificate2);

                wsp.SetProp(govDigitalService, "Proxy", Components.Proxy.DefinirProxy(ProxyServer, ProxyUser, ProxyPass, 8080));
            }
        }
示例#7
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosRec = new DadosRecClass();
                FluxoNfe oFluxoNfe = new FluxoNfe();
                LerXML   oLer      = new LerXML();

                //Ler o XML de Lote para pegar o número do lote que está sendo enviado
                oLer.Nfe(NomeArquivoXML);

                if (oLer.oDadosNfe.versao != "2.00")
                {
                    Servico = Servicos.NFeEnviarLote2;
                }

                var idLote = oLer.oDadosNfe.idLote;

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp,
                                                                    Convert.ToInt32(oLer.oDadosNfe.cUF),
                                                                    Convert.ToInt32(oLer.oDadosNfe.tpAmb),
                                                                    Convert.ToInt32(oLer.oDadosNfe.tpEmis),
                                                                    oLer.oDadosNfe.versao,
                                                                    oLer.oDadosNfe.mod);
                System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(Convert.ToInt32(oLer.oDadosNfe.cUF), Convert.ToInt32(oLer.oDadosNfe.tpAmb), Convert.ToInt32(oLer.oDadosNfe.tpEmis), PadroesNFSe.NaoIdentificado, Servico);

                if (Empresas.Configuracoes[emp].CompactarNfe && oLer.oDadosNfe.versao != "2.00" && wsProxy.NomeMetodoWS.Length == 2)
                {
                    Servico = Servicos.NFeEnviarLoteZip2;
                }

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                object oRecepcao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var    oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(Convert.ToInt32(oLer.oDadosNfe.cUF), Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), oLer.oDadosNfe.cUF);
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), oLer.oDadosNfe.versao);

                //XML neste ponto a NFe já está assinada, pois foi assinada, validada e montado o lote para envio por outro serviço.
                //Fica aqui somente este lembrete. Wandrey 16/03/2010

                // Envio de NFe Compactada - Renan 29/04/2014
                if (Servico == Servicos.NFeEnviarLoteZip2)
                {
                    FileInfo dadosArquivo = new FileInfo(NomeArquivoXML);
                    TFunctions.CompressXML(dadosArquivo);
                }

                string nOperacao = wsProxy.NomeMetodoWS[(Servico == Servicos.NFeEnviarLoteZip2) ? 1 : 0];

                //Invocar o método que envia o XML para o SEFAZ
                if (Empresas.Configuracoes[emp].IndSinc && oLer.oDadosNfe.versao != "2.00" && oLer.oDadosNfe.indSinc)
                {
                    //Não posso gerar o arquivo na pasta de retorno através do método Invocar, por isso não estou colocando os dois ultimos parâmetros com a definição dos prefixos dos arquivos. O arquivo de retorno no processo síncrono deve acontecer somente depois de finalizado o processo da nota, ou gera problemas. Wandrey 11/06/2015
                    oInvocarObj.Invocar(wsProxy,
                                        oRecepcao,
                                        nOperacao,
                                        oCabecMsg,
                                        this,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).RetornoXML,
                                        false,
                                        securityProtocolType);

                    Protocolo(vStrXmlRetorno);
                }
                else
                {
                    oInvocarObj.Invocar(wsProxy,
                                        oRecepcao,
                                        nOperacao,
                                        oCabecMsg,
                                        this,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML,
                                        Propriedade.ExtRetorno.Rec,
                                        true,
                                        securityProtocolType);

                    Recibo(vStrXmlRetorno);
                }

                if (dadosRec.cStat == "104") //Lote processado - Processo da NFe Síncrono - Wandrey 13/03/2014
                {
                    FinalizarNFeSincrono(vStrXmlRetorno, emp);

                    oGerarXML.XmlRetorno(Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).RetornoXML, vStrXmlRetorno);
                }
                else if (dadosRec.cStat == "103") //Lote recebido com sucesso - Processo da NFe Assíncrono
                {
                    //Atualizar o número do recibo no XML de controle do fluxo de notas enviadas
                    oFluxoNfe.AtualizarTag(oLer.oDadosNfe.chavenfe, FluxoNfe.ElementoEditavel.tMed, dadosRec.tMed.ToString());
                    oFluxoNfe.AtualizarTagRec(idLote, dadosRec.nRec);
                }
                else if (Convert.ToInt32(dadosRec.cStat) > 200 ||
                         Convert.ToInt32(dadosRec.cStat) == 108 || //Verifica se o servidor de processamento está paralisado momentaneamente. Wandrey 13/04/2012
                         Convert.ToInt32(dadosRec.cStat) == 109)   //Verifica se o servidor de processamento está paralisado sem previsão. Wandrey 13/04/2012
                {
                    if (Empresas.Configuracoes[emp].IndSinc && oLer.oDadosNfe.versao != "2.00" && oLer.oDadosNfe.indSinc)
                    {
                        // OPS!!! Processo sincrono rejeição da SEFAZ, temos que gravar o XML para o ERP, pois no processo síncrono isso não pode ser feito dentro do método Invocar
                        oGerarXML.XmlRetorno(Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).RetornoXML /*.ExtRetorno.ProRec_XML*/, vStrXmlRetorno);
                    }
                    //Se o status do retorno do lote for maior que 200 ou for igual a 108 ou 109,
                    //vamos ter que excluir a nota do fluxo, porque ela foi rejeitada pelo SEFAZ
                    //Primeiro vamos mover o xml da nota da pasta EmProcessamento para pasta de XML´s com erro e depois a tira do fluxo
                    //Wandrey 30/04/2009
                    oAux.MoveArqErro(Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + oFluxoNfe.LerTag(oLer.oDadosNfe.chavenfe, FluxoNfe.ElementoFixo.ArqNFe));
                    oFluxoNfe.ExcluirNfeFluxo(oLer.oDadosNfe.chavenfe);
                }

                //Deleta o arquivo de lote
                Functions.DeletarArquivo(NomeArquivoXML);

                // Envio de NFe Compactada - Renan 29/04/2014
                if (Servico == Servicos.NFeEnviarLoteZip2)
                {
                    Functions.DeletarArquivo(NomeArquivoXML + ".gz");
                }
            }
            catch (ExceptionEnvioXML ex)
            {
                TrataException(emp, ex);
            }
            catch (ExceptionSemInternet ex)
            {
                TrataException(emp, ex);
            }
            catch (Exception ex)
            {
                TrataException(emp, ex);
            }
        }
示例#8
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            Servico = Servicos.NFeConsultaNFDest;

            try
            {
                oDadosConsultaNFeDest = new DadosConsultaNFeDest();
                //Ler o XML para pegar parâmetros de envio
                EnvConsultaNFeDest(emp, NomeArquivoXML);

                if (vXmlNfeDadosMsgEhXML)
                {
                    int cUF = Empresas.Configuracoes[emp].UnidadeFederativaCodigo;

                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, cUF, oDadosConsultaNFeDest.tpAmb);
                    System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(cUF, oDadosConsultaNFeDest.tpAmb, (int)TipoEmissao.teNormal, PadroesNFSe.NaoIdentificado, Servico);

                    object oConsNFDestEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                    object oCabecMsg         = wsProxy.CriarObjeto(NomeClasseCabecWS(cUF, Servico));

                    //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), cUF.ToString());
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLEnvConsultaNFeDest);

                    //Invocar o método que envia o XML para o SEFAZ
                    oInvocarObj.Invocar(wsProxy,
                                        oConsNFDestEvento,
                                        wsProxy.NomeMetodoWS[0],
                                        oCabecMsg,
                                        this,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioXML,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).RetornoXML,
                                        true,
                                        securityProtocolType);

                    //Ler o retorno
                    this.LerRetornoConsultaNFeDest(emp);
                }
                else
                {
                    string f = Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioTXT) + Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioXML;

                    if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f);
                    }
                    // Gerar o XML de eventos a partir do TXT gerado pelo ERP
                    oGerarXML.EnvioConsultaNFeDest(f, oDadosConsultaNFeDest);
                }
            }
            catch (Exception ex)
            {
                try
                {
                    var ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioXML :
                                 Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioTXT;
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.retConsNFeDest_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de evento, infelizmente
                    //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido.
                    //Wandrey 09/03/2010
                }
            }
        }
示例#9
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            //Definir o serviço que será executado para a classe
            Servico = Servicos.DPECEnviar;

            try
            {
                dadosEnvDPEC = new DadosEnvDPEC();
                //Ler o XML para pegar parâmetros de envio
                EnvDPEC(emp, NomeArquivoXML); //danasa 21/10/2010

                if (vXmlNfeDadosMsgEhXML)     //danasa 12-9-2009
                {
                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servicos.DPECEnviar, emp, dadosEnvDPEC.cUF, dadosEnvDPEC.tpAmb, dadosEnvDPEC.tpEmis);

                    //Criar objetos das classes dos serviços dos webservices do SEFAZ
                    object oRecepcaoDPEC = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);// "SCERecepcaoRFB");
                    object oCabecMsg     = wsProxy.CriarObjeto("sceCabecMsg");

                    //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                    //oWSProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), /*oLer.*/dadosEnvDPEC.cUF.ToString());
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLEnvDPEC);

                    //Criar objeto da classe de assinatura digita
                    AssinaturaDigital oAD = new AssinaturaDigital();

                    //Assinar o XML
                    oAD.Assinar(NomeArquivoXML, emp, Convert.ToInt32(dadosEnvDPEC.cUF));

                    //Invocar o método que envia o XML para o SEFAZ
                    oInvocarObj.Invocar(wsProxy, oRecepcaoDPEC, wsProxy.NomeMetodoWS[0] /*"sceRecepcaoDPEC"*/, oCabecMsg, this);

                    //Ler o retorno
                    LerRetDPEC();

                    //Gravar o XML retornado pelo WebService do SEFAZ na pasta de retorno para o ERP
                    //Tem que ser feito neste ponto, pois somente aqui terminamos todo o processo
                    oGerarXML.XmlRetorno(Propriedade.ExtEnvio.EnvDPEC_XML, Propriedade.ExtRetorno.retDPEC_XML, vStrXmlRetorno);
                }
                else
                {
                    // Gerar o XML de solicitacao de situacao do servico a partir do TXT gerado pelo ERP
                    oGerarXML.EnvioDPEC(Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml", /*oLer.*/ dadosEnvDPEC);
                }
            }
            catch (Exception ex)
            {
                var ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvDPEC_XML : Propriedade.ExtEnvio.EnvDPEC_TXT;

                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.retDPEC_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de cancelamento de NFe, infelizmente
                    //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido.
                    //Wandrey 09/03/2010
                }
            }
        }
示例#10
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                oDadosenvDownload = new DadosenvDownload();
                EnvDownloadNFe(emp, NomeArquivoXML);

                if (vXmlNfeDadosMsgEhXML)
                {
                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, Convert.ToInt32(oDadosenvDownload.chNFe.Substring(0, 2)), oDadosenvDownload.tpAmb, 0);
                    System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(Convert.ToInt32(oDadosenvDownload.chNFe.Substring(0, 2)), oDadosenvDownload.tpAmb, (int)TipoEmissao.teNormal, Servico);

                    //Criar objetos das classes dos serviços dos webservices do SEFAZ
                    object oDownloadEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                    object oCabecMsg       = wsProxy.CriarObjeto(NomeClasseCabecWS(Convert.ToInt32(oDadosenvDownload.chNFe.Substring(0, 2)), Servico));

                    //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                    wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), oDadosenvDownload.chNFe.Substring(0, 2));
                    wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), ConvertTxt.versoes.VersaoXMLEnvDownload);

                    //Invocar o método que envia o XML para o SEFAZ
                    oInvocarObj.Invocar(wsProxy,
                                        oDownloadEvento,
                                        wsProxy.NomeMetodoWS[0],
                                        oCabecMsg,
                                        this,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).EnvioXML,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).RetornoXML,
                                        false,
                                        securityProtocolType);
                    //Ler o retorno
                    LerRetornoDownloadNFe(emp);

                    //Gravar o xml de retorno para o ERP. Não pode gravar antes de extrair os downloads, para que o ERP saiba quando realmente terminou. Wandrey 03/04/2013
                    oGerarXML.XmlRetorno(Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).EnvioXML,
                                         Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).RetornoXML, vStrXmlRetorno);
                }
                else
                {
                    // Gerar o XML de eventos a partir do TXT gerado pelo ERP
                    oGerarXML.EnvioDownloadNFe(Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).EnvioTXT) +
                                               Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).EnvioXML, oDadosenvDownload);
                }
            }
            catch (Exception ex)
            {
                try
                {
                    var ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).EnvioXML :
                                 Propriedade.Extensao(Propriedade.TipoEnvio.EnvDownload).EnvioTXT;
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.retDownload_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de evento, infelizmente
                    //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido.
                    //Wandrey 09/03/2010
                }
            }
        }
示例#11
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosPedInut = new DadosPedInut(emp);
                PedInut(emp, NomeArquivoXML);

                if (vXmlNfeDadosMsgEhXML)  //danasa 12-9-2009
                {
                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedInut.cUF, dadosPedInut.tpAmb, dadosPedInut.tpEmis, dadosPedInut.versao, dadosPedInut.mod.ToString());
                    System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedInut.cUF, dadosPedInut.tpAmb, dadosPedInut.tpEmis, PadroesNFSe.NaoIdentificado, Servico);

                    //Criar objetos das classes dos serviços dos webservices do SEFAZ
                    object oInutilizacao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                    object oCabecMsg     = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedInut.cUF, Servico));

                    //Atribuir conteúdo p ara duas propriedades da classe nfeCabecMsg
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), dadosPedInut.cUF.ToString());
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), dadosPedInut.versao);

                    //Criar objeto da classe de assinatura digita
                    AssinaturaDigital oAD = new AssinaturaDigital();

                    //Assinar o XML
                    oAD.Assinar(NomeArquivoXML, emp, Convert.ToInt32(dadosPedInut.cUF));

                    //Invocar o método que envia o XML para o SEFAZ
                    oInvocarObj.Invocar(wsProxy,
                                        oInutilizacao,
                                        wsProxy.NomeMetodoWS[0],
                                        oCabecMsg, this,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioXML,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).RetornoXML,
                                        true,
                                        securityProtocolType);

                    //Ler o retorno do webservice
                    LerRetornoInut();
                }
                else
                {
                    string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml";

                    if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f);
                    }
                    oGerarXML.Inutilizacao(f,
                                           dadosPedInut.tpAmb,
                                           dadosPedInut.tpEmis,
                                           dadosPedInut.cUF,
                                           dadosPedInut.ano,
                                           dadosPedInut.CNPJ,
                                           dadosPedInut.mod,
                                           dadosPedInut.serie,
                                           dadosPedInut.nNFIni,
                                           dadosPedInut.nNFFin,
                                           dadosPedInut.xJust,
                                           dadosPedInut.versao);
                }
            }
            catch (Exception ex)
            {
                string ExtRet = string.Empty;

                if (vXmlNfeDadosMsgEhXML) //Se for XML
                {
                    ExtRet = Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioXML;
                }
                else //Se for TXT
                {
                    ExtRet = Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioTXT;
                }

                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.Inu_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    if (!vXmlNfeDadosMsgEhXML) //Se for o TXT para ser transformado em XML, vamos excluir o TXT depois de gerado o XML
                    {
                        Functions.DeletarArquivo(NomeArquivoXML);
                    }
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de inutilização, infelizmente não posso
                    //fazer mais nada. Com certeza o uninfe sendo restabelecido novamente vai tentar enviar o mesmo
                    //xml de inutilização para o SEFAZ. Este erro pode ocorrer por falha no HD, rede, Permissão de pastas, etc. Wandrey 23/03/2010
                }
            }
        }
示例#12
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 Invocar(WebServiceProxy oWSProxy,
                            object oServicoWS,
                            string cMetodo,
                            object cabecMsg,
                            object oServicoNFe,
                            string cFinalArqEnvio,
                            string cFinalArqRetorno)
        {
            int emp = Empresas.FindEmpresaByThread();

            XmlDocument docXML = new XmlDocument();

            // Definir o tipo de serviço da NFe
            Type typeServicoNFe = oServicoNFe.GetType();

            Servicos servico = (Servicos)oWSProxy.GetProp(oServicoNFe, NFe.Components.NFeStrConstants.Servico);

            // 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));

            // Exclui o Arquivo de Erro
            Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, cFinalArqEnvio + ".xml") + cFinalArqRetorno + ".err");

            // Validar o Arquivo XML
            ValidarXML validar = new ValidarXML(XmlNfeDadosMsg, Empresas.Configuracoes[emp].UnidadeFederativaCodigo);

            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)
            {
                oWSProxy.SetProp(oServicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta));
            }

            // Limpa a variável de retorno
            XmlNode XmlRetorno = null;
            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.
            oWSProxy.SetProp(oServicoWS, "Timeout", 60000);

            //Verificar antes se tem conexão com a internet, se não tiver já gera uma exceção no padrão já esperado pelo ERP
            if (ConfiguracaoApp.ChecarConexaoInternet)
            {
                if (!Functions.IsConnectedToInternet())
                {
                    //Registrar o erro da validação para o sistema ERP
                    throw new ExceptionSemInternet(ErroPadrao.FalhaInternet, "\r\nArquivo: " + XmlNfeDadosMsg);
                }
            }
            //Atribuir conteúdo para uma propriedade da classe NfeStatusServico2
            if (cMetodo.Substring(0, 3).ToLower() == "sce") // DPEC
            {
                oWSProxy.SetProp(oServicoWS, "sceCabecMsgValue", cabecMsg);
            }
            else
            {
                switch (servico)
                {
                case Servicos.MDFePedidoConsultaSituacao:
                case Servicos.MDFePedidoSituacaoLote:
                case Servicos.MDFeEnviarLote:
                case Servicos.MDFeConsultaStatusServico:
                case Servicos.MDFeRecepcaoEvento:
                case Servicos.MDFeConsultaNaoEncerrado:
                    oWSProxy.SetProp(oServicoWS, "mdfeCabecMsgValue", cabecMsg);
                    break;

                case Servicos.CTeInutilizarNumeros:
                case Servicos.CTePedidoConsultaSituacao:
                case Servicos.CTePedidoSituacaoLote:
                case Servicos.CTeEnviarLote:
                case Servicos.CTeRecepcaoEvento:
                case Servicos.CTeConsultaStatusServico:
                    if (oWSProxy.GetProp(cabecMsg, NFe.Components.TpcnResources.cUF.ToString()).ToString() == "50")     //Mato Grosso do Sul fugiu o padrão nacional
                    {
                        try
                        {
                            oWSProxy.SetProp(oServicoWS, "cteCabecMsg", cabecMsg);
                        }
                        catch     //Se der erro é pq não está no ambiente normal então tem que ser o nome padrão pois Mato Grosso do Sul fugiu o padrão nacional.
                        {
                            oWSProxy.SetProp(oServicoWS, "cteCabecMsgValue", cabecMsg);
                        }
                    }
                    else
                    {
                        oWSProxy.SetProp(oServicoWS, "cteCabecMsgValue", cabecMsg);
                    }
                    break;

                case Servicos.DFeEnviar:
                    break;

                    /*default:
                     *      oWSProxy.SetProp(oServicoWS, "nfeCabecMsgValue", cabecMsg);
                     *  break;*/
                }
            }

            // Envio da NFe Compactada - Renan
            if (servico == Servicos.NFeEnviarLoteZip2)
            {
                XmlNfeDadosMsg = XmlNfeDadosMsg + ".gz";
                FileInfo XMLNfeZip   = new FileInfo(XmlNfeDadosMsg);
                string   encodedData = StreamExtensions.ToBase64(XMLNfeZip);
                XmlRetorno = oWSProxy.InvokeXML(oServicoWS, cMetodo, new object[] { encodedData });
            }
            else
            {
                XmlRetorno = oWSProxy.InvokeXML(oServicoWS, cMetodo, new object[] { docXML });
            }

            if (XmlRetorno == null)
            {
                throw new Exception("Erro de envio da solicitação do serviço: " + servico.ToString());
            }

            typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, oServicoNFe, new object[] { XmlRetorno.OuterXml });

            // 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", cFinalArqRetorno + ".xml" });
            }
        }
示例#13
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosRec = new DadosRecClass();
                FluxoNfe fluxoNfe = new FluxoNfe();
                LerXML   lerXml   = new LerXML();

                //Ler o XML de Lote para pegar o número do lote que está sendo enviado
                lerXml.Cte(ConteudoXML);

                var idLote = lerXml.oDadosNfe.idLote;

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(
                    Servico,
                    emp,
                    Convert.ToInt32(lerXml.oDadosNfe.cUF),
                    Convert.ToInt32(lerXml.oDadosNfe.tpAmb),
                    Convert.ToInt32(lerXml.oDadosNfe.tpEmis),
                    0);
                System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(Convert.ToInt32(lerXml.oDadosNfe.cUF), Convert.ToInt32(lerXml.oDadosNfe.tpAmb), Convert.ToInt32(lerXml.oDadosNfe.tpEmis), Servico);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                object oRecepcao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var    oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(Convert.ToInt32(lerXml.oDadosNfe.cUF), Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), lerXml.oDadosNfe.cUF);
                wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), lerXml.oDadosNfe.versao);

                //Criar objeto da classe de assinatura digita
                AssinaturaDigital oAD = new AssinaturaDigital();

                //Assinar o XML
                oAD.Assinar(ConteudoXML, emp, Convert.ToInt32(lerXml.oDadosNfe.cUF));

                //Mover o arquivo para a pasta em processamento
                Empresas.Configuracoes[emp].CriarSubPastaEnviado();
                string       arqEmProcessamento = Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + Path.GetFileName(NomeArquivoXML);
                StreamWriter sw = File.CreateText(arqEmProcessamento);
                sw.Write(ConteudoXML.OuterXml);
                sw.Close();

                if (File.Exists(arqEmProcessamento))
                {
                    File.Delete(NomeArquivoXML);
                    NomeArquivoXML = arqEmProcessamento;
                }

                NumeroLote = oGerarXML.GerarLoteCTeOS(NomeArquivoXML);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy,
                                    oRecepcao,
                                    wsProxy.NomeMetodoWS[0],
                                    oCabecMsg, this,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).RetornoXML,
                                    false,
                                    securityProtocolType);

                #region Parte que trata o retorno do lote, ou seja, o número do recibo

                LerRetorno(emp);

                //Gravar o XML retornado pelo WebService do SEFAZ na pasta de retorno para o ERP
                //Tem que ser feito neste ponto, pois somente aqui terminamos todo o processo
                oGerarXML.XmlRetorno(Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML,
                                     Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).RetornoXML,
                                     vStrXmlRetorno,
                                     Empresas.Configuracoes[emp].PastaXmlRetorno,
                                     NumeroLote.ToString("000000000000000") + Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML);

                #endregion Parte que trata o retorno do lote, ou seja, o número do recibo
            }
            catch (ExceptionEnvioXML ex)
            {
                //Ocorreu algum erro no exato momento em que tentou enviar o XML para o SEFAZ, vou ter que tratar
                //para ver se o XML chegou lá ou não, se eu consegui pegar o número do recibo de volta ou não, etc.
                //E ver se vamos tirar o XML do Fluxo ou finalizar ele com a consulta situação da NFe
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML, Propriedade.ExtRetorno.ProRec_ERR, ex, NumeroLote.ToString("000000000000000") + Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
            catch (ExceptionSemInternet ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML, Propriedade.ExtRetorno.ProRec_ERR, ex, NumeroLote.ToString("000000000000000") + Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML, Propriedade.ExtRetorno.ProRec_ERR, ex, NumeroLote.ToString("000000000000000") + Propriedade.Extensao(Propriedade.TipoEnvio.CTeOS).EnvioXML);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
        }
示例#14
0
        /// <summary>
        /// Metodo responsável por invocar o serviço do WebService do SEFAZ
        /// </summary>
        /// <param name="wsProxy">Objeto da classe construida do WSDL</param>
        /// <param name="servicoWS">Objeto da classe de envio do XML</param>
        /// <param name="metodo">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="servicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param>
        /// <param name="finalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param>
        /// <param name="finalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param>
        /// <param name="gravaRetorno">Grava o arquivo de retorno para o ERP na execução deste método?</param>
        public void Invocar(WebServiceProxy wsProxy,
                            object servicoWS,
                            string metodo,
                            object cabecMsg,
                            object servicoNFe,
                            string finalArqEnvio,
                            string finalArqRetorno,
                            bool gravaRetorno,
                            SecurityProtocolType securityProtocolType)
        {
            int emp = Empresas.FindEmpresaByThread();

            finalArqEnvio   = Functions.ExtractExtension(finalArqEnvio);
            finalArqRetorno = Functions.ExtractExtension(finalArqRetorno);

            XmlDocument docXML = new XmlDocument();

            // Definir o tipo de serviço da NFe
            Type typeServicoNFe = servicoNFe.GetType();

            Servicos servico = (Servicos)wsProxy.GetProp(servicoNFe, NFeStrConstants.Servico);

            docXML = (XmlDocument)(typeServicoNFe.InvokeMember("ConteudoXML", System.Reflection.BindingFlags.GetField, null, servicoNFe, null));

            // Resgatar o nome do arquivo XML a ser enviado para o webservice
            string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, servicoNFe, null));

            // Exclui o Arquivo de Erro
            Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, finalArqEnvio + ".xml") + finalArqRetorno + ".err");

            if (docXML == null)
            {
                docXML.Load(XmlNfeDadosMsg);
            }

            // Validar o Arquivo XML
            switch (servico)
            {
            case Servicos.NFeEnviarLote:
            case Servicos.NFeEnviarLoteZip:
            case Servicos.CTeEnviarLote:
            case Servicos.MDFeEnviarLote:
                //XML de NFe, CTe e MDFe, na montagem do lote eu valido o XML antes, como o lote quem monta é o XML entendo que não está montando errado, sendo assim, não vou validar novamente o XML para ganhar desempenho. Wandrey 18/09/2016
                break;

            default:
                ValidarXML validar             = new ValidarXML(docXML, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, false);
                string     cResultadoValidacao = validar.ValidarArqXML(docXML, XmlNfeDadosMsg);
                if (cResultadoValidacao != "")
                {
                    throw new Exception(cResultadoValidacao);
                }
                break;
            }

            // Definir Proxy
            if (ConfiguracaoApp.Proxy)
            {
                wsProxy.SetProp(servicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta, ConfiguracaoApp.DetectarConfiguracaoProxyAuto));
            }

            // Limpa a variável de retorno
            XmlNode XmlRetorno = null;
            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.
            wsProxy.SetProp(servicoWS, "Timeout", 60000);

            if (cabecMsg != null)
            {
                switch (servico)
                {
                case Servicos.MDFePedidoConsultaSituacao:
                case Servicos.MDFePedidoSituacaoLote:
                case Servicos.MDFeEnviarLote:
                case Servicos.MDFeConsultaStatusServico:
                case Servicos.MDFeRecepcaoEvento:
                case Servicos.MDFeConsultaNaoEncerrado:
                    wsProxy.SetProp(servicoWS, "mdfeCabecMsgValue", cabecMsg);
                    break;

                case Servicos.CTeInutilizarNumeros:
                case Servicos.CTePedidoConsultaSituacao:
                case Servicos.CTePedidoSituacaoLote:
                case Servicos.CTeEnviarLote:
                case Servicos.CTeRecepcaoEvento:
                case Servicos.CTeConsultaStatusServico:
                case Servicos.CteRecepcaoOS:
                    if (wsProxy.GetProp(cabecMsg, TpcnResources.cUF.ToString()).ToString() == "50")     //Mato Grosso do Sul fugiu o padrão nacional
                    {
                        try
                        {
                            wsProxy.SetProp(servicoWS, "cteCabecMsg", cabecMsg);
                        }
                        catch     //Se der erro é pq não está no ambiente normal então tem que ser o nome padrão pois Mato Grosso do Sul fugiu o padrão nacional.
                        {
                            wsProxy.SetProp(servicoWS, "cteCabecMsgValue", cabecMsg);
                        }
                    }
                    else
                    {
                        wsProxy.SetProp(servicoWS, "cteCabecMsgValue", cabecMsg);
                    }
                    break;

                case Servicos.CTeDistribuicaoDFe:
                case Servicos.DFeEnviar:
                    break;

                case Servicos.LMCAutorizacao:
                    break;

                default:
                    wsProxy.SetProp(servicoWS, "nfeCabecMsgValue", cabecMsg);
                    break;
                }
            }

            //Definir novamente o protocolo de segurança, pois é uma propriedade estática e o seu valor pode ser alterado antes do envio. Wandrey 03/05/2016
            ServicePointManager.SecurityProtocol = securityProtocolType;

            // Envio da NFe Compactada - Renan
            if (servico == Servicos.NFeEnviarLoteZip)
            {
                string encodedData = TFunctions.CompressXML(docXML);

                XmlRetorno = wsProxy.InvokeXML(servicoWS, metodo, new object[] { encodedData });
            }
            else
            {
                XmlRetorno = wsProxy.InvokeXML(servicoWS, metodo, new object[] { docXML });
            }

            if (XmlRetorno == null)
            {
                throw new Exception("Erro de envio da solicitação do serviço: " + servico.ToString());
            }

            typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, servicoNFe, new object[] { XmlRetorno.OuterXml });

            // Registra o retorno de acordo com o status obtido
            if (gravaRetorno)
            {
                typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, servicoNFe, new Object[] { finalArqEnvio + ".xml", finalArqRetorno + ".xml" });
            }
        }
示例#15
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosPedSit = new DadosPedSit();
                PedSit(emp, dadosPedSit);

                if (vXmlNfeDadosMsgEhXML)
                {
                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedSit.cUF, dadosPedSit.tpAmb, dadosPedSit.tpEmis, dadosPedSit.versao, dadosPedSit.mod, 0);
                    System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedSit.cUF, dadosPedSit.tpAmb, dadosPedSit.tpEmis, Servico);

                    //Criar objetos das classes dos serviços dos webservices do SEFAZ
                    object oConsulta = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);

                    object oCabecMsg = null;
                    if (dadosPedSit.versao != "4.00")
                    {
                        oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedSit.cUF, Servico));
                        wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), dadosPedSit.cUF.ToString());
                        wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), dadosPedSit.versao);
                    }

                    new AssinaturaDigital().CarregarPIN(emp, NomeArquivoXML, Servico);

                    //Invocar o método que envia o XML para o SEFAZ
                    oInvocarObj.Invocar(wsProxy, oConsulta, wsProxy.NomeMetodoWS[0], oCabecMsg, this,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioXML,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).RetornoXML,
                                        false,
                                        securityProtocolType);

                    //Efetuar a leitura do retorno da situação para ver se foi autorizada ou não
                    //Na versão 1 não posso gerar o -procNfe, ou vou ter que tratar a estrutura do XML de acordo com a versão, a consulta na versão 1 é somente para obter o resultado mesmo.
                    LerRetornoSitNFe(dadosPedSit.chNFe);

                    //Gerar o retorno para o ERP
                    oGerarXML.XmlRetorno(Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioXML,
                                         Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).RetornoXML, this.vStrXmlRetorno);
                }
                else
                {
                    string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml";

                    if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f);
                    }
                    oGerarXML.Consulta(TipoAplicativo.Nfe, f,
                                       dadosPedSit.tpAmb,
                                       dadosPedSit.tpEmis,
                                       dadosPedSit.chNFe,
                                       dadosPedSit.versao);
                }
            }
            catch (Exception ex)
            {
                string ExtEnvio = string.Empty;

                if (this.vXmlNfeDadosMsgEhXML) //Se for XML
                {
                    ExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioXML;
                }
                else //Se for TXT
                {
                    ExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioTXT;
                }

                try
                {
                    TFunctions.GravarArqErroServico(NomeArquivoXML, ExtEnvio, Propriedade.ExtRetorno.Sit_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de pedido da consulta da situação da NFe, infelizmente
                    //não posso fazser mais nada, o UniNFe vai tentar mantar o arquivo novamente para o webservice, pois ainda não foi excluido.
                    //Wandrey 22/03/2010
                }
            }
        }
示例#16
0
        public void Execute(int emp)
        {
            try
            {
                #region Parte do código que envia o XML de pedido de consulta do recibo

                dadosPedRec = new DadosPedRecClass();
                PedRec(emp);

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedRec.cUF, dadosPedRec.tpAmb, dadosPedRec.tpEmis, 0);
                System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedRec.cUF, dadosPedRec.tpAmb, dadosPedRec.tpEmis, Servico);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                var oRepRecepcao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var oCabecMsg    = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedRec.cUF, Servico, dadosPedRec.tpEmis));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), dadosPedRec.cUF.ToString());
                wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), dadosPedRec.versao);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy,
                                    oRepRecepcao,
                                    wsProxy.NomeMetodoWS[0],
                                    oCabecMsg,
                                    this,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).EnvioXML,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).RetornoXML,
                                    false,
                                    securityProtocolType);

                #endregion Parte do código que envia o XML de pedido de consulta do recibo

                #region Parte do código que trata o XML de retorno da consulta do recibo

                //Efetuar a leituras das notas do lote para ver se foi autorizada ou não
                LerRetornoLoteCTe(emp);

                //Gravar o XML retornado pelo WebService do SEFAZ na pasta de retorno para o ERP
                //Tem que ser feito neste ponto, pois somente aqui terminamos todo o processo
                //Wandrey 18/06/2009
                oGerarXML.XmlRetorno(Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).RetornoXML, vStrXmlRetorno);

                #endregion Parte do código que trata o XML de retorno da consulta do recibo
            }
            catch (Exception ex)
            {
                try
                {
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedRec).EnvioXML, Propriedade.ExtRetorno.ProRec_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Pois ocorreu algum erro de rede, hd, permissão das pastas, etc. Wandrey 22/03/2010
                }
            }
            finally
            {
                //Deletar o arquivo de solicitação do serviço
                Functions.DeletarArquivo(NomeArquivoXML);
            }
        }
示例#17
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                //Ler o XML para pegar parâmetros de envio
                EnvEvento(emp, dadosEnvEvento);

                string currentEvento = dadosEnvEvento.eventos[0].tpEvento;
                // mudei para aqui caso haja erro e qdo for gravar o arquivo de erro precisamos saber qual o servico
                switch (NFe.Components.EnumHelper.StringToEnum <NFe.ConvertTxt.tpEventos>(currentEvento))
                {
                case ConvertTxt.tpEventos.tpEvCancelamentoNFe:
                    Servico = Servicos.EventoCancelamento;
                    break;

                case ConvertTxt.tpEventos.tpEvCCe:
                    Servico = Servicos.EventoCCe;
                    break;

                case ConvertTxt.tpEventos.tpEvEPEC:
                    Servico = Servicos.EventoEPEC;
                    break;

                case ConvertTxt.tpEventos.tpEvPedProrrogacao_ICMS_1:
                case ConvertTxt.tpEventos.tpEvPedProrrogacao_ICMS_2:
                case ConvertTxt.tpEventos.tpEvCancPedProrrogacao_ICMS_1:
                case ConvertTxt.tpEventos.tpEvCancPedProrrogacao_ICMS_2:
                case ConvertTxt.tpEventos.tpEvFiscoRespCancPedProrrogacao_ICMS_1:
                case ConvertTxt.tpEventos.tpEvFiscoRespCancPedProrrogacao_ICMS_2:
                case ConvertTxt.tpEventos.tpEvFiscoRespPedProrrogacao_ICMS_1:
                case ConvertTxt.tpEventos.tpEvFiscoRespPedProrrogacao_ICMS_2:
                    Servico = Servicos.EventoRecepcao;
                    break;

                default:
                    Servico = Servicos.EventoManifestacaoDest;
                    break;
                }
                ValidaEvento(emp, dadosEnvEvento);

                //Pegar o estado da chave, pois na cOrgao pode vir o estado 91 - Wandreuy 22/08/2012
                int cOrgao = dadosEnvEvento.eventos[0].cOrgao;
                //vai pegar o ambiente da Chave da Nfe autorizada p/ corrigir tpEmis
                int tpEmis   = this.dadosEnvEvento.eventos[0].tpEmis; //Convert.ToInt32(this.dadosEnvEvento.eventos[0].chNFe.Substring(34, 1));
                int ufParaWS = cOrgao;

                //Se o cOrgao for igual a 91 tenho que mudar a ufParaWS para que na hora de buscar o WSDL para conectar ao serviço, ele consiga encontrar. Wandrey 23/01/2013
                if (cOrgao == 91)
                {
                    ufParaWS = Convert.ToInt32(dadosEnvEvento.eventos[0].chNFe.Substring(0, 2));
                }

                switch (Servico)
                {
                case Servicos.EventoCancelamento:
                    switch ((NFe.Components.TipoEmissao)tpEmis)
                    {
                    case NFe.Components.TipoEmissao.teSVCAN:
                    case NFe.Components.TipoEmissao.teSVCRS:
                    case NFe.Components.TipoEmissao.teSVCSP:
                    case NFe.Components.TipoEmissao.teNormal:
                        //Se a nota fiscal foi emitida em ambiente NORMAL, o cancelamento tem que ir para o ambiente normal ou gera uma rejeição. Wandrey 15/02/2013
                        break;

                    default:
                        //Os demais tipos de emissão tem que sempre ir para o ambiente NORMAL. Wandrey 22/02/2013
                        tpEmis = (int)NFe.Components.TipoEmissao.teNormal;
                        break;
                    }
                    break;

                case Servicos.EventoCCe:
                    //CCe só existe no ambiente Normal. Wandrey 22/04/2013
                    tpEmis = (int)NFe.Components.TipoEmissao.teNormal;
                    break;
                }

                if (vXmlNfeDadosMsgEhXML)
                {
                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(
                        Servico,
                        emp,
                        ufParaWS,
                        dadosEnvEvento.eventos[0].tpAmb,
                        tpEmis,
                        string.Empty,
                        dadosEnvEvento.eventos[0].mod);
                    System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(ufParaWS, dadosEnvEvento.eventos[0].tpAmb, tpEmis, PadroesNFSe.NaoIdentificado, Servico);

                    //Criar objetos das classes dos serviços dos webservices do SEFAZ
                    object oRecepcaoEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                    object oCabecMsg       = wsProxy.CriarObjeto(NomeClasseCabecWS(cOrgao, Servico));
                    string xmlExtEnvio     = string.Empty;
                    string xmlExtRetorno   = string.Empty;

                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), cOrgao.ToString());
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLEvento);

                    if (novaNomenclatura)
                    {
                        xmlExtEnvio   = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioXML.Replace(".xml", "");
                        xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).RetornoXML.Replace(".xml", "");
                    }
                    else
                    {
                        switch (Servico)
                        {
                        case Servicos.EventoCCe:
                            xmlExtEnvio   = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML.Replace(".xml", "");
                            xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).RetornoXML.Replace(".xml", "");
                            break;

                        case Servicos.EventoCancelamento:
                            xmlExtEnvio   = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML.Replace(".xml", "");
                            xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).RetornoXML.Replace(".xml", "");
                            break;

                        default:
                            xmlExtEnvio   = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML.Replace(".xml", "");
                            xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).RetornoXML.Replace(".xml", "");
                            break;
                        }
                    }

                    //Criar objeto da classe de assinatura digital
                    AssinaturaDigital oAD = new AssinaturaDigital();

                    //Assinar o XML
                    oAD.Assinar(NomeArquivoXML, emp, cOrgao);

                    oInvocarObj.Invocar(wsProxy, oRecepcaoEvento, wsProxy.NomeMetodoWS[0], oCabecMsg, this, xmlExtEnvio, xmlExtRetorno, true, securityProtocolType);

                    //Ler o retorno
                    LerRetornoEvento(emp);
                }
                else
                {
                    // Gerar o XML de eventos a partir do TXT gerado pelo ERP
                    string xmlFileExt    = string.Empty;
                    string xmlFileExtTXT = string.Empty;
                    if (novaNomenclatura)
                    {
                        xmlFileExt    = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioXML;
                        xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioTXT;
                    }
                    else
                    {
                        switch (Servico)
                        {
                        case Servicos.EventoCCe:
                            xmlFileExt    = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML;
                            xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioTXT;
                            break;

                        case Servicos.EventoCancelamento:
                            xmlFileExt    = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML;
                            xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioTXT;
                            break;

                        default:
                            xmlFileExt    = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML;
                            xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioTXT;
                            break;
                        }
                    }
                    string f = Functions.ExtrairNomeArq(NomeArquivoXML, xmlFileExtTXT) + xmlFileExt;

                    if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f);
                    }
                    oGerarXML.EnvioEvento(f, dadosEnvEvento);
                }
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    string ExtRet     = string.Empty;
                    string ExtRetorno = string.Empty;

                    if (novaNomenclatura)
                    {
                        ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioXML :
                                 Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioTXT;
                        ExtRetorno = Propriedade.ExtRetorno.Eve_ERR;
                    }
                    else
                    {
                        if (Servico == Servicos.Nulo)
                        {
                            // pode ter vindo de um txt e houve erro
                            if (NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML) ||
                                NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioTXT))
                            {
                                Servico = Servicos.EventoCCe;
                            }
                            else
                            if (NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML) ||
                                NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioTXT))
                            {
                                Servico = Servicos.EventoManifestacaoDest;
                            }
                            else
                            if (NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML) ||
                                NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioTXT))
                            {
                                Servico = Servicos.EventoCancelamento;
                            }
                        }

                        switch (Servico)
                        {
                        case Servicos.EventoCCe:
                            ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML :
                                     Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioTXT;
                            ExtRetorno = Propriedade.ExtRetorno.retEnvCCe_ERR;
                            break;

                        case Servicos.EventoCancelamento:
                            ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML :
                                     Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioTXT;
                            ExtRetorno = Propriedade.ExtRetorno.retCancelamento_ERR;
                            break;

                        case Servicos.EventoManifestacaoDest:
                            ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML :
                                     Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioTXT;
                            ExtRetorno = Propriedade.ExtRetorno.retManifestacao_ERR;
                            break;

                        default:
                            throw new Exception("Nao pode identificar o tipo de serviço para o arquivo: " + NomeArquivoXML);
                        }
                    }

                    if (ExtRetorno != string.Empty)
                    {
                        TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, ExtRetorno, ex);
                    }
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de evento, infelizmente
                    //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido.
                    //Wandrey 09/03/2010
                }
            }
        }
示例#18
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosEnvEvento = new DadosenvEvento();
                //Ler o XML para pegar parâmetros de envio
                EnvEvento(emp, dadosEnvEvento);//, TpcnResources.chCTe.ToString());

                ValidaEvento(emp, dadosEnvEvento);

                //vai pegar o ambiente da Chave da Nfe autorizada p/ corrigir tpEmis
                int tpEmis = this.dadosEnvEvento.eventos[0].tpEmis; //Convert.ToInt32(this.dadosEnvEvento.eventos[0].chNFe.Substring(34, 1));

                //Pegar o estado da chave, pois na cOrgao pode vir o estado 91 - Wandrey 22/08/2012
                int cOrgao   = dadosEnvEvento.eventos[0].cOrgao;
                int ufParaWS = cOrgao;

                //Se o cOrgao for igual a 91 tenho que mudar a ufParaWS para que na hora de buscar o WSDL para conectar ao serviço, ele consiga encontrar. Wandrey 23/01/2013
                if (cOrgao == 91)
                {
                    ufParaWS = Convert.ToInt32(dadosEnvEvento.eventos[0].chNFe.Substring(0, 2));
                }

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, ufParaWS, dadosEnvEvento.eventos[0].tpAmb, tpEmis);

                object oRecepcaoEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);//NomeClasseWS(Servico, ufParaWS));
                object oCabecMsg       = wsProxy.CriarObjeto(NomeClasseCabecWS(cOrgao, Servico));

                wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), cOrgao.ToString());
                wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLCTeEvento);

                //Criar objeto da classe de assinatura digital
                AssinaturaDigital oAD = new AssinaturaDigital();

                //Assinar o XML
                oAD.Assinar(NomeArquivoXML, emp, cOrgao);

                oInvocarObj.Invocar(wsProxy,
                                    oRecepcaoEvento,
                                    wsProxy.NomeMetodoWS[0],//NomeMetodoWS(Servico, ufParaWS),
                                    oCabecMsg,
                                    this,
                                    Propriedade.ExtEnvio.PedEve.Replace(".xml", ""),
                                    Propriedade.ExtRetorno.Eve.Replace(".xml", ""));

                //Ler o retorno
                LerRetornoEvento(emp);
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.PedEve, Propriedade.ExtRetorno.Eve_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de evento, infelizmente
                    //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido.
                    //Wandrey 09/03/2010
                }
            }
        }
示例#19
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosRec = new DadosRecClass();
                FluxoNfe oFluxoNfe = new FluxoNfe();
                LerXML   oLer      = new LerXML();

                //Ler o XML de Lote para pegar o número do lote que está sendo enviado
                oLer.Nfe(NomeArquivoXML);

                if (oLer.oDadosNfe.versao != "2.00")
                {
                    Servico = Servicos.NFeEnviarLote2;
                }

                var idLote = oLer.oDadosNfe.idLote;

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp,
                                                                    Convert.ToInt32(oLer.oDadosNfe.cUF),
                                                                    Convert.ToInt32(oLer.oDadosNfe.tpAmb),
                                                                    Convert.ToInt32(oLer.oDadosNfe.tpEmis),
                                                                    oLer.oDadosNfe.versao,
                                                                    oLer.oDadosNfe.mod);

                if (Empresas.Configuracoes[emp].CompactarNfe && oLer.oDadosNfe.versao != "2.00" && wsProxy.NomeMetodoWS.Length == 2)
                {
                    Servico = Servicos.NFeEnviarLoteZip2;
                }

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                object oRecepcao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);// NomeClasseWS(Servico, Convert.ToInt32(oLer.oDadosNfe.cUF)));
                var    oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(Convert.ToInt32(oLer.oDadosNfe.cUF), Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), oLer.oDadosNfe.cUF);
                wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), oLer.oDadosNfe.versao);

                //XML neste ponto a NFe já está assinada, pois foi assinada, validada e montado o lote para envio por outro serviço.
                //Fica aqui somente este lembrete. Wandrey 16/03/2010


                // Envio de NFe Compactada - Renan 29/04/2014
                if (Servico == Servicos.NFeEnviarLoteZip2)//Empresas.Configuracoes[emp].CompactarNfe && oLer.oDadosNfe.versao != "2.00")
                {
                    FileInfo dadosArquivo = new FileInfo(NomeArquivoXML);
                    TFunctions.CompressXML(dadosArquivo);
                }

                string nOperacao = wsProxy.NomeMetodoWS[(Servico == Servicos.NFeEnviarLoteZip2) ? 1 : 0];

                //Invocar o método que envia o XML para o SEFAZ
                if (Empresas.Configuracoes[emp].IndSinc && oLer.oDadosNfe.versao != "2.00")
                {
                    oInvocarObj.Invocar(wsProxy,
                                        oRecepcao,
                                        nOperacao,//NomeMetodoWS(Servico, Convert.ToInt32(oLer.oDadosNfe.cUF), oLer.oDadosNfe.versao),
                                        oCabecMsg, this);

                    Protocolo(vStrXmlRetorno);
                }
                else
                {
                    oInvocarObj.Invocar(wsProxy,
                                        oRecepcao,
                                        nOperacao,//NomeMetodoWS(Servico, Convert.ToInt32(oLer.oDadosNfe.cUF), oLer.oDadosNfe.versao),
                                        oCabecMsg, this, "-env-lot", "-rec");

                    Recibo(vStrXmlRetorno);
                }

                if (dadosRec.cStat == "104") //Lote processado - Processo da NFe Síncrono - Wandrey 13/03/2014
                {
                    FinalizarNFeSincrono(vStrXmlRetorno, emp);

                    oGerarXML.XmlRetorno(Propriedade.ExtEnvio.EnvLot, Propriedade.ExtRetorno.ProRec_XML, vStrXmlRetorno);
                }
                else if (dadosRec.cStat == "103") //Lote recebido com sucesso - Processo da NFe Assíncrono
                {
                    //Atualizar o número do recibo no XML de controle do fluxo de notas enviadas
                    oFluxoNfe.AtualizarTag(oLer.oDadosNfe.chavenfe, FluxoNfe.ElementoEditavel.tMed, /*oLerRecibo.*/ dadosRec.tMed.ToString());
                    oFluxoNfe.AtualizarTagRec(idLote, /*oLerRecibo.*/ dadosRec.nRec);
                }
                else if (Convert.ToInt32(dadosRec.cStat) > 200 ||
                         Convert.ToInt32(dadosRec.cStat) == 108 || //Verifica se o servidor de processamento está paralisado momentaneamente. Wandrey 13/04/2012
                         Convert.ToInt32(dadosRec.cStat) == 109)   //Verifica se o servidor de processamento está paralisado sem previsão. Wandrey 13/04/2012
                {
                    //Se o status do retorno do lote for maior que 200 ou for igual a 108 ou 109,
                    //vamos ter que excluir a nota do fluxo, porque ela foi rejeitada pelo SEFAZ
                    //Primeiro vamos mover o xml da nota da pasta EmProcessamento para pasta de XML´s com erro e depois tira ela do fluxo
                    //Wandrey 30/04/2009
                    oAux.MoveArqErro(Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + oFluxoNfe.LerTag(oLer.oDadosNfe.chavenfe, FluxoNfe.ElementoFixo.ArqNFe));
                    oFluxoNfe.ExcluirNfeFluxo(oLer.oDadosNfe.chavenfe);
                }

                //Deleta o arquivo de lote
                Functions.DeletarArquivo(NomeArquivoXML);

                // Envio de NFe Compactada - Renan 29/04/2014
                if (Servico == Servicos.NFeEnviarLoteZip2)//Empresas.Configuracoes[emp].CompactarNfe && oLer.oDadosNfe.versao != "2.00")
                {
                    Functions.DeletarArquivo(NomeArquivoXML + ".gz");
                }
            }
            catch (ExceptionEnvioXML ex)
            {
                //Ocorreu algum erro no exato momento em que tentou enviar o XML para o SEFAZ, vou ter que tratar
                //para ver se o XML chegou lá ou não, se eu consegui pegar o número do recibo de volta ou não, etc.
                //E ver se vamos tirar o XML do Fluxo ou finalizar ele com a consulta situação da NFe

                //TODO: V3.0 - Tratar o problema de não conseguir pegar o recibo exatamente neste ponto

                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.EnvLot, Propriedade.ExtRetorno.Rec_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
            catch (ExceptionSemInternet ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.EnvLot, Propriedade.ExtRetorno.Rec_ERR, ex, false);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.EnvLot, Propriedade.ExtRetorno.Rec_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
        }
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosConsCad = new DadosConsCad();
                //Ler o XML para pegar parâmetros de envio
                ConsCad(NomeArquivoXML);

                if (this.vXmlNfeDadosMsgEhXML)  //danasa 12-9-2009
                {
                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosConsCad.cUF, dadosConsCad.tpAmb, (int)NFe.Components.TipoEmissao.teNormal, dadosConsCad.versao);

                    //Criar objetos das classes dos serviços dos webservices do SEFAZ
                    object oConsCad  = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                    object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosConsCad.cUF, Servico));

                    //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), dadosConsCad.cUF.ToString());
                    wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), this.dadosConsCad.versao);

                    new AssinaturaDigital().CarregarPIN(emp, NomeArquivoXML, Servico);

                    //Invocar o método que envia o XML para o SEFAZ
                    oInvocarObj.Invocar(wsProxy,
                                        oConsCad,
                                        wsProxy.NomeMetodoWS[0],
                                        oCabecMsg,
                                        this,
                                        NFe.Components.Propriedade.ExtEnvio.ConsCad_XML.Replace(".xml", ""),
                                        NFe.Components.Propriedade.ExtRetorno.ConsCad_XML.Replace(".xml", ""));//"-cons-cad", "-ret-cons-cad");
                }
                else
                {
                    string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml";

                    if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f);
                    }
                    //Gerar o XML da consulta cadastro do contribuinte a partir do TXT gerado pelo ERP
                    GravarXml(f);
                }
            }
            catch (Exception ex)
            {
                string ExtRet = string.Empty;

                if (this.vXmlNfeDadosMsgEhXML) //Se for XML
                {
                    ExtRet = Propriedade.ExtEnvio.ConsCad_XML;
                }
                else //Se for TXT
                {
                    ExtRet = Propriedade.ExtEnvio.ConsCad_TXT;
                }

                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.ConsCad_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    //Deletar o arquivo de solicitação do serviço
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de solicitação do serviço,
                    //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar
                    //o arquivo novamente para o webservice
                    //Wandrey 09/03/2010
                }
            }
        }
示例#21
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosRec = new DadosRecClass();
                FluxoNfe fluxoNfe = new FluxoNfe();
                LerXML   lerXml   = new LerXML();

                //Ler o XML de Lote para pegar o número do lote que está sendo enviado
                lerXml.Mdfe(ConteudoXML);

                var idLote = lerXml.oDadosNfe.idLote;

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, Convert.ToInt32(lerXml.oDadosNfe.cUF), Convert.ToInt32(lerXml.oDadosNfe.tpAmb), Convert.ToInt32(lerXml.oDadosNfe.tpEmis), 0);
                System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(Convert.ToInt32(lerXml.oDadosNfe.cUF), Convert.ToInt32(lerXml.oDadosNfe.tpAmb), Convert.ToInt32(lerXml.oDadosNfe.tpEmis), Servico);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                object oRecepcao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var    oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(Convert.ToInt32(lerXml.oDadosNfe.cUF), Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), lerXml.oDadosNfe.cUF);
                wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), lerXml.oDadosNfe.versao);

                //
                //XML neste ponto o MDFe já está assinado, pois foi assinado, validado e montado o lote para envio por outro serviço.
                //Fica aqui somente este lembrete. Wandrey 16/03/2010
                //

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy,
                                    oRecepcao,
                                    wsProxy.NomeMetodoWS[0],
                                    oCabecMsg, this,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML,
                                    Propriedade.ExtRetorno.Rec,
                                    true,
                                    securityProtocolType);

                #region Parte que trata o retorno do lote, ou seja, o número do recibo

                Recibo(vStrXmlRetorno, emp);

                if (dadosRec.cStat == "103") //Lote recebido com sucesso
                {
                    if (dadosRec.tMed > 0)
                    {
                        Thread.Sleep(dadosRec.tMed * 1000);
                    }

                    //Atualizar o número do recibo no XML de controle do fluxo de notas enviadas
                    fluxoNfe.AtualizarTag(lerXml.oDadosNfe.chavenfe, FluxoNfe.ElementoEditavel.tMed, (dadosRec.tMed + 2).ToString());
                    fluxoNfe.AtualizarTagRec(idLote, dadosRec.nRec);
                    XmlDocument         xmlPedRec       = oGerarXML.XmlPedRecMDFe(dadosRec.nRec, dadosRec.versao, emp);
                    TaskMDFeRetRecepcao mdfeRetRecepcao = new TaskMDFeRetRecepcao(xmlPedRec);
                    mdfeRetRecepcao.Execute();
                }
                else if (Convert.ToInt32(dadosRec.cStat) > 200 ||
                         Convert.ToInt32(dadosRec.cStat) == 108 || //Verifica se o servidor de processamento está paralisado momentaneamente. Wandrey 13/04/2012
                         Convert.ToInt32(dadosRec.cStat) == 109)   //Verifica se o servidor de processamento está paralisado sem previsão. Wandrey 13/04/2012
                {
                    //Se o status do retorno do lote for maior que 200 ou for igual a 108 ou 109,
                    //vamos ter que excluir a nota do fluxo, porque ela foi rejeitada pelo SEFAZ
                    //Primeiro vamos mover o xml da nota da pasta EmProcessamento para pasta de XML´s com erro e depois tira ela do fluxo
                    //Wandrey 30/04/2009
                    oAux.MoveArqErro(Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + fluxoNfe.LerTag(lerXml.oDadosNfe.chavenfe, FluxoNfe.ElementoFixo.ArqNFe));
                    fluxoNfe.ExcluirNfeFluxo(lerXml.oDadosNfe.chavenfe);
                }

                //Deleta o arquivo de lote
                Functions.DeletarArquivo(NomeArquivoXML);

                #endregion Parte que trata o retorno do lote, ou seja, o número do recibo
            }
            catch (ExceptionEnvioXML ex)
            {
                //Ocorreu algum erro no exato momento em que tentou enviar o XML para o SEFAZ, vou ter que tratar
                //para ver se o XML chegou lá ou não, se eu consegui pegar o número do recibo de volta ou não, etc.
                //E ver se vamos tirar o XML do Fluxo ou finalizar ele com a consulta situação da NFe

                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML, Propriedade.ExtRetorno.Rec_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
            catch (ExceptionSemInternet ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML, Propriedade.ExtRetorno.Rec_ERR, ex, false);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLot).EnvioXML, Propriedade.ExtRetorno.Rec_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 16/03/2010
                }
            }
        }
示例#22
0
        /// <summary>
        /// Metodo responsável por invocar o serviço do WebService do SEFAZ
        /// </summary>
        /// <param name="wsProxy">Objeto da classe construida do WSDL</param>
        /// <param name="servicoWS">Objeto da classe de envio do XML</param>
        /// <param name="metodo">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="servicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param>
        /// <param name="finalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param>
        /// <param name="finalArqRetorno">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 wsProxy,
                                object servicoWS,
                                string metodo,
                                string cabecMsg,
                                object servicoNFe,
                                string finalArqEnvio,
                                string finalArqRetorno,
                                PadroesNFSe padraoNFSe,
                                Servicos servicoNFSe,
                                SecurityProtocolType securityProtocolType)
        {
            int emp = Empresas.FindEmpresaByThread();

            finalArqEnvio   = Functions.ExtractExtension(finalArqEnvio);
            finalArqRetorno = Functions.ExtractExtension(finalArqRetorno);

            XmlDocument docXML = new XmlDocument();

            // Definir o tipo de serviço da NFe
            Type typeServicoNFe = servicoNFe.GetType();

            // Resgatar o nome do arquivo XML a ser enviado para o webservice
            string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, servicoNFe, null));

            // Exclui o Arquivo de Erro
            Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, finalArqEnvio + ".xml") + finalArqRetorno + ".err");

            // Validar o Arquivo XML
            ValidarXML validar             = new ValidarXML(XmlNfeDadosMsg, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, false);
            string     cResultadoValidacao = validar.ValidarArqXML(XmlNfeDadosMsg);

            if (cResultadoValidacao != "")
            {
                switch (padraoNFSe)
                {
                case PadroesNFSe.SMARAPD:
                    break;

                default:
                    throw new Exception(cResultadoValidacao);
                }
            }

            //Definir novamente o protocolo de segurança, pois é uma propriedade estática e o seu valor pode ser alterado antes do envio. Wandrey 03/05/2016
            ServicePointManager.SecurityProtocol = securityProtocolType;

            // Montar o XML de Lote de envio de Notas fiscais
            docXML.Load(XmlNfeDadosMsg);

            // Definir Proxy
            if (ConfiguracaoApp.Proxy && wsProxy != null)
            {
                switch (padraoNFSe)
                {
                case PadroesNFSe.BETHA:
                    wsProxy.Betha.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta, ConfiguracaoApp.DetectarConfiguracaoProxyAuto);
                    break;

                default:
                    wsProxy.SetProp(servicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta, ConfiguracaoApp.DetectarConfiguracaoProxyAuto));
                    break;
                }
            }

            // 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 (wsProxy != null)
            {
                switch (padraoNFSe)
                {
                case PadroesNFSe.NOTAINTELIGENTE:
                case PadroesNFSe.BETHA:
                    break;

                default:
                    wsProxy.SetProp(servicoWS, "Timeout", 120000);
                    break;
                }
            }

            //Invocar o membro
            switch (padraoNFSe)
            {
                #region Padrão BETHA

            case PadroesNFSe.BETHA:
                switch (metodo)
                {
                case "ConsultarSituacaoLoteRps":
                    strRetorno = wsProxy.Betha.ConsultarSituacaoLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "ConsultarLoteRps":
                    strRetorno = wsProxy.Betha.ConsultarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "CancelarNfse":
                    strRetorno = wsProxy.Betha.CancelarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "ConsultarNfse":
                    strRetorno = wsProxy.Betha.ConsultarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "ConsultarNfsePorRps":
                    strRetorno = wsProxy.Betha.ConsultarNfsePorRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "RecepcionarLoteRps":
                    strRetorno = wsProxy.Betha.RecepcionarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;
                }
                break;

                #endregion Padrão BETHA

                #region NOTAINTELIGENTE

            case PadroesNFSe.NOTAINTELIGENTE:
                //NFe.Components.PClaudioMG.api_portClient wsClaudio = (NFe.Components.PClaudioMG.api_portClient)servicoWS;

                switch (servicoNFSe)
                {
                case Servicos.NFSeRecepcionarLoteRps:
                    //strRetorno = wsClaudio.RecepcionarLoteRps(docXML.OuterXml.ToString());
                    break;
                }
                //strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { docXML.OuterXml.ToString() });
                break;

                #endregion NOTAINTELIGENTE

                #region Padrão ISSONLINE

            case PadroesNFSe.ISSONLINE_ASSESSORPUBLICO:
                int    operacao;
                string senhaWs = Functions.GetMD5Hash(Empresas.Configuracoes[emp].SenhaWS);

                switch (servicoNFSe)
                {
                case Servicos.NFSeRecepcionarLoteRps:
                    operacao = 1;
                    break;

                case Servicos.NFSeCancelar:
                    operacao = 2;
                    break;

                default:
                    operacao = 3;
                    break;
                }

                strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Convert.ToSByte(operacao), Empresas.Configuracoes[emp].UsuarioWS, senhaWs, docXML.OuterXml });
                break;

                #endregion Padrão ISSONLINE

                #region Padrão Blumenau-SC

            case PadroesNFSe.BLUMENAU_SC:
                strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { 1, docXML.OuterXml });
                break;

                #endregion Padrão Blumenau-SC

                #region Padrão Paulistana

            case PadroesNFSe.PAULISTANA:
                strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { 1, docXML.OuterXml });
                break;

                #endregion Padrão Paulistana

                #region TECNOSISTEMAS

            case PadroesNFSe.TECNOSISTEMAS:
                strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { docXML.OuterXml, cabecMsg.ToString() });
                break;

                #endregion TECNOSISTEMAS

                #region SMARAPD

            case PadroesNFSe.SMARAPD:
                if (metodo == "nfdEntradaCancelar")
                {
                    strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS,
                                                                                     TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS),
                                                                                     docXML.OuterXml });
                }
                else if (metodo == "nfdSaida")
                {
                    strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS,
                                                                                     TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS),
                                                                                     Empresas.Configuracoes[emp].UnidadeFederativaCodigo.ToString(),
                                                                                     docXML.OuterXml });
                }
                else if (metodo == "urlNfd")
                {
                    strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Convert.ToInt32(docXML.GetElementsByTagName("codigoMunicipio")[0].InnerText),
                                                                                     Convert.ToInt32(docXML.GetElementsByTagName("numeroNfd")[0].InnerText),
                                                                                     Convert.ToInt32(docXML.GetElementsByTagName("serieNfd")[0].InnerText),
                                                                                     docXML.GetElementsByTagName("inscricaoMunicipal")[0].InnerText });
                }
                else
                {
                    strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS,
                                                                                     TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS),
                                                                                     Empresas.Configuracoes[emp].UnidadeFederativaCodigo,
                                                                                     docXML.OuterXml });
                }
                break;

                #endregion SMARAPD

                #region ISSWEB

            case PadroesNFSe.ISSWEB:
                string versao = docXML.DocumentElement.GetElementsByTagName("Versao")[0].InnerText;
                string cnpj   = docXML.DocumentElement.GetElementsByTagName("CNPJCPFPrestador")[0].InnerText;
                strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { cnpj, docXML.OuterXml, versao });
                break;

                #endregion ISSWEB

                #region NA_INFORMATICA

            case PadroesNFSe.NA_INFORMATICA:
                switch (servicoNFSe)
                {
                    #region Recepcionar Lote RPS - Assíncrono

                case Servicos.NFSeRecepcionarLoteRps:
                    //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao)
                    //{
                    //    ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.PCorumbaMS.RecepcionarLoteRps dadosEnvio = new Components.PCorumbaMS.RecepcionarLoteRps();
                    //    Components.PCorumbaMS.RecepcionarLoteRpsResponse dadosRetorno = new Components.PCorumbaMS.RecepcionarLoteRpsResponse();
                    //    dadosEnvio.EnviarLoteRpsEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRps(dadosEnvio);
                    //    strRetorno = dadosRetorno.EnviarLoteRpsResposta;
                    //}
                    //else
                    //{
                    //    ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.HCorumbaMS.RecepcionarLoteRps dadosEnvio = new Components.HCorumbaMS.RecepcionarLoteRps();
                    //    Components.HCorumbaMS.RecepcionarLoteRpsResponse dadosRetorno = new Components.HCorumbaMS.RecepcionarLoteRpsResponse();
                    //    dadosEnvio.EnviarLoteRpsEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRps(dadosEnvio);
                    //    strRetorno = dadosRetorno.EnviarLoteRpsResposta;
                    //}
                    break;

                    #endregion Recepcionar Lote RPS - Assíncrono

                    #region Recepcionar Lote RPS - Síncrono

                case Servicos.NFSeRecepcionarLoteRpsSincrono:
                    //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao)
                    //{
                    //    ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.PCorumbaMS.RecepcionarLoteRpsSincrono dadosEnvio = new Components.PCorumbaMS.RecepcionarLoteRpsSincrono();
                    //    Components.PCorumbaMS.RecepcionarLoteRpsSincronoResponse dadosRetorno = new Components.PCorumbaMS.RecepcionarLoteRpsSincronoResponse();
                    //    dadosEnvio.EnviarLoteRpsSincronoEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRpsSincrono(dadosEnvio);
                    //    strRetorno = dadosRetorno.EnviarLoteRpsSincronoResposta;
                    //}
                    //else
                    //{
                    //    ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.HCorumbaMS.RecepcionarLoteRpsSincrono dadosEnvio = new Components.HCorumbaMS.RecepcionarLoteRpsSincrono();
                    //    Components.HCorumbaMS.RecepcionarLoteRpsSincronoResponse dadosRetorno = new Components.HCorumbaMS.RecepcionarLoteRpsSincronoResponse();
                    //    dadosEnvio.EnviarLoteRpsSincronoEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRpsSincrono(dadosEnvio);
                    //    strRetorno = dadosRetorno.EnviarLoteRpsSincronoResposta;
                    //}
                    break;

                    #endregion Recepcionar Lote RPS - Síncrono

                    #region Cancelar RPS

                case Servicos.NFSeCancelar:
                    //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao)
                    //{
                    //    ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.PCorumbaMS.CancelarNfse dadosEnvio = new Components.PCorumbaMS.CancelarNfse();
                    //    Components.PCorumbaMS.CancelarNfseResponse dadosRetorno = new Components.PCorumbaMS.CancelarNfseResponse();
                    //    dadosEnvio.CancelarNfseEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).CancelarNfse(dadosEnvio);
                    //    strRetorno = dadosRetorno.CancelarNfseResposta;
                    //}
                    //else
                    //{
                    //    ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.HCorumbaMS.CancelarNfse dadosEnvio = new Components.HCorumbaMS.CancelarNfse();
                    //    Components.HCorumbaMS.CancelarNfseResponse dadosRetorno = new Components.HCorumbaMS.CancelarNfseResponse();
                    //    dadosEnvio.CancelarNfseEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).CancelarNfse(dadosEnvio);
                    //    strRetorno = dadosRetorno.CancelarNfseResposta;
                    //}
                    break;

                    #endregion Cancelar RPS

                    #region Consultar Lote RPS

                case Servicos.NFSeConsultarLoteRps:
                    //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao)
                    //{
                    //    ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.PCorumbaMS.ConsultarLoteRps dadosEnvio = new Components.PCorumbaMS.ConsultarLoteRps();
                    //    Components.PCorumbaMS.ConsultarLoteRpsResponse dadosRetorno = new Components.PCorumbaMS.ConsultarLoteRpsResponse();
                    //    dadosEnvio.ConsultarLoteRpsEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).ConsultarLoteRps(dadosEnvio);
                    //    strRetorno = dadosRetorno.ConsultarLoteRpsResposta;
                    //}
                    //else
                    //{
                    //    ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.HCorumbaMS.ConsultarLoteRps dadosEnvio = new Components.HCorumbaMS.ConsultarLoteRps();
                    //    Components.HCorumbaMS.ConsultarLoteRpsResponse dadosRetorno = new Components.HCorumbaMS.ConsultarLoteRpsResponse();
                    //    dadosEnvio.ConsultarLoteRpsEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).ConsultarLoteRps(dadosEnvio);
                    //    strRetorno = dadosRetorno.ConsultarLoteRpsResposta;
                    //}
                    break;

                    #endregion Consultar Lote RPS

                    #region Consulta Situação Nfse

                case Servicos.NFSeConsultar:
                    //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao)
                    //{
                    //    ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.PCorumbaMS.ConsultarNfsePorFaixa dadosEnvio = new Components.PCorumbaMS.ConsultarNfsePorFaixa();
                    //    Components.PCorumbaMS.ConsultarNfsePorFaixaResponse dadosRetorno = new Components.PCorumbaMS.ConsultarNfsePorFaixaResponse();
                    //    dadosEnvio.ConsultarNfsePorFaixaEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorFaixa(dadosEnvio);
                    //    strRetorno = dadosRetorno.ConsultarNfsePorFaixaResposta;
                    //}
                    //else
                    //{
                    //    ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.HCorumbaMS.ConsultarNfsePorFaixa dadosEnvio = new Components.HCorumbaMS.ConsultarNfsePorFaixa();
                    //    Components.HCorumbaMS.ConsultarNfsePorFaixaResponse dadosRetorno = new Components.HCorumbaMS.ConsultarNfsePorFaixaResponse();
                    //    dadosEnvio.ConsultarNfsePorFaixaEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorFaixa(dadosEnvio);
                    //    strRetorno = dadosRetorno.ConsultarNfsePorFaixaResposta;
                    //}
                    break;

                    #endregion Consulta Situação Nfse

                    #region Consulta Situação Nfse por RPS

                case Servicos.NFSeConsultarPorRps:
                    //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao)
                    //{
                    //    ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.PCorumbaMS.ConsultarNfsePorRps dadosEnvio = new Components.PCorumbaMS.ConsultarNfsePorRps();
                    //    Components.PCorumbaMS.ConsultarNfsePorRpsResponse dadosRetorno = new Components.PCorumbaMS.ConsultarNfsePorRpsResponse();
                    //    dadosEnvio.ConsultarNfsePorRpsEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorRps(dadosEnvio);
                    //    strRetorno = dadosRetorno.ConsultarNfsePorRpsResposta;
                    //}
                    //else
                    //{
                    //    ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado);
                    //    Components.HCorumbaMS.ConsultarNfsePorRps dadosEnvio = new Components.HCorumbaMS.ConsultarNfsePorRps();
                    //    Components.HCorumbaMS.ConsultarNfsePorRpsResponse dadosRetorno = new Components.HCorumbaMS.ConsultarNfsePorRpsResponse();
                    //    dadosEnvio.ConsultarNfsePorRpsEnvio = docXML.OuterXml.ToString();
                    //    dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorRps(dadosEnvio);
                    //    strRetorno = dadosRetorno.ConsultarNfsePorRpsResposta;
                    //}
                    break;

                    #endregion Consulta Situação Nfse por RPS
                }
                break;

                #endregion NA_INFORMATICA

                #region ABASE

            case PadroesNFSe.ABASE:
                if (servicoNFSe == Servicos.NFSeConsultarPorRps)
                {
                    goto default;
                }
                else
                {
                    XmlNode xmlRetorno = wsProxy.InvokeXML(servicoWS, metodo, new object[] { cabecMsg.ToString(), docXML.OuterXml });
                    strRetorno = xmlRetorno.OuterXml;
                }
                break;

                #endregion ABASE

            case PadroesNFSe.LEXSOM:
                XmlNode result = wsProxy.InvokeXML(servicoWS, metodo, new object[] { docXML });
                strRetorno = result.OuterXml;
                break;

            default:

                #region Demais padrões

                if (string.IsNullOrEmpty(cabecMsg))
                {
                    strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { docXML.OuterXml });
                }
                else
                {
                    strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { cabecMsg.ToString(), docXML.OuterXml });
                }
                break;

                #endregion Demais padrões
            }

            #region gerar arquivos assinados(somente debug)

#if DEBUG
            string path = Application.StartupPath + "\\teste_assintura\\";

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            StreamWriter sw = new StreamWriter(path + "nfseMsg_assinado.xml", true);
            sw.Write(docXML.OuterXml);
            sw.Close();

            StreamWriter sw2 = new StreamWriter(path + "cabecMsg_assinado.xml", true);
            sw2.Write(cabecMsg.ToString());
            sw2.Close();
#endif

            #endregion gerar arquivos assinados(somente debug)

            //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, servicoNFe, new object[] { strRetorno });

            // Registra o retorno de acordo com o status obtido
            if (finalArqEnvio != string.Empty && finalArqRetorno != string.Empty)
            {
                typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, servicoNFe, new Object[] { finalArqEnvio + ".xml", finalArqRetorno + ".xml" });
            }
        }
示例#23
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)
        {
            int emp = Empresas.FindEmpresaByThread();

            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));

            // Exclui o Arquivo de Erro
            Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, cFinalArqEnvio + ".xml") + cFinalArqRetorno + ".err");

            // Validar o Arquivo XML
            ValidarXML validar             = new ValidarXML(XmlNfeDadosMsg, Empresas.Configuracoes[emp].UnidadeFederativaCodigo);
            string     cResultadoValidacao = validar.ValidarArqXML(XmlNfeDadosMsg);

            if (cResultadoValidacao != "")
            {
                switch (padraoNFSe)
                {
                case PadroesNFSe.ISSONLINE4R:
                    break;

                case PadroesNFSe.SMARAPD:
                    break;

                default:
                    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", 120000);
            }

            //Verificar antes se tem conexão com a internet, se não tiver já gera uma exceção no padrão já esperado pelo ERP
            if (ConfiguracaoApp.ChecarConexaoInternet)  //danasa: 12/2013
            {
                if (!Functions.IsConnectedToInternet())
                {
                    //Registrar o erro da validação para o sistema ERP
                    throw new ExceptionSemInternet(ErroPadrao.FalhaInternet, "\r\nArquivo: " + XmlNfeDadosMsg);
                }
            }

            //Invocar o membro
            switch (padraoNFSe)
            {
                #region Padrão BETHA
            case PadroesNFSe.BETHA:
                switch (cMetodo)
                {
                case "ConsultarSituacaoLoteRps":
                    strRetorno = oWSProxy.Betha.ConsultarSituacaoLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "ConsultarLoteRps":
                    strRetorno = oWSProxy.Betha.ConsultarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "CancelarNfse":
                    strRetorno = oWSProxy.Betha.CancelarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "ConsultarNfse":
                    strRetorno = oWSProxy.Betha.ConsultarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "ConsultarNfsePorRps":
                    strRetorno = oWSProxy.Betha.ConsultarNfsePorRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;

                case "RecepcionarLoteRps":
                    strRetorno = oWSProxy.Betha.RecepcionarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo);
                    break;
                }
                break;
                #endregion

                #region Padrão ISSONLINE
            case PadroesNFSe.ISSONLINE:
                int    operacao;
                string senhaWs = Functions.GetMD5Hash(Empresas.Configuracoes[emp].SenhaWS);

                switch (servicoNFSe)
                {
                case Servicos.NFSeRecepcionarLoteRps:
                    operacao = 1;
                    break;

                case Servicos.NFSeCancelar:
                    operacao = 2;
                    break;

                default:
                    operacao = 3;
                    break;
                }

                strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Convert.ToSByte(operacao), Empresas.Configuracoes[emp].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.TECNOSISTEMAS:
                strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { docXML.OuterXml, cabecMsg.ToString() });
                break;

            case PadroesNFSe.SMARAPD:
                if (cMetodo == "nfdEntradaCancelar")
                {
                    strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS,
                                                                                        TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS),
                                                                                        docXML.OuterXml });
                }
                else
                {
                    strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS,
                                                                                        TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS),
                                                                                        Empresas.Configuracoes[emp].UnidadeFederativaCodigo,
                                                                                        docXML.OuterXml });
                }
                break;

            case PadroesNFSe.ISSWEB:
                string versao = docXML.DocumentElement.GetElementsByTagName("Versao")[0].InnerText;
                string cnpj   = docXML.DocumentElement.GetElementsByTagName("CNPJCPFPrestador")[0].InnerText;
                strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { cnpj, docXML.OuterXml, versao });
                break;

            case PadroesNFSe.GINFES:
            case PadroesNFSe.THEMA:
            case PadroesNFSe.SALVADOR_BA:
            case PadroesNFSe.CANOAS_RS:
            case PadroesNFSe.ISSNET:
            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
            }
            #region gerar arquivos assinados(somente debug)
#if DEBUG
            string path = Application.StartupPath + "\\teste_assintura\\";

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            StreamWriter sw = new StreamWriter(path + "nfseMsg_assinado.xml", true);
            sw.Write(docXML.OuterXml);
            sw.Close();

            StreamWriter sw2 = new StreamWriter(path + "cabecMsg_assinado.xml", true);
            sw2.Write(cabecMsg.ToString());
            sw2.Close();
#endif
            #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", cFinalArqRetorno + ".xml" });
            }
        }
示例#24
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                dadosPedSta = new DadosPedSta();
                //Ler o XML para pegar parâmetros de envio
                PedSta(emp, dadosPedSta);

                if (vXmlNfeDadosMsgEhXML)  //danasa 12-9-2009
                {
                    //Definir o objeto do WebService
                    WebServiceProxy wsProxy =
                        ConfiguracaoApp.DefinirWS(Servico,
                                                  emp,
                                                  dadosPedSta.cUF,
                                                  dadosPedSta.tpAmb,
                                                  dadosPedSta.tpEmis,
                                                  dadosPedSta.versao,
                                                  dadosPedSta.mod,
                                                  0);

                    System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedSta.cUF, dadosPedSta.tpAmb, dadosPedSta.tpEmis, Servico);

                    //Criar objetos das classes dos serviços dos webservices do SEFAZ
                    var oStatusServico = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);

                    object oCabecMsg = null;
                    if (dadosPedSta.versao != "4.00")
                    {
                        oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedSta.cUF, Servico));
                        wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), dadosPedSta.cUF.ToString());
                        wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), dadosPedSta.versao);
                    }

                    new AssinaturaDigital().CarregarPIN(emp, NomeArquivoXML, Servico);

                    //Invocar o método que envia o XML para o SEFAZ
                    oInvocarObj.Invocar(wsProxy,
                                        oStatusServico,
                                        wsProxy.NomeMetodoWS[0],
                                        oCabecMsg, this,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioXML,
                                        Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).RetornoXML,
                                        true,
                                        securityProtocolType);
                }
                else
                {
                    string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml";

                    if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f);
                    }
                    // Gerar o XML de solicitacao de situacao do servico a partir do TXT gerado pelo ERP
                    oGerarXML.StatusServicoNFe(f, dadosPedSta.tpAmb, dadosPedSta.tpEmis, dadosPedSta.cUF, dadosPedSta.versao);
                }
            }
            catch (Exception ex)
            {
                var extRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioXML :
                             Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioTXT;

                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, extRet, Propriedade.ExtRetorno.Sta_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    //Deletar o arquivo de solicitação do serviço
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de solicitação do serviço,
                    //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar
                    //o arquivo novamente para o webservice
                    //Wandrey 09/03/2010
                }
            }
        }
示例#25
0
        private void AddProxyUser()
        {
            if (!String.IsNullOrEmpty(ProxyUser))
            {
                System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ProxyUser, ProxyPass, ProxyServer);
                System.Net.WebRequest.DefaultWebProxy.Credentials = credentials;

                WebServiceProxy wsp = new WebServiceProxy(Certificate as X509Certificate2);

                wsp.SetProp(govDigitalService, "Proxy", Proxy.DefinirProxy(ProxyServer, ProxyUser, ProxyPass, 8080));
            }
        }
示例#26
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            //Definir o serviço que será executado para a classe
            this.Servico = Components.Servicos.MDFeConsultaNaoEncerrado;

            try
            {
                Int32 tpAmb = Empresas.Configuracoes[emp].AmbienteCodigo;
                Int32 cUF   = Empresas.Configuracoes[emp].UnidadeFederativaCodigo;

                XmlDocument doc = new XmlDocument();
                doc.Load(this.NomeArquivoXML);
                foreach (XmlNode consSitNFeNode in doc.GetElementsByTagName("consMDFeNaoEnc"))
                {
                    XmlElement consSitNFeElemento = (XmlElement)consSitNFeNode;

                    tpAmb = Convert.ToInt32("0" + Functions.LerTag(consSitNFeElemento, NFe.Components.TpcnResources.tpAmb.ToString(), false));
                }

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, cUF, tpAmb);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                var oServico = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var cabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(cUF, Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(cabecMsg, NFe.Components.TpcnResources.cUF.ToString(), cUF.ToString());
                wsProxy.SetProp(cabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLMDFeConsNaoEnc);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy, oServico, wsProxy.NomeMetodoWS[0], cabecMsg, this,
                                    Propriedade.ExtEnvio.MDFeConsNaoEnc.Replace(".xml", ""),
                                    Propriedade.ExtRetorno.MDFeConsNaoEnc.Replace(".xml", ""));
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.MDFeConsNaoEnc, Propriedade.ExtRetorno.MDFeConsNaoEnc_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    //Deletar o arquivo de solicitação do serviço
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de solicitação do serviço,
                    //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar
                    //o arquivo novamente para o webservice
                    //Wandrey 09/03/2010
                }
            }
        }
示例#27
0
        public override void Execute()
        {
            int emp = Empresas.FindEmpresaByThread();

            try
            {
                Int32  tpAmb  = Empresas.Configuracoes[emp].AmbienteCodigo;
                Int32  cUF    = Empresas.Configuracoes[emp].UnidadeFederativaCodigo;
                string versao = string.Empty;

                foreach (XmlNode consSitNFeNode in ConteudoXML.GetElementsByTagName("consMDFeNaoEnc"))
                {
                    XmlElement consSitNFeElemento = (XmlElement)consSitNFeNode;
                    versao = consSitNFeElemento.Attributes[TpcnResources.versao.ToString()].InnerText;

                    tpAmb = Convert.ToInt32("0" + Functions.LerTag(consSitNFeElemento, TpcnResources.tpAmb.ToString(), false));
                }

                //Definir o objeto do WebService
                WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, cUF, tpAmb, 0);
                System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(cUF, tpAmb, 1, Servico);

                //Criar objetos das classes dos serviços dos webservices do SEFAZ
                var oServico = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);
                var cabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(cUF, Servico));

                //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg
                wsProxy.SetProp(cabecMsg, TpcnResources.cUF.ToString(), cUF.ToString());
                wsProxy.SetProp(cabecMsg, TpcnResources.versaoDados.ToString(), versao);

                //Invocar o método que envia o XML para o SEFAZ
                oInvocarObj.Invocar(wsProxy,
                                    oServico,
                                    wsProxy.NomeMetodoWS[0],
                                    cabecMsg,
                                    this,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.MDFeConsNaoEncerrados).EnvioXML,
                                    Propriedade.Extensao(Propriedade.TipoEnvio.MDFeConsNaoEncerrados).RetornoXML,
                                    true,
                                    securityProtocolType);
            }
            catch (Exception ex)
            {
                try
                {
                    //Gravar o arquivo de erro de retorno para o ERP, caso ocorra
                    TFunctions.GravarArqErroServico(NomeArquivoXML,
                                                    Propriedade.Extensao(Propriedade.TipoEnvio.MDFeConsNaoEncerrados).EnvioXML,
                                                    Propriedade.ExtRetorno.MDFeConsNaoEnc_ERR, ex);
                }
                catch
                {
                    //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada.
                    //Wandrey 09/03/2010
                }
            }
            finally
            {
                try
                {
                    //Deletar o arquivo de solicitação do serviço
                    Functions.DeletarArquivo(NomeArquivoXML);
                }
                catch
                {
                    //Se falhou algo na hora de deletar o XML de solicitação do serviço,
                    //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar
                    //o arquivo novamente para o webservice
                    //Wandrey 09/03/2010
                }
            }
        }