示例#1
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="oCabecMsg">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 oCabecMsg,
                            object oServicoNFe,
                            string cFinalArqEnvio,
                            string cFinalArqRetorno)
        {
            int emp = new FindEmpresaThread(Thread.CurrentThread).Index;

            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("vXmlNfeDadosMsg", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null));

            try
            {
                //Verificar se o certificado digital está vencido, se tiver vai forçar uma exceção
                CertificadoDigital CertDig = new CertificadoDigital();
                CertDig.PrepInfCertificado(Empresa.Configuracoes[emp].X509Certificado);

                if (CertDig.lLocalizouCertificado == true)
                {
                    if (DateTime.Compare(DateTime.Now, CertDig.dValidadeFinal) > 0)
                    {
                        throw new ExceptionInvocarObjeto(ErroPadrao.CertificadoVencido, "(" + CertDig.dValidadeInicial.ToString() + " a " + CertDig.dValidadeFinal.ToString() + ")");
                    }
                }

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

                // Validar o Arquivo XML
                string cResultadoValidacao = oAux.ValidarArqXML(XmlNfeDadosMsg);
                if (cResultadoValidacao != "")
                {
                    throw new Exception(cResultadoValidacao);
                }

                // Montar o XML de Lote de envio de Notas fiscais
                docXML.Load(XmlNfeDadosMsg);
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            // Definir Proxy
            if (ConfiguracaoApp.Proxy)
            {
                oWSProxy.SetProp(oServicoWS, "Proxy", Auxiliar.DefinirProxy());
            }

            // Limpa a variável de retorno
            XmlNode XmlRetorno;

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

            try
            {
                //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 (!InternetCS.IsConnectedToInternet())
                {
                    //Registrar o erro da validação para o sistema ERP
                    throw new ExceptionInvocarObjeto(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", oCabecMsg);
                }
                else
                {
                    switch (ConfiguracaoApp.TipoAplicativo)
                    {
                    case UniNFeLibrary.Enums.TipoAplicativo.Cte:
                        oWSProxy.SetProp(oServicoWS, "cteCabecMsgValue", oCabecMsg);
                        break;

                    case UniNFeLibrary.Enums.TipoAplicativo.Nfe:
                        oWSProxy.SetProp(oServicoWS, "nfeCabecMsgValue", oCabecMsg);
                        break;

                    default:
                        break;
                    }
                }


                try
                {
                    //Invocar o membro
                    XmlRetorno = (XmlNode)oWSProxy.InvokeXML(oServicoWS, cMetodo, new object[] { docXML });
                }
                catch (Exception ex)
                {
                    if (cMetodo.Substring(0, 3).ToLower() == "sce") //danasa 21/10/2010
                    {
                        throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlWSDPEC, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message);
                    }

                    //Se for XML da NFe a mensagem é padronizada, caso contrário é uma mensagem geral. Wandrey 25/02/2011
                    if (cMetodo == "nfeRecepcaoLote2")
                    {
                        throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlNFeWS, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message);
                    }
                    else
                    {
                        throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlWS, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message);
                    }
                }

                //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[] { 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" });
                }
            }
            catch (ExceptionEnvioXML ex)
            {
                throw (ex);
            }
            catch (ExceptionInvocarObjeto ex)
            {
                throw (ex);
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
示例#2
0
        /// <summary>
        /// Grava XML com algumas informações do aplicativo,
        /// dentre elas os dados do certificado digital configurado nos parâmetros,
        /// versão, última modificação, etc.
        /// </summary>
        /// <param name="sArquivo">Pasta e nome do arquivo XML a ser gravado com as informações</param>
        /// <param name="oAssembly">Passar sempre: Assembly.GetExecutingAssembly() pois ele vai pegar o Assembly do EXE ou DLL de onde está sendo chamado o método</param>
        /// <by>Wandrey Mundin Ferreira</by>
        /// <date>29/01/2009</date>
        public void GravarXMLInformacoes(string sArquivo)
        {
            int emp = new FindEmpresaThread(Thread.CurrentThread).Index;

            string cStat   = "1";
            string xMotivo = "Consulta efetuada com sucesso";

            //Ler os dados do certificado digital
            string sSubject = "";
            string sValIni  = "";
            string sValFin  = "";

            CertificadoDigital oDigCert = new CertificadoDigital();

            oDigCert.PrepInfCertificado(Empresa.Configuracoes[emp].X509Certificado);

            if (oDigCert.lLocalizouCertificado == true)
            {
                sSubject = oDigCert.sSubject;
                sValIni  = oDigCert.dValidadeInicial.ToString();
                sValFin  = oDigCert.dValidadeFinal.ToString();
            }
            else
            {
                cStat   = "2";
                xMotivo = "Certificado digital não foi localizado";
            }

            //Gravar o XML com as informações do aplicativo
            try
            {
                if (Path.GetExtension(sArquivo).ToLower() == ".txt")
                {
                    StringBuilder aTXT = new StringBuilder();
                    aTXT.AppendLine("cStat|" + cStat);
                    aTXT.AppendLine("xMotivo|" + xMotivo);
                    //Dados do certificado digital
                    aTXT.AppendLine("sSubject|" + sSubject);
                    aTXT.AppendLine("dValIni|" + sValIni);
                    aTXT.AppendLine("dValFin|" + sValFin);
                    //Dados gerais do Aplicativo
                    aTXT.AppendLine("versao|" + InfoApp.Versao());
                    aTXT.AppendLine("dUltModif|" + File.GetLastWriteTimeUtc(Application.ExecutablePath).ToString("dd/MM/yyyy hh:mm:ss"));
                    aTXT.AppendLine("PastaExecutavel|" + InfoApp.PastaExecutavel());
                    aTXT.AppendLine("NomeComputador|" + Environment.MachineName);
                    //Dados das configurações do aplicativo
                    aTXT.AppendLine("PastaBackup|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaBackup) ? "" : Empresa.Configuracoes[emp].PastaBackup));
                    aTXT.AppendLine("PastaXmlEmLote|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvioEmLote) ? "" : Empresa.Configuracoes[emp].PastaEnvioEmLote));
                    aTXT.AppendLine("PastaXmlAssinado|" + (string.IsNullOrEmpty(InfoApp.NomePastaXMLAssinado) ? "" : InfoApp.NomePastaXMLAssinado));
                    aTXT.AppendLine("PastaValidar|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaValidar) ? "" : Empresa.Configuracoes[emp].PastaValidar));
                    aTXT.AppendLine("PastaXmlEnviado|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnviado) ? "" : Empresa.Configuracoes[emp].PastaEnviado));
                    aTXT.AppendLine("PastaXmlEnvio|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvio) ? "" : Empresa.Configuracoes[emp].PastaEnvio));
                    aTXT.AppendLine("PastaXmlErro|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaErro) ? "" : Empresa.Configuracoes[emp].PastaErro));
                    aTXT.AppendLine("PastaXmlRetorno|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaRetorno) ? "" : Empresa.Configuracoes[emp].PastaRetorno));
                    aTXT.AppendLine("DiasParaLimpeza|" + Empresa.Configuracoes[emp].DiasLimpeza.ToString());
                    aTXT.AppendLine("DiretorioSalvarComo|" + Empresa.Configuracoes[emp].DiretorioSalvarComo.ToString());
                    aTXT.AppendLine("GravarRetornoTXTNFe|" + Empresa.Configuracoes[emp].GravarRetornoTXTNFe.ToString());
                    aTXT.AppendLine("AmbienteCodigo|" + Empresa.Configuracoes[emp].tpAmb.ToString());
                    aTXT.AppendLine("tpEmis|" + Empresa.Configuracoes[emp].tpEmis.ToString());
                    aTXT.AppendLine("UnidadeFederativaCodigo|" + Empresa.Configuracoes[emp].UFCod.ToString());

                    File.WriteAllText(sArquivo, aTXT.ToString(), Encoding.Default);
                }
                else
                {
                    XmlWriterSettings oSettings = new XmlWriterSettings();
                    UTF8Encoding      c         = new UTF8Encoding(false);

                    //Para começar, vamos criar um XmlWriterSettings para configurar nosso XML
                    oSettings.Encoding            = c;
                    oSettings.Indent              = true;
                    oSettings.IndentChars         = "";
                    oSettings.NewLineOnAttributes = false;
                    oSettings.OmitXmlDeclaration  = false;

                    //Agora vamos criar um XML Writer
                    XmlWriter oXmlGravar = XmlWriter.Create(sArquivo, oSettings);

                    //Abrir o XML
                    oXmlGravar.WriteStartDocument();
                    oXmlGravar.WriteStartElement("retConsInf");
                    oXmlGravar.WriteElementString("cStat", cStat);
                    oXmlGravar.WriteElementString("xMotivo", xMotivo);

                    //Dados do certificado digital
                    oXmlGravar.WriteStartElement("DadosCertificado");
                    oXmlGravar.WriteElementString("sSubject", sSubject);
                    oXmlGravar.WriteElementString("dValIni", sValIni);
                    oXmlGravar.WriteElementString("dValFin", sValFin);
                    oXmlGravar.WriteEndElement(); //DadosCertificado

                    //Dados gerais do Aplicativo
                    oXmlGravar.WriteStartElement("DadosUniNfe");
                    oXmlGravar.WriteElementString("versao", InfoApp.Versao());
                    oXmlGravar.WriteElementString("dUltModif", File.GetLastWriteTimeUtc(Application.ExecutablePath).ToString("dd/MM/yyyy hh:mm:ss"));
                    oXmlGravar.WriteElementString("PastaExecutavel", InfoApp.PastaExecutavel());
                    oXmlGravar.WriteElementString("NomeComputador", Environment.MachineName);
                    oXmlGravar.WriteEndElement(); //DadosUniNfe

                    //Dados das configurações do aplicativo
                    oXmlGravar.WriteStartElement("nfe_configuracoes");
                    oXmlGravar.WriteElementString("PastaBackup", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaBackup) ? "" : Empresa.Configuracoes[emp].PastaBackup));
                    oXmlGravar.WriteElementString("PastaXmlEmLote", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvioEmLote) ? "" : Empresa.Configuracoes[emp].PastaEnvioEmLote));
                    oXmlGravar.WriteElementString("PastaXmlAssinado", (string.IsNullOrEmpty(InfoApp.NomePastaXMLAssinado) ? "" : InfoApp.NomePastaXMLAssinado));
                    oXmlGravar.WriteElementString("PastaValidar", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaValidar) ? "" : Empresa.Configuracoes[emp].PastaValidar));
                    oXmlGravar.WriteElementString("PastaXmlEnviado", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnviado) ? "" : Empresa.Configuracoes[emp].PastaEnviado));
                    oXmlGravar.WriteElementString("PastaXmlEnvio", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvio) ? "" : Empresa.Configuracoes[emp].PastaEnvio));
                    oXmlGravar.WriteElementString("PastaXmlErro", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaErro) ? "" : Empresa.Configuracoes[emp].PastaErro));
                    oXmlGravar.WriteElementString("PastaXmlRetorno", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaRetorno) ? "" : Empresa.Configuracoes[emp].PastaRetorno));
                    oXmlGravar.WriteElementString("DiasParaLimpeza", Empresa.Configuracoes[emp].DiasLimpeza.ToString());
                    oXmlGravar.WriteElementString("DiretorioSalvarComo", Empresa.Configuracoes[emp].DiretorioSalvarComo.ToString());
                    oXmlGravar.WriteElementString("GravarRetornoTXTNFe", Empresa.Configuracoes[emp].GravarRetornoTXTNFe.ToString());
                    oXmlGravar.WriteElementString("AmbienteCodigo", Empresa.Configuracoes[emp].tpAmb.ToString());
                    oXmlGravar.WriteElementString("tpEmis", Empresa.Configuracoes[emp].tpEmis.ToString());
                    oXmlGravar.WriteElementString("UnidadeFederativaCodigo", Empresa.Configuracoes[emp].UFCod.ToString());
                    oXmlGravar.WriteEndElement(); //nfe_configuracoes

                    //Finalizar o XML
                    oXmlGravar.WriteEndElement(); //retConsInf
                    oXmlGravar.WriteEndDocument();
                    oXmlGravar.Flush();
                    oXmlGravar.Close();
                }
            }
            catch (Exception ex)
            {
                ///
                /// danasa 8-2009
                ///
                Auxiliar oAux = new Auxiliar();
                oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(sArquivo) + ".err", ex.Message);
            }
        }
