/// <summary> /// Metodo para obtener informacion de la firma digital /// </summary> public void ObtenerFirmaDigital() { ManteUdoCertificadoDigital manteUdoFirma = new ManteUdoCertificadoDigital(); Certificado certificado = manteUdoFirma.Consultar(); RUTA_CERTIFICADO = certificado.RutaCertificado; CLAVE_CERTIFICADO = certificado.Clave; }
/// <summary> /// Metodo para obtener informacion de la firma digital /// </summary> public void ObtenerFirmaDigital() { ManteUdoCertificadoDigital manteUdoFirma = new ManteUdoCertificadoDigital(); Certificado certificado = manteUdoFirma.Consultar(); if (certificado != null) { RUTA_CERTIFICADO = certificado.RutaCertificado; CLAVE_CERTIFICADO = certificado.Clave; } else { app.MessageBox(Mensaje.warNoConfigFirmaDigital); } }
/// <summary> /// Metodo para obtener informacion de la firma digital /// </summary> public bool ObtenerFirmaDigital() { ManteUdoCertificadoDigital manteUdoFirma = new ManteUdoCertificadoDigital(); Certificado certificado = manteUdoFirma.Consultar(); if (certificado != null) { RUTA_CERTIFICADO = certificado.RutaCertificado; CLAVE_CERTIFICADO = certificado.Clave; return(true); } else { return(false); } }
/// <summary> /// Ajustar el formulario /// </summary> protected override void AjustarFormulario(string formUID) { ManteUdoCertificadoDigital mantenimiento = new ManteUdoCertificadoDigital(); try { //Se obtiene datos del certificado, si existen Certificado certificado = mantenimiento.Consultar(); if (certificado != null) { //Se asigna la ruta del certificado ((EditText)SAPbouiCOM.Framework.Application.SBO_Application.Forms.Item("frmCerDig").Items.Item("txtRuta").Specific).Value = certificado.RutaCertificado; } } catch (Exception) { } }
/// <summary> /// Retorna el string del certificado indicado. /// </summary> /// <param name="ubicacionCertificado"></param> /// <returns></returns> public static string ObtenerCadenaCertificado() { string resultado = ""; try { ManteUdoCertificadoDigital mante = new ManteUdoCertificadoDigital(); Certificado certificado = mante.Consultar(); X509Certificate2 objCert = new X509Certificate2(certificado.RutaCertificado, certificado.Clave); resultado = Convert.ToBase64String(objCert.GetRawCertData()); } catch (Exception ex) { resultado = ex.Message; } return(resultado); }
/// <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); }
public XmlDocument refirmarDocumentos(XmlDocument XmlDocument) { string nombre = String.Empty; ManteUdoCertificadoDigital cerDigital = new ManteUdoCertificadoDigital(); //Se obtiene informacion del certificado digital string rutaCertificado = cerDigital.ObtenerRutaCertificado(); string clave = cerDigital.ObtenerPassCertificado(); DateTime fecha = DateTime.Now; string fechaFirma = fecha.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK"); string strRutReceptor, strFecha, strFechaFirma, strInfoCertificado, strFechaEmision, strCodSucursal; XmlDocument documento = new XmlDocument(); strRutReceptor = "DGICFE:RutReceptor"; strFecha = "DGICFE:Fecha"; strInfoCertificado = "DGICFE:X509Certificate"; strFechaFirma = "ns1:TmstFirma"; strFechaEmision = "ns1:FchEmis"; strCodSucursal = "ns1:CdgDGISucur"; nombre = String.Empty; documento = new XmlDocument(); documento.PreserveWhitespace = true; documento = XmlDocument; FirmaDigital firma = new FirmaDigital(); string infoCertificado = ProcTransformacion.ObtenerCadenaCertificado(); XmlNode nodoCertificado = documento.GetElementsByTagName(strInfoCertificado).Item(0); nodoCertificado.InnerXml = infoCertificado; // End Caratula / // Begin CFE / XmlNode nodoFechaFirma = documento.GetElementsByTagName(strFechaFirma).Item(0); nodoFechaFirma.InnerXml = fechaFirma; // End CFE / #region CFE_FIRMA // Elimino el nodo Firma del template XmlNode nodoFirma = documento.GetElementsByTagName("Signature").Item(0); documento.GetElementsByTagName("ns1:CFE").Item(0).RemoveChild(nodoFirma); //Crea nuevo documento con el CFE para firmar XmlDocument docFirma = new XmlDocument(); docFirma.PreserveWhitespace = true; XmlNode cfe = documento.DocumentElement.GetElementsByTagName("ns1:CFE").Item(0); XmlNode nuevo = docFirma.ImportNode(cfe, true); docFirma.AppendChild(nuevo); try { // Create a new CspParameters object to specify // a key container. CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = rutaCertificado; // Create a new RSA signing key and save it in the container. RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams); // Obtengo cadena certificado / byte[] pfxBlob = File.ReadAllBytes(rutaCertificado); // Sign the XML document. firma.SignXml(docFirma, pfxBlob, rsaKey, clave); // Elimino el CFE del template // documento.DocumentElement.RemoveChild(cfe); // Agrego el CFE firmado // XmlNode cfeFirmado = docFirma.GetElementsByTagName("ns1:CFE").Item(0); nuevo = documento.ImportNode(cfeFirmado, true); documento.DocumentElement.AppendChild(nuevo); #endregion CFE_FIRMA } catch (Exception e) { } return(documento); }
/// <summary> /// Firma el ACK generado /// </summary> /// <param name="nombreAlmacenClaves"></param> /// <param name="numeroCertificado"></param> /// <returns></returns> public bool FirmarACK(string nombreACKsf, string nombreACKf) { string rutaCertificado = "", passCertificado = ""; bool resultado = true; try { ManteUdoCertificadoDigital cerDigital = new ManteUdoCertificadoDigital(); //Se obtiene informacion del certificado digital rutaCertificado = cerDigital.ObtenerRutaCertificado(); passCertificado = cerDigital.ObtenerPassCertificado(); //Crea un nuevo objeto CspParameters para especificar el contenedor del certificado CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = rutaCertificado; //Crea un nuevo RSA. RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams); //Crea un nuevo documento xml XmlDocument xmlDocumento = new XmlDocument(); //Carga el xml no firmado. xmlDocumento.PreserveWhitespace = true; xmlDocumento.Load(nombreACKsf); //CENTENARIO BUENO //xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210308350014</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>100</IDRespuesta><NomArch>sob_219999830019_20141211_2.xml</NomArch><FecHRecibido>2014-12-11T09:57:16.4132781-02:00</FecHRecibido><IDEmisor>2</IDEmisor><IDReceptor>100</IDReceptor><CantidadCFE>8</CantidadCFE><Tmst>2014-12-11T09:58:26.4133782-02:00</Tmst></Caratula><Detalle><Estado>AS</Estado><ParamConsulta><Token>8iLdRqMvLC3m/5dxX3sjsFuQ9qs4vkVUVZl6QqDE0/5rgMl/rs8CSUoPSDeG4QhL5S3OP+6fCHJMDIQwIJlXlQ==</Token><Fechahora>2014-12-11T09:59:16.4132781-02:00</Fechahora></ParamConsulta></Detalle></ACKSobre>"); //CENTENARIO MALO // xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210308350014</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>101</IDRespuesta><NomArch>sob_219999830019_20141211_1.xml</NomArch><FecHRecibido>2014-12-11T09:57:43.5371631-02:00</FecHRecibido><IDEmisor>1</IDEmisor><IDReceptor>101</IDReceptor><CantidadCFE>15</CantidadCFE><Tmst>2014-12-11T09:57:43.5371631-02:00</Tmst></Caratula><Detalle><Estado>BS</Estado><MotivosRechazo><Motivo>S05</Motivo><Glosa>No coinciden cantidad CFE de carátula y contenido</Glosa></MotivosRechazo></Detalle></ACKSobre>"); //LUSA BUENO //xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210160990017</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>35</IDRespuesta><NomArch>sob_219999830019_20141218_2.xml</NomArch><FecHRecibido>2014-12-18T15:08:46.4642461-02:00</FecHRecibido><IDEmisor>2</IDEmisor><IDReceptor>35</IDReceptor><CantidadCFE>8</CantidadCFE><Tmst>2014-12-18T15:08:50.4642461-02:00</Tmst></Caratula><Detalle><Estado>AS</Estado><ParamConsulta><Token>hmbh5ghNyOIEQ95B9oJtE9Tjsys=</Token><Fechahora>2014-12-18T15:08:52.4642461-02:00</Fechahora></ParamConsulta></Detalle></ACKSobre>"); //LUSA MALO //xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210160990017</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>34</IDRespuesta><NomArch>sob_219999830019_20141218_1.xml</NomArch><FecHRecibido>2014-12-18T15:08:52.7576766-02:00</FecHRecibido><IDEmisor>1</IDEmisor><IDReceptor>34</IDReceptor><CantidadCFE>5</CantidadCFE><Tmst>2014-12-18T15:08:54.4642461-02:00</Tmst></Caratula><Detalle><Estado>BS</Estado><MotivosRechazo><Motivo>S05</Motivo><Glosa>No coinciden cantidad CFE de carátula y contenido</Glosa></MotivosRechazo></Detalle></ACKSobre>"); byte[] pfxBlob = File.ReadAllBytes(rutaCertificado); //Firma el documento ProcTransformacion.SignXml(xmlDocumento, pfxBlob, passCertificado); //Guarda el certificado firmado xmlDocumento.Save(nombreACKf); //BUENO //xmlDocumento.Save(@"C:\Users\greivinsalas\Desktop\M_35_Sob_219999830019_20141218_2.xml"); //MALO // xmlDocumento.Save(@"C:\Users\greivinsalas\Desktop\M_34_Sob_219999830019_20141218_1.xml"); } catch (Exception) { resultado = false; } return(resultado); }