//---------------------------------- public ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital GeneraTimbreFiscalDigitalRetencionesCadenas(string strRfc, string noCertificado, string selloCfd, XElement entrada, Guid uuid) { ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital result; try { ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital timbreFiscalDigital = new ServicioLocal.Business.TimbreRetenciones.TimbreFiscalDigital { FechaTimbrado = Convert.ToDateTime(DateTime.Now.ToString("s")), noCertificadoSAT = noCertificado, selloCFD = selloCfd, selloSAT = "@", UUID = uuid.ToString().ToUpper(), version = "1.0" }; string timbreXml = this._serializadorTimbres.GetTimbreRenecionesXml(timbreFiscalDigital); lock (GeneradorTimbreFiscalDigital.GeneradorCadenas) { //timbreFiscalDigital.cadenaOriginal = GeneradorTimbreFiscalDigital.GeneradorCadenas.CadenaOriginal(timbreXml); timbreFiscalDigital.cadenaOriginal = GeneradorTimbreFiscalDigital.GeneradorCadenasRetencion.CadenaOriginal(timbreXml); } lock (this._sellador) { if (ConfigurationManager.AppSettings["FirmaLocal"] == "true") { string certPac = ConfigurationManager.AppSettings["CertPac"]; if (this.objCert == null) { this.objCert = OpensslKey.DecodePrivateKey(File.ReadAllBytes(certPac), ConfigurationManager.AppSettings["PassPac"], ".key"); } timbreFiscalDigital.selloSAT = this._sellador.GeneraSelloDigitalRetencion(timbreFiscalDigital.cadenaOriginal, this.objCert); } else { timbreFiscalDigital.selloSAT = this._sellador.GeneraSelloDigitalTimbreRetencion(timbreFiscalDigital.cadenaOriginal); } if (timbreFiscalDigital.selloSAT == null || timbreFiscalDigital.selloSAT == "Error") { result = null; return(result); } } result = timbreFiscalDigital; } catch (Exception ee) { NtLinkBusiness.Logger.Error(ee); result = null; } return(result); }
public int CancelarRet(string uuid, string rfc, ref string respuesta, ref string acuse) { int result; try { Cancelador.Logger.Info("Cancelando comprobante: " + uuid); CanceladorRetenciones can = new CanceladorRetenciones(); IList uuidsCancelar = new List <string>(); uuidsCancelar.Add(uuid.ToUpper()); using (new NtLinkLocalServiceEntities()) { NtLinkEmpresa nle = new NtLinkEmpresa(); empresa empresa = nle.GetByRfc(rfc); if (empresa == null) { respuesta = "300 - El usuario con el que se quiere conectar es inválido"; acuse = ""; result = 300; } else { NtLinkTimbrado tim = new NtLinkTimbrado(); TimbreWs33 timbre = tim.ObtenerTimbre(uuid); if (timbre == null) { TimbreWsHistorico timbreHist = tim.ObtenerTimbreHist(uuid); if (timbreHist == null) { string path = Path.Combine(ConfigurationManager.AppSettings["Resources"], rfc); string pathCer = Path.Combine(path, "Certs", "csd.cer"); string pathKey = Path.Combine(path, "Certs", "csd.key"); string pass = empresa.PassKey; if (File.Exists(pathKey + ".pem")) { pathKey += ".pem"; } string ext = Path.GetExtension(pathKey); RSACryptoServiceProvider key2 = OpensslKey.DecodePrivateKey(File.ReadAllBytes(pathKey), pass, ext); string ac2 = can.CancelaCfdi(uuid, key2, rfc, pathCer); if (string.IsNullOrEmpty(ac2)) { acuse = "No se pudo conectar al servicio de cancelación del SAT"; respuesta = "1205 - No se pudo conectar al servicio de cancelación del SAT"; result = 1205; return(result); } acuse = ac2; AcuseCancelacion acuseCan2 = AcuseCancelacion.Parse(ac2); if (acuseCan2.Status == null) { Cancelador.Logger.Error(acuse); respuesta = "1300 - XML mal formado"; result = 1300; return(result); } if (acuseCan2.Status != "1201" && acuseCan2.Status != "1202") { Cancelador.Logger.Error(acuse); respuesta = acuseCan2.Status; throw new FaultException(respuesta); } Cancelador.Logger.Info(acuse); string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], rfc, acuseCan2.FechaCancelacion); if (!Directory.Exists(directorio)) { Directory.CreateDirectory(directorio); } string fileName = Path.Combine(directorio, "Cancelacion_" + uuid.ToString() + ".xml"); File.WriteAllText(fileName, acuse, Encoding.UTF8); respuesta = acuseCan2.Status + " - " + Constantes.ErroresValidacion[int.Parse(acuseCan2.Status)]; result = Convert.ToInt32(acuseCan2.Status); return(result); } else { timbre = new TimbreWs33(); timbre.RfcEmisor = timbreHist.RfcEmisor; timbre.RfcReceptor = timbreHist.RfcReceptor; timbre.AcuseCancelacion = timbreHist.AcuseCancelacion; timbre.IdTimbre = timbreHist.IdTimbre; timbre.Uuid = timbreHist.Uuid; timbre.StrError = "Hist"; } } if (timbre.RfcEmisor != rfc) { respuesta = "203 - UUID No corresponde el RFC del emisor y de quien solicita la cancelación."; acuse = ""; result = 203; } else if (timbre.AcuseCancelacion != null) { respuesta = "202 - UUID Previamente cancelado"; acuse = timbre.AcuseCancelacion; result = 202; } else { string path = Path.Combine(ConfigurationManager.AppSettings["Resources"], rfc); string pathCer = Path.Combine(path, "Certs", "csd.cer"); string pathKey = Path.Combine(path, "Certs", "csd.key"); string pass = empresa.PassKey; if (File.Exists(pathKey + ".pem")) { pathKey += ".pem"; } string ext = Path.GetExtension(pathKey); RSACryptoServiceProvider key3 = OpensslKey.DecodePrivateKey(File.ReadAllBytes(pathKey), pass, ext); string ac3 = can.CancelaCfdi(uuid, key3, rfc, pathCer); if (string.IsNullOrEmpty(ac3)) { acuse = "No se pudo conectar al servicio de cancelación del SAT"; respuesta = "1205 - No se pudo conectar al servicio de cancelación del SAT"; result = 1205; } else { acuse = ac3; AcuseCancelacion acuseCan3 = AcuseCancelacion.Parse(ac3); if (acuseCan3.Status == null) { Cancelador.Logger.Error(acuse); respuesta = "1300 - XML mal formado"; result = 1300; } else { if (acuseCan3.Status != "1201" && acuseCan3.Status != "1202") { Cancelador.Logger.Error(acuse); respuesta = acuseCan3.Status; throw new FaultException(respuesta); } Cancelador.Logger.Info(acuse); timbre.Status = new int?(2); string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], timbre.RfcEmisor, timbre.FechaFactura.ToString("yyyyMMdd")); if (!Directory.Exists(directorio)) { Directory.CreateDirectory(directorio); } string fileName = Path.Combine(directorio, "Cancelacion_" + timbre.Uuid.ToString() + ".xml"); File.WriteAllText(fileName, acuse, Encoding.UTF8); tim.GuardarTimbre(timbre); respuesta = acuseCan3.Status + " - " + Constantes.ErroresValidacion[int.Parse(acuseCan3.Status)]; result = Convert.ToInt32(acuseCan3.Status); } } } } } } catch (Exception ex) { Cancelador.Logger.Error("(cancelar) Error: " + ex.Message + ((ex.InnerException == null) ? "" : ("\nExcepción Interna:" + ex.InnerException.Message))); throw; } return(result); }
public string CancelarBloqueCfdi(string directorioLog, string directorioAcuse, Encabezado encLMetadata, string strPPrivada, string pass, string strCertificado, ref SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse cAcuse) { string result; try { AccesoServicios.Logger.Info("Privada: " + strPPrivada); AccesoServicios.Logger.Info("Certificado: " + strCertificado); AccesoServicios.Logger.Info("rfc:" + encLMetadata.RfcEmisor); AccesoServicios.Logger.Info("fecha:" + encLMetadata.Fecha); AccesoServicios.Logger.Info("uuid:" + encLMetadata.LisMListaFolios[0].ToString()); string strPXmlFirmado = ""; if (File.Exists(strPPrivada + ".pem")) { strPPrivada += ".pem"; } string ext = Path.GetExtension(strPPrivada); AccesoServicios.SignXmlFile(this.ArmarXmlPreFirma(encLMetadata), ref strPXmlFirmado, OpensslKey.DecodePrivateKey(File.ReadAllBytes(strPPrivada), pass, ext)); AccesoServicios.Logger.Info(strPXmlFirmado); SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignatureType a = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignatureType(); SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.ReferenceType reference = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.ReferenceType { URI = "" }; XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); a.SignedInfo = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignedInfoType { Reference = reference }; string hex = strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<DigestValue>") + 13, strPXmlFirmado.IndexOf("</DigestValue>") - strPXmlFirmado.IndexOf("<DigestValue>") - 13); a.SignedInfo.Reference.DigestValue = Convert.FromBase64String(hex); a.SignedInfo.Reference.DigestMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.DigestMethodType { Algorithm = "http://www.w3.org/2000/09/xmldsig#sha1" }; a.SignedInfo.Reference.Transforms = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.TransformType[] { new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.TransformType() }; a.SignedInfo.Reference.Transforms[0].Algorithm = "http://www.w3.org/2000/09/xmldsig#enveloped-signature"; a.SignedInfo.CanonicalizationMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.CanonicalizationMethodType { Algorithm = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315" }; a.SignedInfo.SignatureMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.SignatureMethodType { Algorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1" }; a.SignatureValue = Convert.FromBase64String(strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<SignatureValue>") + 16, strPXmlFirmado.IndexOf("</SignatureValue>") - strPXmlFirmado.IndexOf("<SignatureValue>") - 16)); X509Certificate2 x509 = new X509Certificate2(strCertificado); a.KeyInfo = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.KeyInfoType(); a.KeyInfo.X509Data = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.X509DataType(); a.KeyInfo.X509Data.X509IssuerSerial = new SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.X509IssuerSerialType(); a.KeyInfo.X509Data.X509IssuerSerial.X509IssuerName = x509.IssuerName.Name.ToString(); a.KeyInfo.X509Data.X509IssuerSerial.X509SerialNumber = x509.SerialNumber; a.KeyInfo.X509Data.X509Certificate = File.ReadAllBytes(strCertificado); Console.WriteLine("Enviando Cancelación..."); string a2 = a.ToString(); Cancelacion mensajeCancelacion = new Cancelacion { RfcEmisor = encLMetadata.RfcEmisor, Fecha = Convert.ToDateTime(encLMetadata.Fecha), Signature = a }; mensajeCancelacion.Folios = new CancelacionFolios[encLMetadata.LisMListaFolios.Count]; for (int i = 0; i < encLMetadata.LisMListaFolios.Count; i++) { mensajeCancelacion.Folios[i] = new CancelacionFolios { UUID = encLMetadata.LisMListaFolios[i].ToString() }; } if (mensajeCancelacion.Folios.Count <CancelacionFolios>() > 0) { Console.WriteLine("Autenticando..."); HttpRequestMessageProperty tokenAutenticacion = this.AutenticaServicio(); using (new OperationContextScope(this.ClienteCancelacion.InnerChannel)) { OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = tokenAutenticacion; Console.WriteLine("Cancelando..."); SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse acuseCancelacion = this.ClienteCancelacion.CancelaCFD(mensajeCancelacion); MemoryStream acuseStream = new MemoryStream(); XmlSerializer xmlSerializer = new XmlSerializer(typeof(SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse)); xmlSerializer.Serialize(acuseStream, acuseCancelacion); acuseStream.Seek(0L, SeekOrigin.Begin); StreamReader acuseReader = new StreamReader(acuseStream); AccesoServicios.Log.Info("Terminando el proceso..."); cAcuse = acuseCancelacion; result = acuseReader.ReadToEnd(); return(result); } } result = string.Empty; return(result); } catch (Exception exception) { AccesoServicios.Log.Error("(CancelarBloqueCfdi) Error al cancelar los CFDI's " + exception.ToString()); } result = ""; return(result); }
//--------------------------------- public TimbreFiscalDigital GeneraTimbreFiscalDigitalCadenas(string strRfc, string noCertificado, string selloCfd, XElement entrada, Guid uuid, string RfcProvCertif, string Leyenda) { try { var timbreFiscalDigital = new TimbreFiscalDigital(); if (!string.IsNullOrEmpty(Leyenda)) { timbreFiscalDigital = new TimbreFiscalDigital { FechaTimbrado = Convert.ToDateTime(DateTime.Now.ToString("s")), NoCertificadoSAT = noCertificado, SelloCFD = selloCfd, SelloSAT = "@", UUID = uuid.ToString().ToUpper(), Version = "1.1", RfcProvCertif = RfcProvCertif, Leyenda = Leyenda }; } else { timbreFiscalDigital = new TimbreFiscalDigital { FechaTimbrado = Convert.ToDateTime(DateTime.Now.ToString("s")), NoCertificadoSAT = noCertificado, SelloCFD = selloCfd, SelloSAT = "@", UUID = uuid.ToString().ToUpper(), Version = "1.1", RfcProvCertif = RfcProvCertif }; } string timbreXml = _serializadorTimbres.GetTimbreXml(timbreFiscalDigital); lock (GeneradorCadenas) { timbreFiscalDigital.cadenaOriginal = GeneradorCadenas.CadenaOriginal(timbreXml); } lock (_sellador) { if (ConfigurationManager.AppSettings["FirmaLocal"] == "true") { string certPac = ConfigurationManager.AppSettings["CertPac"]; if (objCert == null) { objCert = OpensslKey.DecodePrivateKey(File.ReadAllBytes(certPac), ConfigurationManager.AppSettings["PassPac"], ".key"); } timbreFiscalDigital.SelloSAT = this._sellador.GeneraSelloDigital(timbreFiscalDigital.cadenaOriginal, objCert); //timbreFiscalDigital.selloSAT = "Inválido, ambiente de pruebas"; } else { timbreFiscalDigital.SelloSAT = this._sellador.GeneraSelloDigitalTimbre(timbreFiscalDigital.cadenaOriginal); } if (timbreFiscalDigital.SelloSAT == null || timbreFiscalDigital.SelloSAT == "Error") { return(null); } } return(timbreFiscalDigital); } catch (Exception ee) { Logger.Error(ee); return(null); } }
public SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType Asignature(string strPPrivada, Encabezado encLMetadata, string pass, string strCertificado) { SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType result; try { string strPXmlFirmado = ""; SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType Asig = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType(); Asig.Id = "Signature"; Asig.SignedInfo = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignedInfoType(); Asig.SignedInfo.Id = "Signature-SignedInfo"; Asig.SignedInfo.CanonicalizationMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.CanonicalizationMethodType(); Asig.SignedInfo.CanonicalizationMethod.Algorithm = "http://www.w3.org/TR/2001/REC-xml-c14n20010315"; Asig.SignedInfo.SignatureMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureMethodType(); Asig.SignedInfo.SignatureMethod.Algorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"; Asig.SignedInfo.Reference = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.ReferenceType(); Asig.SignedInfo.Reference.URI = "#Certificate1"; List <SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.TransformType> T = new List <SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.TransformType>(); T.Add(new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.TransformType { Algorithm = "http://www.w3.org/2000/09/xmldsig#envelopedsignature" }); Asig.SignedInfo.Reference.Transforms = T.ToArray(); Asig.SignedInfo.Reference.DigestMethod = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.DigestMethodType(); Asig.SignedInfo.Reference.DigestMethod.Algorithm = "http://www.w3.org/2000/09/xmldsig#sha1"; if (File.Exists(strPPrivada + ".pem")) { strPPrivada += ".pem"; } string ext = Path.GetExtension(strPPrivada); AccesoServicios.SignXmlFile(this.ArmarXmlPreFirma(encLMetadata), ref strPXmlFirmado, OpensslKey.DecodePrivateKey(File.ReadAllBytes(strPPrivada), pass, ext)); string hex = strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<DigestValue>") + 13, strPXmlFirmado.IndexOf("</DigestValue>") - strPXmlFirmado.IndexOf("<DigestValue>") - 13); Asig.SignedInfo.Reference.DigestValue = Convert.FromBase64String(hex); Asig.SignatureValue = Convert.FromBase64String(strPXmlFirmado.Substring(strPXmlFirmado.IndexOf("<SignatureValue>") + 16, strPXmlFirmado.IndexOf("</SignatureValue>") - strPXmlFirmado.IndexOf("<SignatureValue>") - 16)); X509Certificate2 x509 = new X509Certificate2(strCertificado); Asig.KeyInfo = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.KeyInfoType(); Asig.KeyInfo.X509Data = new SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.X509DataType(); Asig.KeyInfo.X509Data.X509Certificate = File.ReadAllBytes(strCertificado); Asig.KeyInfo.Id = "Certificate1"; result = Asig; } catch (Exception exception) { AccesoServicios.Log.Error("(Asignature) Error al generar la firma de los CFDI's " + exception.ToString()); result = null; } return(result); }