Ejemplo n.º 1
0
        /// <summary>
        /// Retorna o WebService de Recepção do MDFe. (Produção)
        /// </summary>
        /// <param name="manifestoEletronico">O Manifesto Eletronico que será enviado.</param>
        /// <param name="caminhoCert">O caminho da pasta que contém o certificado. Pode ser null ou vazio para usar a pasta padrão.</param>
        /// <returns></returns>
        public static wsPSVRSMDFeRecepcao.MDFeRecepcao PSVRSMDFeRecepcao(ManifestoEletronico manifestoEletronico, string caminhoCert)
        {
            wsPSVRSMDFeRecepcao.MDFeRecepcao retorno = new wsPSVRSMDFeRecepcao.MDFeRecepcao();

            // Define 90 segundos de espera, para evitar timeout
            retorno.Timeout = 90000;

            // Recupera o participante para buscar o certificado e preenche a UF do emitente
            var participante = manifestoEletronico.Participantes.Where(f => f.TipoParticipante == TipoParticipanteEnum.Emitente).FirstOrDefault();

            // Define o certificado a ser utilizado na comunicação
            retorno.ClientCertificates.Add(GetCertificado((uint)participante.IdLoja.Value, caminhoCert));

            // Monta o cabeçalho do SOAP
            retorno.SoapVersion                   = System.Web.Services.Protocols.SoapProtocolVersion.Soap12;
            retorno.mdfeCabecMsgValue             = new wsPSVRSMDFeRecepcao.mdfeCabecMsg();
            retorno.mdfeCabecMsgValue.cUF         = LojaDAO.Instance.GetElement((uint)participante.IdLoja.Value).CodUf; // Cód UF do Emissor
            retorno.mdfeCabecMsgValue.versaoDados = ConfigMDFe.VersaoRecepcao;                                          // Versão da mensagem envelopada no SOAP

            return(retorno);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Envia pedido de encerramento do MDFe para SEFAZ
        /// </summary>
        /// <param name="idManifestoEletronico"></param>
        /// <returns></returns>
        public static string EnviaEncerramento(int idManifestoEletronico)
        {
            ManifestoEletronico mdfe = null;

            try
            {
                // Busca dados do MDFe
                mdfe = ManifestoEletronicoDAO.Instance.ObterManifestoEletronicoPeloId(idManifestoEletronico);

                // Busca XML de encerramento
                XmlDocument xmlEncerramento = ManifestoEletronicoDAO.Instance.GerarXmlMDFeEncerramento(mdfe);

                #region Envia XML

                // Salva o callback padrão do WebService
                System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback;

                // Instancia xml de retorno
                XmlNode xmlRetorno = null;

                // Realiza 3 tentativas de envio, se não funcionar, gera mensagem de erro
                for (int i = 0; i < 3; i++)
                {
                    try
                    {
                        // Altera o callback de validação do WebService
                        System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error)
                        {
                            // Verifica se a data do certificado é válida
                            DateTime beginDate   = DateTime.Parse(cert.GetEffectiveDateString());
                            DateTime endDate     = DateTime.Parse(cert.GetExpirationDateString());
                            bool     isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate);

                            // Retorna o resultado da função
                            return(isDateValid);
                        };

                        #region Envia o arquivo e recebe o retorno

                        if (mdfe.TipoEmissao == TipoEmissao.Normal)
                        {
                            if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao)
                            {
                                xmlRetorno = GetWebService.PSVRSMDFeRecepcaoEvento(mdfe, null).mdfeRecepcaoEvento(xmlEncerramento);
                            }
                            // TipoAmbienteMDFe.Homologacao
                            else
                            {
                                xmlRetorno = GetWebService.HSVRSMDFeRecepcaoEvento(mdfe, null).mdfeRecepcaoEvento(xmlEncerramento);
                            }
                        }
                        // TipoEmissao.Contingencia
                        else
                        {
                            if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao)
                            {
                                xmlRetorno = GetWebService.PSVRSMDFeRecepcaoEvento(mdfe, null).mdfeRecepcaoEvento(xmlEncerramento);
                            }
                            // TipoAmbienteMDFe.Homologacao
                            else
                            {
                                xmlRetorno = GetWebService.HSVRSMDFeRecepcaoEvento(mdfe, null).mdfeRecepcaoEvento(xmlEncerramento);
                            }
                        }
                        #endregion

                        break;
                    }
                    catch (Exception ex)
                    {
                        if (i == 2)
                        {
                            LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Encerramento", 1, "Falha ao encerrar MDFe. " + ex.Message);

                            ManifestoEletronicoDAO.Instance.AlteraSituacao(idManifestoEletronico, SituacaoEnum.FalhaEncerrar);

                            throw new Exception(ex.Message);
                        }
                    }
                    finally
                    {
                        // Restaura o callback padrão para o WebService
                        System.Net.ServicePointManager.ServerCertificateValidationCallback = callback;
                    }
                }

                #endregion

                #region Lê Xml de retorno do envio do encerramento

                // Realiza procedimentos de encerramento de MDFe
                return(ManifestoEletronicoDAO.Instance.RetornoEventoMDFe(idManifestoEletronico, xmlRetorno, "110112"));

                #endregion
            }
            catch (Exception ex)
            {
                LogMDFeDAO.Instance.NewLog(idManifestoEletronico, "Encerramento", 1, "Falha ao encerrar MDFe. " + ex.Message);

                if (mdfe.Situacao != SituacaoEnum.Encerrado)
                {
                    ManifestoEletronicoDAO.Instance.AlteraSituacao(idManifestoEletronico, SituacaoEnum.FalhaEncerrar);
                }

                throw ex;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Retorna o WebService de recepção do MDFe. (Produção)
        /// </summary>
        /// <param name="manifestoEletronico">O Manifesto Eletronico do evento</param>
        /// <param name="caminhoCert">O caminho da pasta que contém o certificado. Pode ser null ou vazio para usar a pasta padrão.</param>
        /// <returns></returns>
        public static wsPSVRSMDFeRecepcaoEvento.MDFeRecepcaoEvento PSVRSMDFeRecepcaoEvento(ManifestoEletronico manifestoEletronico, string caminhoCert)
        {
            try
            {
                wsPSVRSMDFeRecepcaoEvento.MDFeRecepcaoEvento retorno = new wsPSVRSMDFeRecepcaoEvento.MDFeRecepcaoEvento();

                // Define 200 segundos de espera, para evitar timeout
                retorno.Timeout = 200000;

                // Recupera o participante para buscar o certificado e preenche a UF do emitente
                var participante = manifestoEletronico.Participantes.Where(f => f.TipoParticipante == TipoParticipanteEnum.Emitente).FirstOrDefault();

                // Define o certificado a ser utilizado na comunicação
                retorno.ClientCertificates.Add(GetCertificado((uint)participante.IdLoja.Value, caminhoCert));

                // Monta o cabeçalho do SOAP
                retorno.SoapVersion                   = System.Web.Services.Protocols.SoapProtocolVersion.Soap12;
                retorno.mdfeCabecMsgValue             = new wsPSVRSMDFeRecepcaoEvento.mdfeCabecMsg();
                retorno.mdfeCabecMsgValue.cUF         = LojaDAO.Instance.GetElement((uint)participante.IdLoja.Value).CodUf; // Cód UF do Emissor
                retorno.mdfeCabecMsgValue.versaoDados = ConfigMDFe.VersaoRecepcaoEvento;                                    // Versão da mensagem (lote) envelopada no SOAP

                return(retorno);
            }
            catch (Exception ex)
            {
                //LogNfDAO.Instance.NewLog(manifestoEletronico.IdNf, "Instaciar Webservice", 3, Glass.MensagemAlerta.FormatErrorMsg("Falha ao instanciar webservice.", ex));
                return(null);
            }
        }