public async Task <EnviarResumenResponse> Generar(string organization, ComunicacionBaja model) { EmpresaModel empresa = await _repositoryempresa.Get(organization); model.IdDocumento = string.Format("RA-{0:yyyyMMdd}-001", DateTime.Today); model.FechaEmision = DateTime.Today.ToString(FormatoFecha); model.FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha); model.Emisor = HelperTo.ToEmisor(empresa); IEstructuraXml summary = _documentoXml.Generar(model); string XmlSinFirma = await _serializador.GenerarXml(summary); CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization); FirmadoRequest firmado = HelperTo.ToSignedModel(certificado, XmlSinFirma, true); FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado); ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa); EnviarDocumentoRequest request = HelperTo.ToSendVoidedDocument(model, parametro, responseFirma); File.WriteAllBytes("voided.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); EnviarResumenResponse response = new EnviarResumenResponse(); var nombreArchivo = $"{request.Ruc}-{request.IdDocumento}"; var tramaZip = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo); _servicioSunatDocumentos.Inicializar(new ParametrosConexion { Ruc = request.Ruc, UserName = request.UsuarioSol, Password = request.ClaveSol, EndPointUrl = request.EndPointUrl }); RespuestaAsincrono resultado = _servicioSunatDocumentos.EnviarResumen(new DocumentoSunat { NombreArchivo = $"{nombreArchivo}.zip", TramaXml = tramaZip }); if (resultado.Exito) { response.NroTicket = resultado.NumeroTicket; response.Exito = true; response.NombreArchivo = nombreArchivo; } else { response.MensajeError = resultado.MensajeError; response.Exito = false; } //guardar la respuesta return(response); }
public async Task <EnviarDocumentoResponse> Generar(string organization, DocumentoElectronico model) { EmpresaModel empresa = await _repositoryempresa.Get(organization); model.Emisor = HelperTo.ToEmisor(empresa); IEstructuraXml invoice = _documentoXml.Generar(model); string XmlSinFirma = await _serializador.GenerarXml(invoice); CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization); FirmadoRequest firmado = HelperTo.ToSignedModel(certificado, XmlSinFirma, false); FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado); ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa); EnviarDocumentoRequest request = HelperTo.ToSendDocument(model, parametro, responseFirma); File.WriteAllBytes("invoice.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); EnviarDocumentoResponse response = new EnviarDocumentoResponse(); var nombreArchivo = $"{request.Ruc}-{request.TipoDocumento}-{request.IdDocumento}"; var tramaZip = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo); _servicioSunatDocumentos.Inicializar(new ParametrosConexion { Ruc = request.Ruc, UserName = request.UsuarioSol, Password = request.ClaveSol, EndPointUrl = request.EndPointUrl }); RespuestaSincrono resultado = _servicioSunatDocumentos.EnviarDocumento(new DocumentoSunat { TramaXml = tramaZip, NombreArchivo = $"{nombreArchivo}.zip" }); if (!resultado.Exito) { response.Exito = false; response.MensajeError = resultado.MensajeError; } else { response = await _serializador.GenerarDocumentoRespuesta(resultado.ConstanciaDeRecepcion); File.WriteAllBytes("cdr_invoice.zip", Convert.FromBase64String(response.TramaZipCdr)); // Quitamos la R y la extensión devueltas por el Servicio. response.NombreArchivo = nombreArchivo; } //guardar la respuesta return(response); }
/// <summary> /// Genera el XML basado en una clase con el atributo Serializable /// </summary> /// <typeparam name="T">Clase a serializar</typeparam> /// <param name="objectToSerialize">Instancia de la Clase</param> /// <returns>Devuelve una cadena Base64 del archivo XML</returns> string ISerializador.GenerarXml(IEstructuraXml objectToSerialize, bool sincrono) // objectToSerialize => Instancia de la Clase { var serializer = new XmlSerializer(objectToSerialize.GetType()); // XmlSerializer propio de la librería string resultado; using (var memStr = new MemoryStream()) { using (var stream = new StreamWriter(memStr)) { serializer.Serialize(stream, objectToSerialize); // Serialize propio de la librería } resultado = Convert.ToBase64String(memStr.ToArray()); // Convierte el string a Base64 } return(resultado); // Devuelve un StreamWriter en Base64 }