Пример #1
0
 public static void Configure(SoapHttpClientProtocol gateway)
 {
     if (gateway == null)
         throw new ArgumentNullException("gateway");
     string url = _config.GetValueFromAppConfig<string>(gateway.GetType().FullName, null);
     if (string.IsNullOrEmpty(url))
         throw new ConfigurationErrorsException(string.Format(CultureInfo.CurrentCulture, "The configuration key {0} for this gateway is missing", gateway.GetType().FullName));
     gateway.Url = url;
 }
Пример #2
0
 internal WebMethod(SoapHttpClientProtocol svc, MethodInfo methodInfo)
 {
     _svc = svc;
     _methodInfo = methodInfo;
     string argType = CustomProxyGenerator.GetMethodArgType(methodInfo.Name);
     _arg = Activator.CreateInstance(svc.GetType().Assembly.GetType(argType));
 }
        public static System.Web.Services.Protocols.SoapHttpClientProtocol ClientProxyFactory(
            Parametro oParam,
            TServico TipoServico)
        {
            String ClassName = "";

            try
            {
                string nomeClasse = string.Empty;
                //buscar nome do metodo pelo tServico
                foreach (ClasseServico atr in TipoServico.GetType().GetField(TipoServico.ToString()).GetCustomAttributes(typeof(ClasseServico), false))
                {
                    if (String.IsNullOrEmpty(atr.value))
                    {
                        throw new Exception("Serviço não esta associado com nenhuma classe cliente.");
                    }
                    nomeClasse = atr.value;
                }

                //particularidades
                if (oParam.UF == TCodUfIBGE.Bahia && oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal)//Bahia
                {
                    if (TipoServico == TServico.Status && oParam.versao == VersaoXML.NFe_v310)
                    {
                        nomeClasse = "NfeStatusServico";
                    }

                    if (TipoServico == TServico.Consulta && oParam.versao == VersaoXML.NFe_v310)
                    {
                        nomeClasse = "NfeConsulta";
                    }

                    if (TipoServico == TServico.Inutilizacao && oParam.versao == VersaoXML.NFe_v310)
                    {
                        nomeClasse = "NfeInutilizacao";
                    }
                }

                ClassName =
                    "RDI.NFe2.Business."
                    + GetAmbWebService(oParam, TipoServico) + "."
                    + TipoServico.ToString() + ".";

                String headerClassName = ClassName + "nfeCabecMsg";
                ClassName += nomeClasse;

                Type classType = GetMyAssembly().GetType(ClassName);

                if (classType == null)
                {
                    throw new Exception("Não foi possível definir o tipo do cliente de webservice. #ClientProxyFactory");
                }

                System.Web.Services.Protocols.SoapHttpClientProtocol oServico =
                    (System.Web.Services.Protocols.SoapHttpClientProtocol)System.Activator.CreateInstance(classType);

                if (TipoServico != TServico.ConsultaDFe) //ConsultaDFe não tem header
                {
                    #region Instancia cabecalho

                    Type headerClassType = GetMyAssembly().GetType(headerClassName);

                    if (headerClassType == null)
                    {
                        throw new Exception("Não foi possível definir o tipo do header do cliente de webservice. #ClientProxyFactory");
                    }

                    System.Web.Services.Protocols.SoapHeader oCabecalho =
                        (System.Web.Services.Protocols.SoapHeader)System.Activator.CreateInstance(headerClassType);


                    if ((TipoServico == TServico.ManifestacaoDestinatario) || //ManifestacaoDestinatario deverá usar AN 91
                        (TipoServico == TServico.DownloadNF))                 //DownloadNF deverá usar AN 91
                    {
                        oCabecalho.GetType().GetProperty("cUF").SetValue(oCabecalho, "91", null);
                    }
                    else
                    {
                        oCabecalho.GetType().GetProperty("cUF").SetValue(oCabecalho,
                                                                         ((System.Xml.Serialization.XmlEnumAttribute)oParam.UF.GetType().GetField(
                                                                              oParam.UF.ToString()).GetCustomAttributes(
                                                                              typeof(System.Xml.Serialization.XmlEnumAttribute), false)[0]).Name,
                                                                         null);
                    }
                    string versao = oParam.versaoDados;

                    //particularidade para ConsSitNFe usando v200
                    if (TipoServico == TServico.Consulta && oParam.versao == VersaoXML.NFe_v200)
                    {
                        versao = "2.01";
                    }

                    //Particularidade para RecepcaoEvento
                    if (TipoServico == TServico.RecepcaoEvento)
                    {
                        versao = oParam.versaoDadosEventos;
                    }

                    //particularidade para consultaCadastro
                    if (TipoServico == TServico.Cadastro)
                    {
                        versao = "2.00";
                    }

                    //particularidade para manifestacao destinatario
                    if (TipoServico == TServico.ManifestacaoDestinatario || TipoServico == TServico.DownloadNF)
                    {
                        versao = "1.00";
                    }

                    oCabecalho.GetType().GetProperty("versaoDados").SetValue(oCabecalho, versao, null);
                    oServico.GetType().GetProperty("nfeCabecMsgValue").SetValue(oServico, oCabecalho, null);
                    #endregion
                }
                return(oServico);
            }
            catch (Exception ex)
            {
                throw new Exception("ClientProxyFactory # não foi possível criar o cliente (" + ClassName + ") para acesso aos webservices da SEFAZ. InnerException: " + ex.Message);
            }
        }
