Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] como hacer cadena o numero para el atributo sello xml cfdi ??

Estas en el tema de como hacer cadena o numero para el atributo sello xml cfdi ?? en el foro de .NET en Foros del Web. hola compañeros como se debe crear o generar de forma correcta el atributo sello que va en el xml cfdi para la facturación electrónica y ...
  #1 (permalink)  
Antiguo 25/01/2014, 11:15
 
Fecha de Ingreso: enero-2014
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 1
como hacer cadena o numero para el atributo sello xml cfdi ??

hola compañeros como se debe crear o generar de forma correcta el atributo sello que va en el xml cfdi para la facturación electrónica y que archivos tengo que utilizar (los archivos de la FIEL .cer y .key o los archivos del CSD .cer y .key) esto para generar el atributo sello y atributo certificado, estoy trabajando con visual studio asp.net y lenguaje c#.

Saludos, Gracias.
  #2 (permalink)  
Antiguo 27/01/2014, 15:12
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: como hacer cadena o numero para el atributo sello xml cfdi ??

Hola rudolfcruz

Para generar el sello de un CFDi, requieres tener la cadena original de tu XML, la cadena original son los datos de tu CFDi, (Datos del CFDi - Datos Receptor - Datos Receptor - Conceptos - Impuestos - Complementos), dicha cadena la puedes generar a "mano" a nivel programación concatenando tus datos, o lo generas con el XLST expuesto por el SAT.

Una ves teniendo dicha cadena original, debes sellar con un CSD o FIEL (Si eres persona fisica) usando el algoritmo SHA1 y RSA respectivo del propio certificado.

De esta manera obtendras el Sello, si requieres ejemplos claros, puedo subirte los codigos para generarlo desde OpenSSL

Saludos.
  #3 (permalink)  
Antiguo 27/01/2014, 23:34
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 22 años
Puntos: 37
Respuesta: como hacer cadena o numero para el atributo sello xml cfdi ??

Busca en google opensslkey.cs es codigo puro CSharp donde, accediendo directo al .key con tu pwd, genera el sha1 y genera el sello.
  #4 (permalink)  
Antiguo 28/01/2014, 02:27
 
Fecha de Ingreso: enero-2014
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: como hacer cadena o numero para el atributo sello xml cfdi ??

Cita:
Iniciado por Namiwis Ver Mensaje
Hola rudolfcruz

Para generar el sello de un CFDi, requieres tener la cadena original de tu XML, la cadena original son los datos de tu CFDi, (Datos del CFDi - Datos Receptor - Datos Receptor - Conceptos - Impuestos - Complementos), dicha cadena la puedes generar a "mano" a nivel programación concatenando tus datos, o lo generas con el XLST expuesto por el SAT.

Una ves teniendo dicha cadena original, debes sellar con un CSD o FIEL (Si eres persona fisica) usando el algoritmo SHA1 y RSA respectivo del propio certificado.

De esta manera obtendras el Sello, si requieres ejemplos claros, puedo subirte los codigos para generarlo desde OpenSSL

Saludos.
hola Namiwis si por favor sube los ejemplos la verdad que llevo mas de 15 días tratando de hacer esto del sello mas no puedo.


la generación para el sello para el cfdi se hace antes o después de crear el xml??
si tengo el archivo cadenaoriginal_3_2.xlst con esto es suficiente para la cadena original o también necesito el xml generado??

gracias por responder, Saludos.
  #5 (permalink)  
Antiguo 28/01/2014, 02:38
 
Fecha de Ingreso: enero-2014
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: como hacer cadena o numero para el atributo sello xml cfdi ??

hola wwwmaster:

Cita:
Iniciado por wwwmaster Ver Mensaje
Busca en google opensslkey.cs es codigo puro CSharp donde, accediendo directo al .key con tu pwd, genera el sha1 y genera el sello.
con esto ya no necesito de la cadena original ?? que hasta el momento no se si sale de la genaración del xml o del archivo que proporciona el sat cadenaoriginal_3_2.xlst o ambos archivos juntos??

Gracias por responder, Saludos
  #6 (permalink)  
Antiguo 28/01/2014, 13:20
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: como hacer cadena o numero para el atributo sello xml cfdi ??

rudolfcruz

En ambos requieres generar la cadena original, el sello lo puedes hacer antes o despues de hacer tu XML, yo te recomendaria que despues, por que de esta manera no tendrias errores en la cadena ni en tu sello, tomando en cuenta el codigo que te proporcionaron para generar el sello, dicho codigo recibe por referencia la cadena original.

La cadena original la obtienes con el XSLT y tu XML ya generado, de la siguiente manera.

Codigo en C# usa un conversor de lenguaje a VB.Net

Código:
//Cargar el XML
            StreamReader reader_XML = new StreamReader(RutaXML);
            XPathDocument myXPathDoc = new XPathDocument(reader_XML);
            //Cargando el XSLT
            XslCompiledTransform myXslTrans = new XslCompiledTransform();
Código:
//Cargo el XSLT
myXslTrans.Load(appPath + "\\Until\\cadenaoriginal_3_2.xslt");
Código:
StringWriter str = new StringWriter();
            XmlTextWriter myWriter = new XmlTextWriter(str);

            //Aplicando transformacion
            myXslTrans.Transform(myXPathDoc, null, myWriter);

            //Cierro el objeto.
            reader_XML.Close();
            //Resultado Cadena Original
            return str.ToString();
Y listo tienes tu cadena original, mandala por parametro al metodo de generar sello y estas del otro lado

Saludos.
  #7 (permalink)  
Antiguo 28/01/2014, 18:36
 
Fecha de Ingreso: enero-2014
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: como hacer cadena o numero para el atributo sello xml cfdi ??

Cita:
Iniciado por Namiwis Ver Mensaje
rudolfcruz

En ambos requieres generar la cadena original, el sello lo puedes hacer antes o despues de hacer tu XML, yo te recomendaria que despues, por que de esta manera no tendrias errores en la cadena ni en tu sello, tomando en cuenta el codigo que te proporcionaron para generar el sello, dicho codigo recibe por referencia la cadena original.

La cadena original la obtienes con el XSLT y tu XML ya generado, de la siguiente manera.

Codigo en C# usa un conversor de lenguaje a VB.Net

Código:
//Cargar el XML
            StreamReader reader_XML = new StreamReader(RutaXML);
            XPathDocument myXPathDoc = new XPathDocument(reader_XML);
            //Cargando el XSLT
            XslCompiledTransform myXslTrans = new XslCompiledTransform();
Código:
//Cargo el XSLT
myXslTrans.Load(appPath + "\\Until\\cadenaoriginal_3_2.xslt");
Código:
StringWriter str = new StringWriter();
            XmlTextWriter myWriter = new XmlTextWriter(str);

            //Aplicando transformacion
            myXslTrans.Transform(myXPathDoc, null, myWriter);

            //Cierro el objeto.
            reader_XML.Close();
            //Resultado Cadena Original
            return str.ToString();
Y listo tienes tu cadena original, mandala por parametro al metodo de generar sello y estas del otro lado

Saludos.
Muchas gracias Mamiwis pondré en practica el código que me proporcionas y las sugerencia y te comento como me va y posterior publicare todo el código para que le eches un vistazo.
Saludos...
  #8 (permalink)  
Antiguo 29/01/2014, 21:32
 
Fecha de Ingreso: enero-2014
Mensajes: 14
Antigüedad: 10 años, 10 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

Etiquetas: cadena, cfdi, numero, sello, visual, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:10.