示例#3
0
        /// <summary>
        /// Metodo responsável por invocar o serviço do WebService do SEFAZ - NFe Versão 1.10
        /// </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="oCabecMsg">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 oServicoNFe,
                            string cFinalArqEnvio,
                            string cFinalArqRetorno)
        {
            int emp = new FindEmpresaThread(Thread.CurrentThread).Index;

            // 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("vXmlNfeDadosMsg", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null));

            try
            {
                //Verificar se o certificado digital está vencido, se tiver vai forçar uma exceção
                CertificadoDigital CertDig = new CertificadoDigital();
                CertDig.PrepInfCertificado(Empresa.Configuracoes[emp].X509Certificado);

                if (CertDig.lLocalizouCertificado == true)
                {
                    if (DateTime.Compare(DateTime.Now, CertDig.dValidadeFinal) > 0)
                    {
                        throw new ExceptionInvocarObjeto(ErroPadrao.CertificadoVencido, "(" + CertDig.dValidadeInicial.ToString() + " a " + CertDig.dValidadeFinal.ToString() + ")");
                    }
                }

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

                // Validar o Arquivo XML
                //string cResultadoValidacao = oAux.ValidarArqXML(XmlNfeDadosMsg);
                //if (cResultadoValidacao != "")
                //{
                //    throw new Exception(cResultadoValidacao);
                //}
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            // Definir Proxy
            if (ConfiguracaoApp.Proxy)
            {
                oWSProxy.SetProp(oServicoWS, "Proxy", Auxiliar.DefinirProxy());
            }

            // Limpa a variável de retorno
            string XmlRetorno;

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

            try
            {
                //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 (!InternetCS.IsConnectedToInternet())
                {
                    //Registrar o erro da validação para o sistema ERP
                    throw new ExceptionInvocarObjeto(ErroPadrao.FalhaInternet, "\r\nArquivo: " + XmlNfeDadosMsg);
                }

                string CabecMsg    = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><cabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.02\"><versaoDados>1.07</versaoDados></cabecMsg>";
                string NFeDadosMsg = oAux.XmlToString(XmlNfeDadosMsg);

                try
                {
                    //Invocar o membro
                    XmlRetorno = (string)oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { CabecMsg, NFeDadosMsg });
                }
                catch (Exception ex)
                {
                    throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlWS, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message);
                }

                //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[] { XmlRetorno });

                // 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" });
                }
            }
            catch (ExceptionEnvioXML ex)
            {
                throw (ex);
            }
            catch (ExceptionInvocarObjeto ex)
            {
                throw (ex);
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }