Ver Mensaje Individual
  #8 (permalink)  
Antiguo 29/01/2014, 21:32
rudolfcruz
 
Fecha de Ingreso: enero-2014
Mensajes: 14
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: como hacer cadena o numero para el atributo sello xml cfdi ??

hola compañeros, Namiwis y wwwmaster gracias por su ayuda, aquí dejo el código donde genero el sello digital, para que alguien mas lo pueda utilizar.

public static string CrearSelloDigitalEmisor(ref string noCertificado, ref string certificado)
{
try
{
string ArchivoCertificado = @"c:\goya780416gm0_1210221537s.cer";
string key = @"c:\goya780416gm0_1210221537s.key";
string lPassword = @"12345678a";
//string ArchivoCertificado = @"c:\SELLOCERTIFICADO00001000000301791174.cer";
//string key = @"c:\CSD_matriz_GAIL810405RU6_20131214_151459.key" ;
//string lPassword = @"aguila12";
string strCadenaOriginal = CadenaOriginal(); //mando a llamar la funcion qu eme genera la cadena original
CertificadoDigital cer = new CertificadoDigital(ArchivoCertificado);// Open Certificado
noCertificado = cer.NumeroCertificado; // Obtengo Datos del CSD .cer
certificado = cer.Certificado;
SecureString identidad = new SecureString();// Se requerira un objeto SecureString que represente el password de la clave privada, que se obtiene asi:
identidad.Clear();
foreach (char c in lPassword.ToCharArray())
{
identidad.AppendChar(c);
}
Byte[] pLlavePrivadaenBytes = System.IO.File.ReadAllBytes(key);// Se lee el archivo .key
RSACryptoServiceProvider lrsa = opensslkey.DecodeEncryptedPrivateKeyInfo(pLlavePri vadaenBytes, identidad);// Uso de la clase opensslkey
SHA1CryptoServiceProvider hasher = new SHA1CryptoServiceProvider();
Byte[] bytesFirmados = lrsa.SignData(System.Text.Encoding.UTF8.GetBytes(s trCadenaOriginal), hasher);
string sellodigital = Convert.ToBase64String(bytesFirmados);// Obtengo Sello

return sellodigital;
}
catch (Exception ex)
{
throw ex;
}
}
public static string CadenaOriginal()
{
try
{
//Cargar el XML generado
StreamReader leerXML = new StreamReader(@"C:\GOYA780416GM0_XML_CFDI32_Ejemplo _SIN_TIMBRE.xml");
XPathDocument XMLgenerado = new XPathDocument(leerXML);

//Cargando el XSLT
StreamReader leerXSLT = new StreamReader(@"C:\cadenaoriginal_3_2.xslt");
XPathDocument xslt = new XPathDocument(leerXSLT);
XslCompiledTransform transformacionXslt = new XslCompiledTransform();
transformacionXslt.Load(xslt);

StringWriter str = new StringWriter();
XmlTextWriter myWriter = new XmlTextWriter(str);

//Aplicando transformacion
transformacionXslt.Transform(XMLgenerado, null, myWriter);

//Resultado
string cadenaOriginal = str.ToString();
return cadenaOriginal;
}
catch (Exception ex)
{
throw ex;
}
}

esto me genera el sello digital. espero les sirva de ayuda para alguien mas que necesite generar su sello, también les dejo un link donde explican detallamente esto del sello digital para el atributo "sello" en el xml.

http://solucionfactible.com/sfic/capitulos/timbrado/sello.jsp