Пример #4
0
        private static String ExecutaServico(
            System.Web.Services.Protocols.SoapHttpClientProtocol oServico,
            Object DADOS, Parametro oParam)
        {
            try
            {
                string dados = XMLUtils.GetXML(DADOS, oParam.versao);
                #region particularidades
                if (oParam.UF == TCodUfIBGE.Parana && (DADOS.GetType() == typeof(SchemaXML200.TEnviNFe) ||
                                                       DADOS.GetType() == typeof(SchemaXML300.TEnviNFe) ||
                                                       DADOS.GetType() == typeof(SchemaXML310.TEnviNFe)))
                {
                    dados = dados.Replace("<NFe>", "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">");
                }
                #endregion
                XmlNode node = null;

                XmlDocument doc    = new XmlDocument();
                XmlReader   reader = XmlReader.Create(new StringReader(dados));
                reader.MoveToContent();

                node = doc.ReadNode(reader);

                InicializaServico(oServico, oParam);


                if (DADOS.GetType() == typeof(RDI.NFe2.GNRE.TLote_GNRE))
                {
                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("processar",
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType() == typeof(RDI.NFe2.GNRE.TConsLote_GNRE))
                {
                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("consultar",
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType() == typeof(RDI.NFe2.GNRE.TConsultaConfigUf))
                {
                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("consultar",
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType().GetInterface("ITConsCad") != null)
                {
                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("consultaCadastro2",
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType().GetInterface("ITEnvEvento") != null)
                {
                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeRecepcaoEvento",
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType().GetInterface("ITEnviNFe") != null)
                {
                    if (((ITEnviNFe)DADOS).versao == "2.00")
                    {
                        //versao 2.00

                        #region particularidades
                        if (oParam.UF == TCodUfIBGE.Parana)
                        {
                            if (oParam.tipoAmbiente == TAmb.Homologacao)
                            {
                                oServico.Url = @"https://homologacao.nfe2.fazenda.pr.gov.br/nfe/NFeRecepcao2";
                            }
                            else
                            {
                                oServico.Url = @"https://nfe2.fazenda.pr.gov.br/nfe/NFeRecepcao2";
                            }
                        }
                        #endregion

                        XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeRecepcaoLote2",
                                                                               System.Reflection.BindingFlags.InvokeMethod,
                                                                               null, oServico, new object[] { node });

                        return(XMLUtils.GetXML(ret, oParam.versao));
                    }
                    else
                    {
                        //versao 3.00
                        //Somente meto Assincrono
                        //var test = (SchemaXML300.TEnviNFe)DADOS;
                        //test.indSinc = SchemaXML300.TEnviNFeIndSinc.Item0;//Não indica sincrono
                        //test.indSinc = SchemaXML300.TEnviNFeIndSinc.Item1; //indica sincrono, mas depende da SEFAZ autorizadora implementar servico.

                        //***.**.Autorizacao.NfeAutorizacao proxy = new ***.**.Autorizacao.NfeAutorizacao();
                        //var ret = proxy.nfeAutorizacaoLote(node);
                        //sincrono poderá ter o Nó : TProtNFe
                        //assincrono terá o Nó : TRetEnviNFeInfRec

                        var fnNome = "nfeAutorizacaoLote";

                        XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome,
                                                                               System.Reflection.BindingFlags.InvokeMethod,
                                                                               null, oServico, new object[] { node });
                        return(XMLUtils.GetXML(ret, oParam.versao));
                    }
                }
                else if (DADOS.GetType().GetInterface("ITConsReciNFe") != null)
                {
                    if (((ITConsReciNFe)DADOS).versao == "2.00")
                    {
                        //versao 2.00

                        #region particularidades
                        if (oParam.UF == TCodUfIBGE.Parana)
                        {
                            if (oParam.tipoAmbiente == TAmb.Homologacao)
                            {
                                oServico.Url = @"https://homologacao.nfe2.fazenda.pr.gov.br/nfe/NFeRetRecepcao2";
                            }
                            else
                            {
                                oServico.Url = @"https://nfe2.fazenda.pr.gov.br/nfe/NFeRetRecepcao2";
                            }
                        }
                        #endregion

                        XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeRetRecepcao2",
                                                                               System.Reflection.BindingFlags.InvokeMethod,
                                                                               null, oServico, new object[] { node });

                        return(XMLUtils.GetXML(ret, oParam.versao));
                    }
                    else
                    {
                        var fnNome = "nfeRetAutorizacaoLote";
                        if (oParam.UF == TCodUfIBGE.Parana && oParam.versao == VersaoXML.NFe_v310)
                        {
                            fnNome = "nfeRetAutorizacao";
                        }


                        //versao 3.00 ou 3.10
                        XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome,
                                                                               System.Reflection.BindingFlags.InvokeMethod,
                                                                               null, oServico, new object[] { node });

                        var temp = XMLUtils.GetXML(ret, oParam.versao);

                        if (oParam.UF == TCodUfIBGE.Pernambuco)
                        {
                            //SEFAZ PE está retornando retEnviNFe ao inves de retConsReciNFe quando lote ainda está em processamento
                            temp = temp.Replace("retEnviNFe", "retConsReciNFe");
                        }

                        return(temp);
                    }
                }
                else if (DADOS.GetType().GetInterface("ITConsStatServ") != null)
                {
                    var fnNome = "nfeStatusServicoNF2";
                    if ((oParam.UF == TCodUfIBGE.Parana || oParam.UF == TCodUfIBGE.Bahia) &&
                        oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal &&
                        oParam.versao == VersaoXML.NFe_v310)
                    {
                        fnNome = "nfeStatusServicoNF";
                    }

                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome,
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType().GetInterface("ITInutNFe") != null)
                {
                    var fnNome = "nfeInutilizacaoNF2";
                    if ((oParam.UF == TCodUfIBGE.Parana || oParam.UF == TCodUfIBGE.Bahia) &&
                        oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal &&
                        oParam.versao == VersaoXML.NFe_v310)
                    {
                        fnNome = "nfeInutilizacaoNF";
                    }

                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome,
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType().GetInterface("ITConsSitNFe") != null)
                {
                    string fnNome = "nfeConsultaNF2";
                    if ((oParam.UF == TCodUfIBGE.Parana || oParam.UF == TCodUfIBGE.Bahia) &&
                        oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal &&
                        oParam.versao == VersaoXML.NFe_v310)
                    {
                        fnNome = "nfeConsultaNF";
                    }

                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome,
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });
                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType().GetInterface("IDistDFeInt") != null)
                {
                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeDistDFeInteresse",
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else if (DADOS.GetType().GetInterface("ITDownloadNFe") != null)
                {
                    XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeDownloadNF",
                                                                           System.Reflection.BindingFlags.InvokeMethod,
                                                                           null, oServico, new object[] { node });

                    return(XMLUtils.GetXML(ret, oParam.versao));
                }
                else
                {
                    throw new Exception("Tipo de objeto de envio não mapeado. Consulte o administrador do Sistema.");
                }
            }
            catch (Exception ex)
            {
                String msg = ex.Message;
                if (ex.InnerException != null)
                {
                    msg += " inner : " + ex.InnerException.Message;
                }
                if (ex.InnerException.InnerException != null)
                {
                    msg += " inner : " + ex.InnerException.InnerException.Message;
                }

                throw new Exception("Erro ao executar Serviço : typeof(" + DADOS.GetType().ToString() + "). Verifique sua conexão com a Internet, configurações de proxy e certificado. " + msg);
            }
        }
