예제 #1
0
        /// <summary>
        /// Envia pedido de consulta não encerrados para SEFAZ
        /// </summary>
        /// <param name="idLoja"></param>
        /// <returns></returns>
        public static string EnviaConsultaNaoEncerrados(uint idLoja)
        {
            try
            {
                var tipoEmissao = Configuracoes.FiscalConfig.ManifestoEletronico.ContingenciaMDFe == Helper.DataSources.TipoContingenciaMDFe.NaoUtilizar ? TipoEmissao.Normal :
                                  TipoEmissao.Contingencia;

                var lojaEmitente = LojaDAO.Instance.GetElement(idLoja);

                // Busca XML de encerramento
                XmlDocument xmlConsMDFeNaoEnc = ManifestoEletronicoDAO.Instance.GerarXmlMDFeConsultaNaoEncerrados(lojaEmitente);

                #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 (tipoEmissao == TipoEmissao.Normal)
                        {
                            if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao)
                            {
                                xmlRetorno = GetWebService.PSVRSMDFeConsultaNaoEncerrado(lojaEmitente, null).mdfeConsNaoEnc(xmlConsMDFeNaoEnc);
                            }
                            // TipoAmbienteMDFe.Homologacao
                            else
                            {
                                xmlRetorno = GetWebService.HSVRSMDFeConsultaNaoEncerrado(lojaEmitente, null).mdfeConsNaoEnc(xmlConsMDFeNaoEnc);
                            }
                        }
                        // TipoEmissao.Contingencia
                        else
                        {
                            if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao)
                            {
                                xmlRetorno = GetWebService.PSVRSMDFeConsultaNaoEncerrado(lojaEmitente, null).mdfeConsNaoEnc(xmlConsMDFeNaoEnc);
                            }
                            // TipoAmbienteMDFe.Homologacao
                            else
                            {
                                xmlRetorno = GetWebService.HSVRSMDFeConsultaNaoEncerrado(lojaEmitente, null).mdfeConsNaoEnc(xmlConsMDFeNaoEnc);
                            }
                        }
                        #endregion

                        break;
                    }
                    catch (Exception ex)
                    {
                        if (i == 2)
                        {
                            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 consulta não encerrados

                return(ManifestoEletronicoDAO.Instance.RetornoConsultaNaoEncerrados(xmlRetorno));

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }