Ejemplo n.º 1
0
        private async void btnConsultaSunat_Click(object sender, EventArgs e)
        {
            try
            {
                ConsultaRucSunat consultaRucSunat = new ConsultaRucSunat();
                btnConsultaSunat.Text = "Consultando...";
                Contribuyente contribuyente = await consultaRucSunat.ConsultaRuc(txtRuc.Text);

                txtRazonSocial.Text   = contribuyente.RazonSocial;
                txtDirección.Text     = contribuyente.Direccion;
                btnConsultaSunat.Text = "Consultar a SUNAT";
            }
            catch (Exception ex)
            {
                throw new Exception("Error en btnConsultaSunat_Click : " + ex.Message);
            }
        }
        public async Task <Contribuyente> ConsultaRuc(string ruc)
        {
            Contribuyente contribuyente = new Contribuyente();

            try
            {
                ServicePointManager.DefaultConnectionLimit = 2;

                // Descarga la imagen captcha
                HttpResponseMessage responseMessage = await httpClient.GetAsync($"cl-ti-itmrconsruc/captcha?accion=image");

                if (responseMessage.IsSuccessStatusCode)
                {
                    Stream responseStream = await responseMessage.Content.ReadAsStreamAsync();;
                    var    image          = new Bitmap(responseStream);
                    var    ocr            = new Tesseract();

                    // Indicamos la ruta de la libreria
                    ocr.Init(rutaTessData, "eng", false);

                    // Convertir la imagen a texto plano
                    var result = ocr.DoOCR(image, Rectangle.Empty);
                    foreach (Word word in result)
                    {
                        captcha += word.Text;
                    }
                }
                else
                {
                    return(null);
                }

                // Consulta el RUC enviando el codigo captcha
                var ConsultaRuc = await httpClient.GetAsync($"cl-ti-itmrconsruc/jcrS03Alias?accion=consPorRuc&razSoc=&nroRuc={ruc}&nrodoc=&contexto=ti-it&tQuery=on&search1={ruc}&tipdoc=1&search2=&coddpto=&codprov=&coddist=&search3=&codigo={captcha.Trim().ToUpper()}&tipodocumento=1");

                // Si la consulta es exitosa
                if (ConsultaRuc.IsSuccessStatusCode)
                {
                    string msg = string.Empty;

                    // Libreria que permite trabajar con etiquetas HTML
                    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();

                    // Carga el contenido html de la consulta
                    document.LoadHtml(await ConsultaRuc.Content.ReadAsStringAsync());
                    var NodeTable = document.DocumentNode
                                    .SelectNodes("//table")
                                    .FirstOrDefault();
                    if (NodeTable != null)
                    {
                        var listNodeTr = NodeTable.Elements("tr").ToArray();
                        if (listNodeTr != null)
                        {
                            // Extrae los valores de las celdas de la tabla.
                            var nodeRazonSocial = listNodeTr[1].Elements("td").ToArray();
                            if (nodeRazonSocial != null)
                            {
                                string ConsultaCliente = LimpiarEspacios(nodeRazonSocial[1].InnerHtml.Trim());
                                contribuyente.RUC         = ConsultaCliente.Substring(0, 11).Trim();
                                contribuyente.RazonSocial = ConsultaCliente.Substring(13, ConsultaCliente.Length - 13).Trim();
                            }
                            var nodeDireccion = listNodeTr[7].Elements("td").ToArray();
                            if (ruc.StartsWith("10"))
                            {
                                nodeDireccion = listNodeTr[8].Elements("td").ToArray();
                            }
                            if (nodeDireccion != null)
                            {
                                string ConsultaDireccion = LimpiarEspacios(nodeDireccion[1].InnerHtml.Trim());
                                contribuyente.Direccion = ConsultaDireccion.Trim();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(await Task.Run(() => contribuyente));
        }