public IHttpActionResult GetCadenaOriginal([FromBody] RequestCadenaOriginal request) { string CadenaOriginal = String.Empty; try { byte[] bytesCertificado = Convert.FromBase64String(request.cert); byte[] bytesLlave = Convert.FromBase64String(request.key); FirmaDigital Firma = new FirmaDigital(bytesCertificado, bytesLlave, request.password); CadenaOriginal = String.Format("{0}|{1}|{2}|{3}", Firma.GetDatosNombre(), Firma.GetDatosRfc(), Firma.GetDatosSerie(), Firma.GetDatosAutoridad()); } catch (Exception ex) { return(BadRequest(ex.Message)); } return(Ok(CadenaOriginal)); }
/// <summary> /// Metodo para crear un pdf para los documentos fiscales /// </summary> /// <returns></returns> #region Proceso_WebService //public bool CrearPDF(string tabla, DatosPDF datosPDF, List<ResguardoPdf> resguardoPdf, string TablaCabezal) #endregion Proceso_WebService public bool CrearPDF(string tabla, DatosPDF datosPDF, List <ResguardoPdf> resguardoPdf, string TablaCabezal, string origenFE = null) { bool resultado = false; int opcFactura = 0; //Nombre del archivo sin extension y ruta nombreCompuesto = infoComprobante.TipoCFEInt + infoComprobante.SerieComprobante + infoComprobante.NumeroComprobante; if (FrmEstadoContingencia.estadoContingencia.Equals("Y")) { //Nombre de Archivos con ruta para proceso de firma electronica archivoSinFirmar = RutasCarpetas.RutaCarpetaContingenciaComprobantes + nombreCompuesto + "sf.pdf"; archivoFirmado = RutasCarpetas.RutaCarpetaContingenciaComprobantes + nombreCompuesto + ".pdf"; } else { //Nombre de Archivos con ruta para proceso de firma electronica archivoSinFirmar = RutasCarpetas.RutaCarpetaComprobantes + nombreCompuesto + "sf.pdf"; archivoFirmado = RutasCarpetas.RutaCarpetaComprobantes + nombreCompuesto + ".pdf"; } ManteUdoLogo mante = new ManteUdoLogo(); rutaLogo = mante.Consultar(true); bool estadoAdenda = false; try { //Muestra cursor de espera Cursor.Current = Cursors.WaitCursor; Document comprobante = new Document(PageSize.A4, 10, 10, 100, 160); //centenario // Document comprobante = new Document(PageSize.A4, 10, 10, 230, 110); //saint //Se crea el archivo que va contener el Pdf StreamWriter fac = File.CreateText(archivoSinFirmar); fac.Close(); FileStream docCreado = new FileStream(archivoSinFirmar, FileMode.Open , FileAccess.Write); //Se crea una instancia para escribir el contenido del pdf en el archivo fisico PdfWriter writer = PdfWriter.GetInstance(comprobante, docCreado); #region Encabezado y Pie de Pagina string domicilioFiscalEmisor = ObtenerDomicilioFiscalEmisor(); //Se envia la informacion contenida en el encabezado de las paginas writer.PageEvent = new ZonasCFE.EventosPagina(infoComprobante, infoCAE, domicilioFiscalEmisor, rutaLogo, datosPDF.DocNum); //, datosPDF);//saint #endregion Encabezado y Pie de Pagina //Se abre el documento pdf a crear comprobante.Open(); ZonasCFE.CuerpoComprobante cuerpoComprobante = new ZonasCFE.CuerpoComprobante(); bool ticket = ComprobarTicket(infoComprobante.TipoCFEInt); #region Receptor //Genera la zona de informacion del receptor de la factura comprobante = cuerpoComprobante.Receptor(infoComprobante, comprobante, writer, ticket, datosPDF); #endregion Receptor #region Detalle Producto o Servicio if (infoComprobante.TipoCFEInt != 182 && infoComprobante.TipoCFEInt != 282) { //Verificar el si la factura es para productos o servicios if (infoComprobante.TipoDocumentoSAP.ToString().Equals("Servicio")) { opcFactura = 1; } //Comprueba si hay que agregar la adenda if (Adenda()) { estadoAdenda = true; } ///Genera el detalle de productos para la factura; comprobante = cuerpoComprobante.DetalleMercaderia(comprobante, opcFactura, kilosComprobante, tabla, datosPDF, infoComprobante, TablaCabezal); } else { List <ResguardoPdf> listaResguardo = new List <ResguardoPdf>(); foreach (ResguardoPdf facturaResguardo in resguardoPdf) { facturaResguardo.FechaFactura = infoComprobante.FechaComprobante; if (datosPDF.DescuentoGeneral > 0) { facturaResguardo.MontoImponible = (double.Parse(facturaResguardo.MontoImponible) - datosPDF.DescuentoGeneral).ToString(); } else if (datosPDF.DescuentoExtranjero > 0) { facturaResguardo.MontoImponible = (double.Parse(facturaResguardo.MontoImponible) - datosPDF.DescuentoExtranjero).ToString(); } listaResguardo.Add(facturaResguardo); } comprobante = cuerpoComprobante.DetalleResguardo(comprobante, listaResguardo, infoComprobante.FechaComprobante); } #endregion Detalle Producto o Servicio //Se cierran los documentos utilizados comprobante.Close(); docCreado.Close(); //Firma digitalmente al documento creado FirmaDigital firma = new FirmaDigital(); ManteUdoCertificadoDigital cerDigital = new ManteUdoCertificadoDigital(); //Se obtiene informacion del certificado digital string rutaCertificado = cerDigital.ObtenerRutaCertificado(); string passCertificado = cerDigital.ObtenerPassCertificado(); if (rutaCertificado.Equals("") || passCertificado.Equals("")) { errorCertificado = true; } else { if (firma.infoCertificado(archivoSinFirmar, archivoFirmado, rutaCertificado, passCertificado)) { //Valida que exista la ruta a borrar if (!archivoSinFirmar.Equals("")) { //Borra el archivo pdf sin la firma electronica System.IO.File.Delete(PDFs.archivoSinFirmar); } if (!FrmEstadoContingencia.estadoContingencia.Equals("Y")) { AccionesFueraHilo acciones = new AccionesFueraHilo(); #region Proceso_WebService //acciones.Imprimir(archivoFirmado); if (origenFE == null) { acciones.Imprimir(archivoFirmado); } else { string copiaArchivo = archivoFirmado.Replace(RutasCarpetas.RutaCarpetaComprobantes, RutasCarpetas.RutaCarpetaImpresion); System.IO.File.Copy(archivoFirmado, copiaArchivo, false); Program.colaImpresion.Enqueue(copiaArchivo); } #endregion Proceso_WebService DatosCorreo datosCorreo = new DatosCorreo(); datosCorreo.CorreoReceptor = infoComprobante.CorreoReceptor; datosCorreo.EstadoAdenda = estadoAdenda; datosCorreo.NombreCompuesto = nombreCompuesto; acciones.EjecutarCorreo(datosCorreo); resultado = true; } else { resultado = true; } } else { errorFirma = true; } } } catch (Exception ex) { SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("ERROR: CrearPDF/ " + ex.ToString()); } finally { //Se quita el cursor de espera Cursor.Current = Cursors.AppStarting; } return(resultado); }
/// <summary> /// Metodo que genera el Acuse de Recibo /// </summary> public string GenerarACK(string estado, CertificadoRecibido sobreRecibido, string correoEmisor, List <ErrorValidarSobre> listaErrores, string nombreSobre) { ValidarSobre validaSobre = new ValidarSobre(); //Se crea objeto de tipo Consecutivo Consecutivo consecutivo = new Consecutivo(); XmlTextWriter writer = null; string nombreACK = "", nombreACKF = ""; DateTime fechaActual; try { //Genera el idReceptor para el ACK consecutivo.IdReceptor = validaSobre.generarIdReceptor(); //Genera el TokenBinario para el ACK consecutivo.Token = validaSobre.generarTokenBinario(consecutivo.IdReceptor); ManteUdoConsecutivo manteConsecutivo = new ManteUdoConsecutivo(); //Inserta en la tabla TFECONS el nuevo registro de consecutivo manteConsecutivo.Almacenar(consecutivo); //Obtiene la fecha actual fechaActual = DateTime.Now; //Formatea fecha de modo: YYYYMMDD string fechaFormateada = String.Format("{0:yyyyMMdd}", fechaActual); //Nombre del ACK segun formato de DGI nombreACK = "M_" + consecutivo.IdReceptor + "_Sob_" + sobreRecibido.RucEmisor + "_" + fechaFormateada + "_" + sobreRecibido.IdEmisor + "sf" + ".xml"; //Nombre del ACK firmado digitalmente nombreACKF = "M_" + consecutivo.IdReceptor + "_Sob_" + sobreRecibido.RucEmisor + "_" + fechaFormateada + "_" + sobreRecibido.IdEmisor + ".xml"; writer = new XmlTextWriter(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK, Encoding.UTF8); writer.Formatting = Formatting.Indented; //Empieza el documento ACKSOBRE writer.WriteStartDocument(); //Agrega el primer elemento y el namespace writer.WriteStartElement("ACKSobre"); writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); writer.WriteAttributeString("version", "1.0"); writer.WriteAttributeString("xmlns", "http://cfe.dgi.gub.uy"); //Empieza el Tag de Caratula writer.WriteStartElement("Caratula"); writer.WriteElementString("RUCReceptor", sobreRecibido.RucReceptor); writer.WriteElementString("RUCEmisor", sobreRecibido.RucEmisor); writer.WriteElementString("IDRespuesta", consecutivo.IdReceptor); writer.WriteElementString("NomArch", nombreSobre.ToLower()); writer.WriteElementString("FecHRecibido", sobreRecibido.FechaSobre); writer.WriteElementString("IDEmisor", sobreRecibido.IdEmisor); writer.WriteElementString("IDReceptor", consecutivo.IdReceptor); writer.WriteElementString("CantidadCFE", sobreRecibido.CantCFE); writer.WriteElementString("Tmst", sobreRecibido.FechaEmision); //Termina el Tag de Caratula writer.WriteEndElement(); //Empieza el Tag de Detalle writer.WriteStartElement("Detalle"); writer.WriteElementString("Estado", estado); //Caso sobre rechazado if (estado.Equals("BS")) { //Empieza el Tag de MotivosRechazo writer.WriteStartElement("MotivosRechazo"); foreach (ErrorValidarSobre error in listaErrores) { writer.WriteElementString("Motivo", error.CodigoRechazo); writer.WriteElementString("Glosa", error.GlosaRechazo); } //Termina el Tag de MotivosRechazo writer.WriteEndElement(); } //Caso sobre Aceptado else if (estado.Equals("AS")) { //Empieza el Tag de ParamConsulta writer.WriteStartElement("ParamConsulta"); writer.WriteElementString("Token", consecutivo.Token); fechaFormateada = String.Format("{0:yyyy-MM-dd H:mm:ss}", fechaActual); writer.WriteElementString("Fechahora", fechaFormateada); //Termina el Tag de ParamConsulta writer.WriteEndElement(); } //Termina el Tag de Detalle writer.WriteEndElement(); //Termina el Tag de ACKSobre writer.WriteEndElement(); //Termina el documento SOBREACK writer.WriteEndDocument(); //Envia el contenido al documento writer.Flush(); //Cierra el documento writer.Close(); FirmaDigital firma = new FirmaDigital(); //Procede a intentar firmar el xml del ACK if (firma.FirmarACK(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK, RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACKF)) { if (!nombreACK.Equals("")) { //Borra el ACK generado System.IO.File.Delete(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK); //Instancia para obtener datos de cuenta de correo electronico ManteUdoCorreos mante = new ManteUdoCorreos(); Correo correo = mante.Consultar(); string[] adjuntos = new string[1]; adjuntos[0] = RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACKF; if (correo != null) { ///Envia correo con una cuenta de gmail Mail mail = new Mail(correoEmisor, correo.Cuenta, Mensaje.cACKAsunto, Mensaje.cACKMensaje, Mensaje.pdfServidorGmail, correo.Cuenta, correo.Clave, adjuntos, 587); mail.enviarCorreoGmail(); } } } else { //Borra el ACK firmado System.IO.File.Delete(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK); } } catch (Exception) { if (!nombreACK.Equals("")) { //Borra el ACK generado System.IO.File.Delete(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK); } //SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("RespuestaSobre/Error: " + ex.ToString()); } finally { //Cierre de documento writer.Close(); } return(consecutivo.IdReceptor); }
/// <summary> /// Consume el web service /// </summary> /// <param name="parametros"></param> /// <returns></returns> public string Consumir(object parametros, out ControlSobres controlSobres, Boolean SuperUser) { string respuesta = ""; WebServiceDGIMasivo webServiceDgi = new WebServiceDGIMasivo(parametros); ParametrosJobWsDGIMasivo parametrosJobWsDGIMasivo = parametros as ParametrosJobWsDGIMasivo; XmlDocument xmlDocumento = new XmlDocument(); ManteUdoControlSobres manteUdoControlSobres = new ManteUdoControlSobres(); controlSobres = new ControlSobres(); try { if (SuperUser) { FTP ftp = new FTP(); if (ftp.descargarArchivos(parametrosJobWsDGIMasivo.NombreSobre + ".xml", RutasCarpetas.RutaCarpetaSobresDgi, 0)) { } else if (ftp.descargarArchivos(parametrosJobWsDGIMasivo.NombreSobre + ".xml", RutasCarpetas.RutaCarpetaContingenciaSobresDgi, 5)) { } } if (File.Exists((RutasCarpetas.RutaCarpetaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"))) { xmlDocumento.Load(RutasCarpetas.RutaCarpetaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"); } else if (File.Exists((RutasCarpetas.RutaCarpetaContingenciaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"))) { xmlDocumento.Load(RutasCarpetas.RutaCarpetaContingenciaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"); } controlSobres.Tipo = parametrosJobWsDGIMasivo.Tipo + ""; controlSobres.Serie = parametrosJobWsDGIMasivo.Serie; controlSobres.Numero = parametrosJobWsDGIMasivo.Numero + ""; controlSobres.Estado = "Enviado"; controlSobres.UsuarioSap = ProcConexion.Comp.UserName; controlSobres = manteUdoControlSobres.ObtenerDocEntry(controlSobres); manteUdoControlSobres.Actualizar(controlSobres); manteUdoControlSobres.ActualizarFirmaElectronica(controlSobres); // RE firmo el documento con la fecha del Envio FirmaDigital firma = new FirmaDigital(); xmlDocumento = firma.refirmarDocumentos(xmlDocumento); // Envio el documento re firmado. respuesta = webServiceDgi.WSDGI.SendWSDGI(xmlDocumento.InnerXml, clsWSDGI.WsMethod.Envelope); if (!respuesta.Equals("")) { respuesta = respuesta.Replace("<IDEmisor>0</IDEmisor>", "<IDEmisor>" + xmlDocumento.GetElementsByTagName("DGICFE:Idemisor").Item(0).InnerText + "</IDEmisor>"); //manteUdoControlSobres.Eliminar(controlSobres); } } catch (Exception) { if (controlSobres.Tipo != "" && controlSobres.Numero != "0" && controlSobres.Serie != "") { controlSobres.Estado = "Pendiente"; } else { controlSobres.Estado = "NoAplica"; } manteUdoControlSobres.Actualizar(controlSobres); respuesta = ""; } finally { if (webServiceDgi != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(webServiceDgi); GC.Collect(); } if (parametrosJobWsDGIMasivo != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(parametrosJobWsDGIMasivo); GC.Collect(); } if (xmlDocumento != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(xmlDocumento); GC.Collect(); } if (manteUdoControlSobres != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(manteUdoControlSobres); GC.Collect(); } if (controlSobres != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(controlSobres); GC.Collect(); } } return(respuesta); }