/// <summary> /// Consulta situação do CTe /// </summary> /// <param name="idNf"></param> public static string ConsultaSitCTe(uint idCte) { ConhecimentoTransporte cte = ConhecimentoTransporteDAO.Instance.GetElement(idCte); #region Monta XML XmlDocument xmlConsSitCTe = new XmlDocument(); XmlNode declarationNode = xmlConsSitCTe.CreateXmlDeclaration("1.0", "UTF-8", null); xmlConsSitCTe.AppendChild(declarationNode); XmlElement consSitCTe = xmlConsSitCTe.CreateElement("consSitCTe"); consSitCTe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/cte"); consSitCTe.SetAttribute("versao", ConfigCTe.VersaoConsulta); xmlConsSitCTe.AppendChild(consSitCTe); ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "tpAmb", ((int)ConfigCTe.TipoAmbiente).ToString()); ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "xServ", "CONSULTAR"); ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "chCTe", cte.ChaveAcesso); #endregion // Salva o callback padrão do WebService System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback; XmlNode xmlRetorno = null; 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 var participante = ParticipanteCteDAO.Instance.GetParticipanteByIdCteTipo(cte.IdCte, (int)ParticipanteCte.TipoParticipanteEnum.Emitente); string uf = LojaDAO.Instance.GetElement(participante.IdLoja.Value).Uf.ToUpper(); if (cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.Normal) { if (ConfigCTe.TipoAmbiente == ConfigCTe.TipoAmbienteCte.Producao) { switch (uf) { case "MT": xmlRetorno = GetWebService.PMTCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "MS": xmlRetorno = GetWebService.PMSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "MG": xmlRetorno = GetWebService.PMGCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "PR": xmlRetorno = GetWebService.PPRCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "RS": xmlRetorno = GetWebService.PRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "SP": xmlRetorno = GetWebService.PSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "AP": case "PE": case "RR": xmlRetorno = GetWebService.PSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "AC": case "AL": case "AM": case "BA": case "CE": case "DF": case "ES": case "GO": case "MA": case "PA": case "PB": case "PI": case "RJ": case "RN": case "RO": case "SC": case "SE": case "TO": xmlRetorno = GetWebService.PSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; } } else { switch (uf) { //case "MT": // xmlRetorno = GetWebService.HMTCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "MS": xmlRetorno = GetWebService.HMSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "MG": xmlRetorno = GetWebService.HMGCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "PR": xmlRetorno = GetWebService.HPRCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "RS": xmlRetorno = GetWebService.HRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "SP": xmlRetorno = GetWebService.HSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "AP": case "PE": case "RR": xmlRetorno = GetWebService.HSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "AC": case "AL": case "AM": case "BA": case "CE": case "DF": case "ES": case "GO": case "MA": case "PA": case "PB": case "PI": case "RJ": case "RN": case "RO": case "SC": case "SE": case "TO": xmlRetorno = GetWebService.HSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; } } } else if (cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcRs || cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcSp) { if (ConfigCTe.TipoAmbiente == ConfigCTe.TipoAmbienteCte.Producao) { switch (uf) { case "AP": case "MT": case "MS": case "PE": case "RR": case "SP": xmlRetorno = GetWebService.PSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "AC": case "AL": case "AM": case "BA": case "CE": case "DF": case "ES": case "GO": case "MA": case "MG": case "PA": case "PB": case "PI": case "PR": case "RJ": case "RN": case "RO": case "RS": case "SC": case "SE": case "TO": xmlRetorno = GetWebService.PSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; } } else { switch (uf) { case "AP": case "MT": case "MS": case "PE": case "RR": case "SP": xmlRetorno = GetWebService.HSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; case "AC": case "AL": case "AM": case "BA": case "CE": case "DF": case "ES": case "GO": case "MA": case "MG": case "PA": case "PB": case "PI": case "PR": case "RJ": case "RN": case "RO": case "RS": case "SC": case "SE": case "TO": xmlRetorno = GetWebService.HSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break; } } } #endregion } catch (Exception ex) { throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex)); } finally { // Restaura o callback padrão para o WebService System.Net.ServicePointManager.ServerCertificateValidationCallback = callback; } if (xmlRetorno == null) { throw new Exception("Falha ao comunicar com webservice da SEFAZ."); } string codStatus = xmlRetorno["cStat"].InnerXml; // Executa ações de acordo com o retorno dado ConhecimentoTransporteDAO.Instance.RetornoConsSitCTe(idCte, xmlRetorno); if (codStatus == "100" || codStatus == "150") // CTe Autorizado { return("CTe está autorizada para uso."); } else // CTe rejeitado { string msgErro = "Falha na consulta. "; if (codStatus == "215" || codStatus == "516" || codStatus == "517" || codStatus == "545") { msgErro += "Mensagem de consulta inválida. "; } return(msgErro + xmlRetorno["cStat"].InnerXml + " - " + CustomizaMensagemRejeicao(idCte, xmlRetorno["xMotivo"].InnerXml)); } }