Ejemplo n.º 1
0
        private void btnGen_Click(object sender, EventArgs e)
        {
            try
            {
                using (var conexion = new ConexionSunat("20101295673", "MODDATOS", "MODDATOS"))
                {
                    var fileZip = Path.GetFileName(txtSource.Text);

                    var byteArray = File.ReadAllBytes(txtSource.Text);

                    Cursor = Cursors.WaitCursor;

                    var resultado = conexion.EnviarDocumento(Convert.ToBase64String(byteArray), fileZip);

                    if (resultado.Item2)
                    {
                        var returnByte = Convert.FromBase64String(resultado.Item1);

                        var fs = new FileStream(Directory.GetCurrentDirectory() + "R-" + fileZip + ".zip", FileMode.Create);
                        fs.Write(returnByte, 0, returnByte.Length);
                        fs.Close();

                        txtResult.Text = @"Todo correcto!";
                    }
                    else
                    {
                        txtResult.Text = resultado.Item1;
                    }
                }
            }
            catch (System.ServiceModel.FaultException exSer)
            {
                txtResult.Text = exSer.ToString();
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Ejemplo n.º 2
0
        public EnviarResumenResponse Post([FromBody] EnviarDocumentoRequest request)
        {
            var response      = new EnviarResumenResponse();
            var serializador  = new Serializador();
            var nombreArchivo = $"{request.Ruc}-{request.IdDocumento}";

            try
            {
                var tramaZip = serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo);

                var conexionSunat = new ConexionSunat(new ConexionSunat.Parametros
                {
                    Ruc         = request.Ruc,
                    UserName    = request.UsuarioSol,
                    Password    = request.ClaveSol,
                    EndPointUrl = request.EndPointUrl
                });

                var resultado = conexionSunat.EnviarResumenBaja(tramaZip, $"{nombreArchivo}.zip");

                if (resultado.Item2)
                {
                    response.NroTicket     = resultado.Item1;
                    response.Exito         = true;
                    response.NombreArchivo = nombreArchivo;
                }
                else
                {
                    response.MensajeError = resultado.Item1;
                    response.Exito        = false;
                }
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
        private void btnGen_Click(object sender, EventArgs e)
        {
            try
            {
                string codigoTipoDoc;
                switch (cboTipoDoc.SelectedIndex)
                {
                    case 0:
                        codigoTipoDoc = "01";
                        break;
                    case 1:
                        codigoTipoDoc = "03";
                        break;
                    case 2:
                        codigoTipoDoc = "07";
                        break;
                    case 3:
                        codigoTipoDoc = "08";
                        break;
                    case 4:
                        codigoTipoDoc = "20";
                        break;
                    case 5:
                        codigoTipoDoc = "40";
                        break;
                    default:
                        codigoTipoDoc = "01";
                        break;
                }
                // Una vez validado el XML seleccionado procedemos con obtener el Certificado.
                var serializar = new Serializador
                {
                    RutaCertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(txtRutaCertificado.Text)),
                    PasswordCertificado = txtPassCertificado.Text,
                    TipoDocumento = rbRetenciones.Checked ? 0 : 1
                };

                using (var conexion = new ConexionSunat(txtNroRuc.Text, txtUsuarioSol.Text,
                    txtClaveSol.Text, rbRetenciones.Checked ? "ServicioSunatRetenciones" : string.Empty))
                {
                    var byteArray = File.ReadAllBytes(txtSource.Text);

                    Cursor = Cursors.WaitCursor;

                    // Firmamos el XML.
                    var tramaFirmado = serializar.FirmarXml(Convert.ToBase64String(byteArray));
                    // Le damos un nuevo nombre al archivo
                    var nombreArchivo = $"{txtNroRuc.Text}-{codigoTipoDoc}-{txtSerieCorrelativo.Text}";
                    // Escribimos el archivo XML ya firmado en una nueva ubicación.
                    using (var fs = File.Create($"{nombreArchivo}.xml"))
                    {
                        var byteFirmado = Convert.FromBase64String(tramaFirmado);
                        fs.Write(byteFirmado, 0, byteFirmado.Length);
                    }
                    // Ahora lo empaquetamos en un ZIP.
                    var tramaZip = serializar.GenerarZip(tramaFirmado, nombreArchivo);

                    var resultado = conexion.EnviarDocumento(tramaZip, $"{nombreArchivo}.zip");

                    if (resultado.Item2)
                    {
                        var returnByte = Convert.FromBase64String(resultado.Item1);

                        var rutaArchivo = $"{Directory.GetCurrentDirectory()}\\R-{nombreArchivo}.zip";
                        var fs = new FileStream(rutaArchivo, FileMode.Create, FileAccess.Write);
                        fs.Write(returnByte, 0, returnByte.Length);
                        fs.Close();

                        var sb = new StringBuilder();

                        // Añadimos la respuesta del Servicio.
                        sb.AppendLine(Resources.procesoCorrecto);

                        // Extraemos el XML contenido en el archivo de respuesta como un XML.
                        var rutaArchivoXmlRespuesta = rutaArchivo.Replace(".zip", ".xml");
                        // Procedemos a desempaquetar el archivo y leer el contenido de la respuesta SUNAT.
                        using (var streamZip = ZipFile.Read(File.Open(rutaArchivo,
                            FileMode.Open,
                            FileAccess.ReadWrite)))
                        {
                            // Nos aseguramos de que el ZIP contiene al menos un elemento.
                            if (streamZip.Entries.Any())
                            {
                                if (rbRetenciones.Checked)
                                    streamZip.Entries.Last()
                                    .Extract(".", ExtractExistingFileAction.OverwriteSilently);
                                else
                                    streamZip.Entries.First()
                                        .Extract(".", ExtractExistingFileAction.OverwriteSilently);
                            }
                        }
                        // Como ya lo tenemos extraido, leemos el contenido de dicho archivo.
                        var xDoc = XDocument.Parse(File.ReadAllText(rutaArchivoXmlRespuesta));

                        var respuesta = xDoc.Descendants(XName.Get("DocumentResponse", EspacioNombres.cac))
                            .Descendants(XName.Get("Response", EspacioNombres.cac))
                            .Descendants().ToList();

                        if (respuesta.Any())
                        {
                            // La respuesta se compone de 3 valores
                            // cbc:ReferenceID
                            // cbc:ResponseCode
                            // cbc:Description
                            // Obtendremos unicamente la Descripción (la última).
                            sb.AppendLine($"Respuesta de SUNAT a las {DateTime.Now}");
                            sb.AppendLine(((XText)respuesta.Nodes().Last()).Value);
                        }

                        txtResult.Text = sb.ToString();
                        sb.Length = 0; // Limpiamos memoria del StringBuilder.
                    }
                    else
                        txtResult.Text = resultado.Item1;
                }
            }
            catch (FaultException exSer)
            {
                txtResult.Text = exSer.ToString();
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Ejemplo n.º 4
0
        private void btnGen_Click(object sender, EventArgs e)
        {
            try
            {
                string codigoTipoDoc;
                switch (cboTipoDoc.SelectedIndex)
                {
                case 0:
                    codigoTipoDoc = "01";
                    break;

                case 1:
                    codigoTipoDoc = "03";
                    break;

                case 2:
                    codigoTipoDoc = "07";
                    break;

                case 3:
                    codigoTipoDoc = "08";
                    break;

                case 4:
                    codigoTipoDoc = "20";
                    break;

                case 5:
                    codigoTipoDoc = "40";
                    break;

                default:
                    codigoTipoDoc = "01";
                    break;
                }
                // Una vez validado el XML seleccionado procedemos con obtener el Certificado.
                var serializar = new Serializador
                {
                    RutaCertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(txtRutaCertificado.Text)),
                    PasswordCertificado    = txtPassCertificado.Text,
                    TipoDocumento          = rbRetenciones.Checked ? 0 : 1
                };

                using (var conexion = new ConexionSunat(txtNroRuc.Text, txtUsuarioSol.Text,
                                                        txtClaveSol.Text, rbRetenciones.Checked ? "ServicioSunatRetenciones" : string.Empty))
                {
                    var byteArray = File.ReadAllBytes(txtSource.Text);

                    Cursor = Cursors.WaitCursor;

                    // Firmamos el XML.
                    var tramaFirmado = serializar.FirmarXml(Convert.ToBase64String(byteArray));
                    // Le damos un nuevo nombre al archivo
                    var nombreArchivo = $"{txtNroRuc.Text}-{codigoTipoDoc}-{txtSerieCorrelativo.Text}";
                    // Escribimos el archivo XML ya firmado en una nueva ubicación.
                    using (var fs = File.Create($"{nombreArchivo}.xml"))
                    {
                        var byteFirmado = Convert.FromBase64String(tramaFirmado);
                        fs.Write(byteFirmado, 0, byteFirmado.Length);
                    }
                    // Ahora lo empaquetamos en un ZIP.
                    var tramaZip = serializar.GenerarZip(tramaFirmado, nombreArchivo);

                    var resultado = conexion.EnviarDocumento(tramaZip, $"{nombreArchivo}.zip");

                    if (resultado.Item2)
                    {
                        var returnByte = Convert.FromBase64String(resultado.Item1);

                        var rutaArchivo = $"{Directory.GetCurrentDirectory()}\\R-{nombreArchivo}.zip";
                        var fs          = new FileStream(rutaArchivo, FileMode.Create, FileAccess.Write);
                        fs.Write(returnByte, 0, returnByte.Length);
                        fs.Close();

                        var sb = new StringBuilder();

                        // Añadimos la respuesta del Servicio.
                        sb.AppendLine(Resources.procesoCorrecto);

                        // Extraemos el XML contenido en el archivo de respuesta como un XML.
                        var rutaArchivoXmlRespuesta = rutaArchivo.Replace(".zip", ".xml");
                        // Procedemos a desempaquetar el archivo y leer el contenido de la respuesta SUNAT.
                        using (var streamZip = ZipFile.Read(File.Open(rutaArchivo,
                                                                      FileMode.Open,
                                                                      FileAccess.ReadWrite)))
                        {
                            // Nos aseguramos de que el ZIP contiene al menos un elemento.
                            if (streamZip.Entries.Any())
                            {
                                streamZip.Entries.First()
                                .Extract(".", ExtractExistingFileAction.OverwriteSilently);
                            }
                        }
                        // Como ya lo tenemos extraido, leemos el contenido de dicho archivo.
                        var xDoc = XDocument.Parse(File.ReadAllText(rutaArchivoXmlRespuesta));

                        var respuesta = xDoc.Descendants(XName.Get("DocumentResponse", EspacioNombres.cac))
                                        .Descendants(XName.Get("Response", EspacioNombres.cac))
                                        .Descendants().ToList();

                        if (respuesta.Any())
                        {
                            // La respuesta se compone de 3 valores
                            // cbc:ReferenceID
                            // cbc:ResponseCode
                            // cbc:Description
                            // Obtendremos unicamente la Descripción (la última).
                            sb.AppendLine($"Respuesta de SUNAT a las {DateTime.Now}");
                            sb.AppendLine(((XText)respuesta.Nodes().Last()).Value);
                        }

                        txtResult.Text = sb.ToString();
                        sb.Length      = 0; // Limpiamos memoria del StringBuilder.
                    }
                    else
                    {
                        txtResult.Text = resultado.Item1;
                    }
                }
            }
            catch (FaultException exSer)
            {
                txtResult.Text = exSer.ToString();
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
        public EnviarDocumentoResponse Post([FromBody] ConsultaTicketRequest request)
        {
            var response = new EnviarDocumentoResponse();

            try
            {
                var conexionSunat = new ConexionSunat(new ConexionSunat.Parametros
                {
                    Ruc         = request.Ruc,
                    UserName    = request.UsuarioSol,
                    Password    = request.ClaveSol,
                    EndPointUrl = request.EndPointUrl
                });

                var resultado = conexionSunat.ObtenerEstado(request.NroTicket);

                if (resultado.Item2)
                {
                    var returnByte = Convert.FromBase64String(resultado.Item1);
                    using (var memRespuesta = new MemoryStream(returnByte))
                    {
                        using (var zipFile = ZipFile.Read(memRespuesta))
                        {
                            foreach (var entry in zipFile.Entries)
                            {
                                if (!entry.FileName.EndsWith(".xml"))
                                {
                                    continue;
                                }
                                using (var ms = new MemoryStream())
                                {
                                    entry.Extract(ms);
                                    ms.Position = 0;
                                    var responseReader = new StreamReader(ms);
                                    var responseString = responseReader.ReadToEnd();
                                    try
                                    {
                                        var xmlDoc = new XmlDocument();
                                        xmlDoc.LoadXml(responseString);

                                        var xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable);

                                        xmlnsManager.AddNamespace("ar", EspacioNombres.ar);
                                        xmlnsManager.AddNamespace("cac", EspacioNombres.cac);
                                        xmlnsManager.AddNamespace("cbc", EspacioNombres.cbc);

                                        response.CodigoRespuesta = xmlDoc.SelectSingleNode(EspacioNombres.nodoResponseCode,
                                                                                           xmlnsManager)?.InnerText;

                                        response.MensajeRespuesta = xmlDoc.SelectSingleNode(EspacioNombres.nodoDescription,
                                                                                            xmlnsManager)?.InnerText;
                                        response.TramaZipCdr = resultado.Item1;
                                        response.Exito       = true;
                                    }
                                    catch (Exception ex)
                                    {
                                        response.MensajeError = ex.Message;
                                        response.Pila         = ex.StackTrace;
                                        response.Exito        = false;
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    response.Exito            = true;
                    response.MensajeRespuesta = resultado.Item1;
                }
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
Ejemplo n.º 6
0
        private void btnGen_Click(object sender, EventArgs e)
        {
            try
            {
                string codigoTipoDoc;
                string letraTipoDoc;
                switch (cboTipoDoc.SelectedIndex)
                {
                case 0:
                    letraTipoDoc  = "F";
                    codigoTipoDoc = "01";
                    break;

                case 1:
                    letraTipoDoc  = "B";
                    codigoTipoDoc = "03";
                    break;

                case 2:
                    letraTipoDoc  = "F";
                    codigoTipoDoc = "07";
                    break;

                case 3:
                    letraTipoDoc  = "F";
                    codigoTipoDoc = "08";
                    break;

                case 4:
                    letraTipoDoc  = "R";
                    codigoTipoDoc = "20";
                    break;

                case 5:
                    letraTipoDoc  = "P";
                    codigoTipoDoc = "40";
                    break;

                default:
                    letraTipoDoc  = "F";
                    codigoTipoDoc = "01";
                    break;
                }
                // Una vez validado el XML seleccionado procedemos con obtener el Certificado.
                var serializar = new Serializador
                {
                    RutaCertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(txtRutaCertificado.Text)),
                    PasswordCertificado    = txtPassCertificado.Text,
                    TipoDocumento          = rbRetenciones.Checked ? 0 : 1
                };

                using (var conexion = new ConexionSunat(txtNroRuc.Text, txtUsuarioSol.Text,
                                                        txtClaveSol.Text, rbRetenciones.Checked ? "ServicioSunatRetenciones" : string.Empty))
                {
                    //var archivoOriginal = Path.GetFileName(txtSource.Text);

                    var byteArray = File.ReadAllBytes(txtSource.Text);

                    Cursor = Cursors.WaitCursor;

                    // Firmamos el XML.
                    var tramaFirmado = serializar.FirmarXml(Convert.ToBase64String(byteArray));
                    // Le damos un nuevo nombre al archivo
                    var nombreArchivo = $"{txtNroRuc.Text}-{codigoTipoDoc}-{letraTipoDoc}001-001";
                    // Ahora lo empaquetamos en un ZIP.
                    var tramaZip = serializar.GenerarZip(tramaFirmado, nombreArchivo);

                    var resultado = conexion.EnviarDocumento(tramaZip, $"{nombreArchivo}.zip");

                    if (resultado.Item2)
                    {
                        var returnByte = Convert.FromBase64String(resultado.Item1);

                        var rutaArchivo = $"{Directory.GetCurrentDirectory()}R.{nombreArchivo}.zip";
                        var fs          = new FileStream(rutaArchivo, FileMode.Create);
                        fs.Write(returnByte, 0, returnByte.Length);
                        fs.Close();

                        txtResult.Text = "Proceso enviado a SUNAT correctamente!";

                        Process.Start(rutaArchivo);
                    }
                    else
                    {
                        txtResult.Text = resultado.Item1;
                    }
                }
            }
            catch (System.ServiceModel.FaultException exSer)
            {
                txtResult.Text = exSer.ToString();
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
        private void btnGetStatus_Click(object sender, EventArgs e)
        {
            try
            {
                using (var frm = new FrmTicket())
                {
                    if (frm.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }
                    if (string.IsNullOrEmpty(frm.txtNroTicket.Text))
                    {
                        return;
                    }


                    using (var conexion = new ConexionSunat(txtNroRuc.Text, txtUsuarioSol.Text,
                                                            txtClaveSol.Text, rbRetenciones.Checked ? "ServicioSunatRetenciones" : string.Empty))
                    {
                        var resultado = conexion.ObtenerEstado(frm.txtNroTicket.Text);

                        if (resultado.Item2)
                        {
                            var returnByte = Convert.FromBase64String(resultado.Item1);

                            var rutaArchivo = string.Format("{0}\\R-{1}.zip", Directory.GetCurrentDirectory(),
                                                            frm.txtNroTicket.Text);
                            var fs = new FileStream(rutaArchivo, FileMode.Create, FileAccess.Write);
                            fs.Write(returnByte, 0, returnByte.Length);
                            fs.Close();

                            var sb = new StringBuilder();

                            // Añadimos la respuesta del Servicio.
                            sb.AppendLine(Resources.procesoCorrecto);

                            // Extraemos el XML contenido en el archivo de respuesta como un XML.
                            var rutaArchivoXmlRespuesta = rutaArchivo.Replace(".zip", ".xml");
                            // Procedemos a desempaquetar el archivo y leer el contenido de la respuesta SUNAT.
                            using (var streamZip = ZipFile.Read(File.Open(rutaArchivo,
                                                                          FileMode.Open,
                                                                          FileAccess.ReadWrite, FileShare.ReadWrite)))
                            {
                                // Nos aseguramos de que el ZIP contiene al menos un elemento.
                                if (streamZip.Entries.Any())
                                {
                                    if (rbRetenciones.Checked)
                                    {
                                        streamZip.Entries.Last()
                                        .Extract(".", ExtractExistingFileAction.OverwriteSilently);
                                    }
                                    else
                                    {
                                        streamZip.Entries.First()
                                        .Extract(".", ExtractExistingFileAction.OverwriteSilently);
                                    }
                                }
                            }
                            // Como ya lo tenemos extraido, leemos el contenido de dicho archivo.
                            var xDoc = XDocument.Parse(File.ReadAllText(rutaArchivoXmlRespuesta));

                            var respuesta = xDoc.Descendants(XName.Get("DocumentResponse", EspacioNombres.cac))
                                            .Descendants(XName.Get("Response", EspacioNombres.cac))
                                            .Descendants().ToList();

                            if (respuesta.Any())
                            {
                                // La respuesta se compone de 3 valores
                                // cbc:ReferenceID
                                // cbc:ResponseCode
                                // cbc:Description
                                // Obtendremos unicamente la Descripción (la última).
                                sb.AppendLine(string.Format("Respuesta de SUNAT a las {0}", DateTime.Now));
                                sb.AppendLine(((XText)respuesta.Nodes().Last()).Value);
                            }

                            txtResult.Text = sb.ToString();
                            sb.Length      = 0; // Limpiamos memoria del StringBuilder.
                        }
                        else
                        {
                            txtResult.Text = resultado.Item1;
                        }
                    }

                    Hablar();
                }
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
        }