/// <summary> /// Consulta o cadastro de contribuintes do ICMS da unidade federada. /// </summary> public static string ConsultaSitCadastroContribuinte(string uf, string cpfCnpj) { if (string.IsNullOrEmpty(uf) || string.IsNullOrEmpty(cpfCnpj)) { return("Contribuinte não encontrado."); } #region Monta XML XmlDocument xmlConsCad = new XmlDocument(); XmlNode declarationNode = xmlConsCad.CreateXmlDeclaration("1.0", "UTF-8", null); xmlConsCad.AppendChild(declarationNode); XmlElement consCad = xmlConsCad.CreateElement("ConsCad"); consCad.SetAttribute("versao", ConfigNFe.VersaoConsCad); consCad.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe"); xmlConsCad.AppendChild(consCad); XmlElement infCons = xmlConsCad.CreateElement("infCons"); consCad.AppendChild(infCons); ManipulacaoXml.SetNode(xmlConsCad, infCons, "xServ", "CONS-CAD"); ManipulacaoXml.SetNode(xmlConsCad, infCons, "UF", uf); cpfCnpj = Formatacoes.LimpaCpfCnpj(cpfCnpj); if (cpfCnpj.Length == 11) { ManipulacaoXml.SetNode(xmlConsCad, infCons, "CPF", cpfCnpj); } else { ManipulacaoXml.SetNode(xmlConsCad, infCons, "CNPJ", cpfCnpj); } #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); }; // Envia o arquivo e recebe o retorno. xmlRetorno = EnviaXML.ObterXmlConsultaCadastroContribuinte(uf, xmlConsCad); } 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) { return("Falha ao comunicar com webservice da SEFAZ."); } XmlDocument xmlDocRetorno = new XmlDocument(); xmlDocRetorno.ImportNode(xmlRetorno, true); XmlNamespaceManager nMgr = new XmlNamespaceManager(xmlDocRetorno.NameTable); nMgr.AddNamespace("nfe", "http://www.portalfiscal.inf.br/nfe"); XmlNode infoCons = xmlRetorno.SelectSingleNode("//nfe:infCons", nMgr); var codStatus = infoCons?["cStat"]?.InnerText; var retorno = string.Empty; if (codStatus == "111" || codStatus == "112") { retorno += "Consulta Situação do Contribuinte no Sintegra\n\n"; retorno += "Situação: "; if (infoCons["infCad"]["cSit"].InnerText == "1") { retorno += "Habilitado."; } else { retorno += "Não Habilitado."; } } else { retorno += "Falha na Consulta Situação do Contribuinte no Sintegra\n\n"; retorno += "Código: " + codStatus + "\n"; retorno += infoCons?["xMotivo"]?.InnerText; } ClienteDAO.Instance.AtualizaUltimaConsultaSintegra(cpfCnpj); return(retorno); }
private static string ConsultaSitNFCe(NotaFiscal nf) { #region Monta XML XmlDocument xmlConsSitNFe = new XmlDocument(); XmlNode declarationNode = xmlConsSitNFe.CreateXmlDeclaration("1.0", "UTF-8", null); xmlConsSitNFe.AppendChild(declarationNode); XmlElement consSitNFe = xmlConsSitNFe.CreateElement("consSitNFe"); consSitNFe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe"); consSitNFe.SetAttribute("versao", ConfigNFe.VersaoConsulta); xmlConsSitNFe.AppendChild(consSitNFe); ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "tpAmb", ((int)ConfigNFe.TipoAmbiente).ToString()); ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "xServ", "CONSULTAR"); ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "chNFe", nf.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); }; // Envia o arquivo e recebe o retorno. xmlRetorno = EnviaXML.ObterXmlConsultaProtocoloNFCe(nf, xmlConsSitNFe); } catch (Exception ex) { LogNfDAO.Instance.NewLog(nf.IdNf, "Instaciar Webservice", 3, MensagemAlerta.FormatErrorMsg("Falha ao instanciar webservice.", 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."); } var codStatus = xmlRetorno?["cStat"]?.InnerXml; // Executa ações de acordo com o retorno dado NotaFiscalDAO.Instance.RetornoConsSitNFe(nf.IdNf, xmlRetorno); if (codStatus == "100" || codStatus == "150") // NFe Autorizada { return("NFe está autorizada para uso."); } else // NFe rejeitada { var 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(nf.IdNf, xmlRetorno?["xMotivo"]?.InnerXml) }"); } }
/// <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)); } }
/// <summary> /// Consulta situação do MDFe /// </summary> /// <param name="idManifestoEletronico"></param> public static string ConsultaSitMDFe(int idManifestoEletronico) { // Busca dados do Manifesto Eletronico var mdfe = ManifestoEletronicoDAO.Instance.ObterManifestoEletronicoPeloId(idManifestoEletronico); #region Monta XML XmlDocument xmlConsSitMDFe = new XmlDocument(); XmlNode declarationNode = xmlConsSitMDFe.CreateXmlDeclaration("1.0", "UTF-8", null); xmlConsSitMDFe.AppendChild(declarationNode); XmlElement consSitMDFe = xmlConsSitMDFe.CreateElement("consSitMDFe"); consSitMDFe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/mdfe"); consSitMDFe.SetAttribute("versao", ConfigMDFe.VersaoConsulta); xmlConsSitMDFe.AppendChild(consSitMDFe); ManipulacaoXml.SetNode(xmlConsSitMDFe, consSitMDFe, "tpAmb", ((int)ConfigMDFe.TipoAmbiente).ToString()); ManipulacaoXml.SetNode(xmlConsSitMDFe, consSitMDFe, "xServ", "CONSULTAR"); ManipulacaoXml.SetNode(xmlConsSitMDFe, consSitMDFe, "chMDFe", mdfe.ChaveAcesso); #endregion #region Valida XML //try //{ // ValidaXML.Validar(xmlConsSitMDFe, ValidaXML.TipoArquivoXml.ConsultaSituacaoMDFe); //} //catch (Exception ex) //{ // throw new Exception("XML inconsistente." + ex.Message); //} #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 if (mdfe.TipoEmissao == Glass.Data.Model.TipoEmissao.Normal) { if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao) { xmlRetorno = GetWebService.PSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe); } // TipoAmbienteMDFe.Homologacao else { xmlRetorno = GetWebService.HSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe); } } // TipoEmissao.Contingencia else { if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao) { xmlRetorno = GetWebService.PSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe); } // TipoAmbienteMDFe.Homologacao else { xmlRetorno = GetWebService.HSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe); } } #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; } // Executa ações de acordo com o retorno return(ManifestoEletronicoDAO.Instance.RetornoConsSitMDFe(idManifestoEletronico, xmlRetorno)); }
// TODO TESTE GerarCartaCorrecao private XmlDocument GeraXmlCartaCorrecao(uint idCarta, bool preVisualizar) { CartaCorrecao obj = GetElement(idCarta); NotaFiscal nf = NotaFiscalDAO.Instance.GetElement(obj.IdNf); XmlDocument doc = new XmlDocument(); XmlNode declarationNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); doc.AppendChild(declarationNode); XmlElement evento = doc.CreateElement("evento"); evento.SetAttribute("versao", "1.00"); evento.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe"); doc.AppendChild(evento); XmlElement infEvento = doc.CreateElement("infEvento"); //Identificador da TAG a ser assinada, a regra de formação //do Id é: //“ID” + tpEvento + chave da NF-e + nSeqEvento infEvento.SetAttribute("Id", obj.IdInfEvento); evento.AppendChild(infEvento); // Código do órgão de recepção do Evento. Utilizar a Tabela // do IBGE, utilizar 90 para identificar o Ambiente Nacional. XmlElement cOrgao = doc.CreateElement("cOrgao"); cOrgao.InnerText = Configuracoes.FiscalConfig.NotaFiscalConfig.ContingenciaNFe == DataSources.TipoContingenciaNFe.NaoUtilizar ? obj.Orgao.ToString() : "90"; infEvento.AppendChild(cOrgao); // Identificação do Amb // 1 - Produção // 2 – Homologação XmlElement tpAmb = doc.CreateElement("tpAmb"); tpAmb.InnerText = obj.TipoAmbiente.ToString(); infEvento.AppendChild(tpAmb); if (!string.IsNullOrEmpty(obj.CPF)) { XmlElement CPF = doc.CreateElement("CPF"); CPF.InnerText = obj.CPF.ToString().PadLeft(11, '0'); infEvento.AppendChild(CPF); } else if (!string.IsNullOrEmpty(obj.CNPJ)) { XmlElement CNPJ = doc.CreateElement("CNPJ"); CNPJ.InnerText = obj.CNPJ.ToString().PadLeft(14, '0'); infEvento.AppendChild(CNPJ); } XmlElement chNFe = doc.CreateElement("chNFe"); chNFe.InnerText = obj.ChaveNFe; infEvento.AppendChild(chNFe); XmlElement dhEvento = doc.CreateElement("dhEvento"); dhEvento.InnerText = DateTime.Now.AddMinutes(-10).ToString("yyyy-MM-ddTHH:mm:ssK"); infEvento.AppendChild(dhEvento); //Código do de evento = 110110 XmlElement tpEvento = doc.CreateElement("tpEvento"); tpEvento.InnerText = obj.TipoEvento.ToString(); infEvento.AppendChild(tpEvento); XmlElement nSeqEvento = doc.CreateElement("nSeqEvento"); nSeqEvento.InnerText = obj.NumeroSequencialEvento.ToString(); infEvento.AppendChild(nSeqEvento); XmlElement verEvento = doc.CreateElement("verEvento"); verEvento.InnerText = obj.VersaoEvento; infEvento.AppendChild(verEvento); XmlElement detEvento = doc.CreateElement("detEvento"); detEvento.SetAttribute("versao", "1.00"); ManipulacaoXml.SetNode(doc, detEvento, "descEvento", obj.DescricaoEvento); ManipulacaoXml.SetNode(doc, detEvento, "xCorrecao", obj.Correcao); ManipulacaoXml.SetNode(doc, detEvento, "xCondUso", obj.CondicaoUso); infEvento.AppendChild(detEvento); #region Assina CCe try { if (!preVisualizar) { MemoryStream stream = new MemoryStream(); doc.Save(stream); using (stream) { // Classe responsável por assinar o xml da NFe AssinaturaDigital AD = new AssinaturaDigital(); System.Security.Cryptography.X509Certificates.X509Certificate2 cert = Certificado.GetCertificado(nf.IdLoja.Value); if (DateTime.Now > cert.NotAfter) { throw new Exception("O certificado digital cadastrado está vencido, insira um novo certificado para emitir esta nota. Data Venc.: " + cert.GetExpirationDateString()); } int resultado = AD.Assinar(ref doc, "infEvento", cert); if (resultado > 0) { throw new Exception(AD.mensagemResultado); } } } } catch (Exception ex) { throw new Exception("Falha ao assinar Carta de Correção." + ex.Message); } #endregion #region Valida XML try { if (!preVisualizar) { ValidaXML.Validar(doc, ValidaXML.TipoArquivoXml.CCe); } } catch (Exception ex) { throw new Exception("XML inconsistente." + ex.Message); } #endregion #region Salva arquivo XML da CCe try { string fileName = Utils.GetCartaCorrecaoXmlPath + doc["evento"]["infEvento"].GetAttribute("Id").Remove(0, 3) + "-cce.xml"; if (File.Exists(fileName)) { File.Delete(fileName); } doc.Save(fileName); } catch (Exception ex) { throw new Exception("Falha ao salvar arquivo xml da CCe. " + ex.Message); } #endregion return(doc); }