Пример #5
0
        public static System.Web.Services.Protocols.SoapHttpClientProtocol ClientProxyFactory(Parametro oParam, TService TipoServico)
        {
            if (oParam.versao == VersaoXML.NFe_v400 &&
                (TipoServico == TService.Autorizacao ||
                 TipoServico == TService.RetAutorizacao ||
                 TipoServico == TService.ConsultaProtocolo ||
                 TipoServico == TService.Inutilizacao ||
                 TipoServico == TService.RecepcaoEvento ||
                 TipoServico == TService.Cadastro ||
                 TipoServico == TService.Status))
            {
                if (oParam.conexao == TipoConexao.NFe)
                {
                    var    tServer  = TServer.NaoMapeado;
                    string Ambiente = oParam.tipoAmbiente.ToString();

                    var AtendidoPor = (NFe_AtendidoPor)typeof(TCodUfIBGE).GetField(oParam.UF.ToString()).GetCustomAttributes(typeof(NFe_AtendidoPor), false).FirstOrDefault();
                    if (AtendidoPor == null)
                    {
                        throw new Exception("UF não está associado com nenhum Servidor Autorizador.");
                    }

                    if (oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.ContingenciaSVCAN || oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.ContingenciaSVCRS)
                    {
                        tServer = AtendidoPor.ServidorAutorizadorSVC;
                    }
                    else
                    {
                        tServer = AtendidoPor.ServidorAutorizador;
                    }

                    return(RDI.NFe2.Webservices.WSUtils.SoapHttpClientFactory(tServer, Ambiente, TipoServico));
                }
                else if (oParam.conexao == TipoConexao.NFCe)
                {
                    var AtendidoPor = (NFCe_AtendidoPor)typeof(TCodUfIBGE).GetField(oParam.UF.ToString()).GetCustomAttributes(typeof(NFCe_AtendidoPor), false).FirstOrDefault();
                    if (AtendidoPor == null)
                    {
                        throw new Exception("UF não está associado com nenhum Servidor Autorizador.");
                    }

                    string Ambiente = oParam.tipoAmbiente.ToString();

                    return(RDI.NFe2.Webservices.WSUtils.SoapHttpClientFactory(AtendidoPor.ServidorAutorizador, Ambiente, TipoServico));
                }
                else
                {
                    throw new Exception("UF não está associado com nenhum Servidor Autorizador.");
                }
            }
            else
            {
                //TODO : enviar todos os webservices ativos para o projeto rdi.nfe.webservices após a desativação da versao 3.10

                String ClassName = "";
                try
                {
                    string nomeClasse = string.Empty;
                    //buscar nome do metodo pelo tServico
                    foreach (ClasseServico atr in TipoServico.GetType().GetField(TipoServico.ToString()).GetCustomAttributes(typeof(ClasseServico), false))
                    {
                        if (String.IsNullOrEmpty(atr.NomeClasse))
                        {
                            throw new Exception("Serviço não esta associado com nenhuma classe cliente.");
                        }
                        nomeClasse = atr.NomeClasse;
                    }

                    //particularidades
                    if (oParam.UF == TCodUfIBGE.Bahia && oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal && oParam.conexao == TipoConexao.NFe)//Bahia
                    {
                        if (TipoServico == TService.Status && oParam.versao == VersaoXML.NFe_v310)
                        {
                            nomeClasse = "NfeStatusServico";
                        }

                        if (TipoServico == TService.ConsultaProtocolo && oParam.versao == VersaoXML.NFe_v310)
                        {
                            nomeClasse = "NfeConsulta";
                        }

                        if (TipoServico == TService.Inutilizacao && oParam.versao == VersaoXML.NFe_v310)
                        {
                            nomeClasse = "NfeInutilizacao";
                        }
                    }

                    var subNamespace = TipoServico.ToString();

                    if (TipoServico == TService.ConsultaProtocolo)
                    {
                        subNamespace = "Consulta";
                    }
                    else if (TipoServico == TService.ManifestacaoDestinatario || TipoServico == TService.EPEC)
                    {
                        subNamespace = "Eventos";
                    }

                    ClassName = "RDI.NFe2.Business." + GetAmbWebService(oParam, TipoServico) + "." + subNamespace + ".";

                    String headerClassName = ClassName + "nfeCabecMsg";
                    ClassName += nomeClasse;

                    Type classType = GetMyAssembly().GetType(ClassName);

                    if (classType == null)
                    {
                        throw new Exception("Não foi possível definir o tipo do cliente de webservice. #ClientProxyFactory");
                    }

                    System.Web.Services.Protocols.SoapHttpClientProtocol oServico =
                        (System.Web.Services.Protocols.SoapHttpClientProtocol)System.Activator.CreateInstance(classType);

                    if (TipoServico != TService.ConsultaDFe) //ConsultaDFe não tem header
                    {
                        #region Instancia cabecalho

                        Type headerClassType = GetMyAssembly().GetType(headerClassName);

                        if (headerClassType == null)
                        {
                            throw new Exception("Não foi possível definir o tipo do header do cliente de webservice. #ClientProxyFactory");
                        }

                        System.Web.Services.Protocols.SoapHeader oCabecalho =
                            (System.Web.Services.Protocols.SoapHeader)System.Activator.CreateInstance(headerClassType);


                        if ((TipoServico == TService.ManifestacaoDestinatario) || //ManifestacaoDestinatario deverá usar AN 91
                            (TipoServico == TService.DownloadNF) ||               //DownloadNF deverá usar AN 91
                            (TipoServico == TService.EPEC))                       //DownloadNF deverá usar AN 91
                        {
                            oCabecalho.GetType().GetProperty("cUF").SetValue(oCabecalho, "91", null);
                        }
                        else
                        {
                            oCabecalho.GetType().GetProperty("cUF").SetValue(oCabecalho,
                                                                             ((System.Xml.Serialization.XmlEnumAttribute)oParam.UF.GetType().GetField(
                                                                                  oParam.UF.ToString()).GetCustomAttributes(
                                                                                  typeof(System.Xml.Serialization.XmlEnumAttribute), false)[0]).Name,
                                                                             null);
                        }
                        string versao = oParam.versaoDados;

                        //particularidade para ConsSitNFe usando v200
                        if (TipoServico == TService.ConsultaProtocolo && oParam.versao == VersaoXML.NFe_v200)
                        {
                            versao = "2.01";
                        }

                        //Particularidade para RecepcaoEvento
                        if (TipoServico == TService.RecepcaoEvento)
                        {
                            versao = oParam.versaoDadosEventos;
                        }

                        //particularidade para consultaCadastro
                        if (TipoServico == TService.Cadastro)
                        {
                            versao = "2.00";
                        }

                        //particularidade para manifestacao destinatario
                        if (TipoServico == TService.ManifestacaoDestinatario || TipoServico == TService.EPEC || TipoServico == TService.DownloadNF)
                        {
                            versao = "1.00";
                        }

                        oCabecalho.GetType().GetProperty("versaoDados").SetValue(oCabecalho, versao, null);
                        oServico.GetType().GetProperty("nfeCabecMsgValue").SetValue(oServico, oCabecalho, null);
                        #endregion
                    }
                    return(oServico);
                }
                catch (Exception ex)
                {
                    throw new Exception("ClientProxyFactory # não foi possível criar o cliente (" + ClassName + ") para acesso aos webservices da SEFAZ. InnerException: " + ex.Message);
                }
            }
        }