public bool InternalRFBGetDataCNPJ(string cnpj, string captcha, out RfbCnpjCpfDataContract cnpjCpfData, out string mensagem) { var ret = new RfbCnpjCpfDataContract(); try { mensagem = null; var sendData = new NameValueCollection(); sendData.Add("cnpj", cnpj); sendData.Add("txtTexto_captcha_serpro_gov_br", captcha); sendData.Add("search_type", "cnpj"); sendData.Add("origem", "comprovante"); sendData.Add("submit1", "Consultar"); //sendData.Add("viewstate", HttpContext.Current.Session["GetCNPJViewState"].ToString()); var wc = new CookieAwareWebClient(); wc.CookieContainer = Session["GetCNPJCookies"] as CookieContainer; wc.CookieContainer.SetCookies(new Uri(AddressBase), "flag=1"); wc.Headers.Add("User-Agent", UserAgent); var resultByte = wc.UploadValues(AddressBase + AddressDataCNPJ, "POST", sendData); var result = Encoding.Default.GetString(resultByte); var valid = new HtmlDocument(); valid.LoadHtml(result); if (valid.GetElementbyId("imgcaptcha") != null) throw new ArgumentException(@"Captcha inválido", nameof(captcha)); if (result.Contains("lido. Verifique se o mesmo foi digitado corretamente")) throw new ArgumentException(@"Cnpj inválido", nameof(UtilsController)); if (result.Contains("mero de CNPJ informado. Verifique se o mesmo foi digitado corretamente.")) throw new ArgumentException(@"Cnpj inválido", nameof(UtilsController)); result = result.Remove(0, result.IndexOf("NOME EMPRESARIAL")); result = result.Remove(result.IndexOf("DATA DA SITUA"), result.Length - result.IndexOf("DATA DA SITUA")); var docHtml = new HtmlDocument(); docHtml.LoadHtml(result); var dataResult = docHtml.DocumentNode.Descendants() .Where(i => i.Name == "font") .Select(i => i.InnerText.Replace("\t", "").Replace("\r", "").Replace("\n", "").RemoveAccents()) .ToList(); var available = string.Empty; ret.Status = true; foreach (var item in dataResult) { if (!string.IsNullOrEmpty(available)) { var data = CultureInfo.GetCultureInfo("pt-BR").TextInfo.ToTitleCase(item.Trim()); switch (available) { case "NOME EMPRESARIAL": ret.RazaoSocial = data; break; case "TITULO DO ESTABELECIMENTO (NOME DE FANTASIA)": ret.NomeFantasia = data; break; case "LOGRADOURO": ret.Logradouro = data; break; case "NUMERO": ret.Numero = data; break; case "COMPLEMENTO": ret.Complemento = data; break; case "CEP": ret.Cep = data; break; case "BAIRRO/DISTRITO": ret.Bairro = data; break; case "MUNICIPIO": ret.Cidade = data; break; case "UF": ret.Estado = data; break; case "SITUACAO CADASTRAL": ret.Status = data.Trim().ToLower() == "ativa"; break; case "CODIGO E DESCRICAO DA ATIVIDADE ECONOMICA PRINCIPAL": ret.CnaePrincipal = data; break; case "CODIGO E DESCRICAO DAS ATIVIDADES ECONOMICAS SECUNDARIAS": ret.CnaeSecundario = data; break; case "CODIGO E DESCRICAO DA NATUREZA JURIDICA": ret.NaturezaJuridica = data; break; } available = null; } if (keysCNPJ.Contains(item)) available = item; } cnpjCpfData = ret; return true; } catch (Exception) { mensagem = "Captcha inválido"; } cnpjCpfData = null; return false; }
public bool InternalRFBGetData(string document, string captcha, out RfbCnpjCpfDataContract saida, out string mensagem) { document = StringHelper.GetStringNumbersOnly(document); if (document.Length == 14) return InternalRFBGetDataCNPJ(document, captcha, out saida, out mensagem); saida = null; mensagem = "Documento inválido"; return false; }