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; } }
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; } }
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] EnviarDocumentoRequest request) { var response = new EnviarDocumentoResponse(); var serializador = new Serializador(); var nombreArchivo = $"{request.Ruc}-{request.TipoDocumento}-{request.IdDocumento}"; 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.EnviarDocumento(tramaZip, $"{nombreArchivo}.zip"); 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; response.NombreArchivo = nombreArchivo; } catch (Exception ex) { response.MensajeError = ex.Message; response.Pila = ex.StackTrace; response.Exito = false; } } } } } } else { response.Exito = true; response.MensajeRespuesta = resultado.Item1; } return(response); }
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; } }