Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASPX (.net) (http://www.forosdelweb.com/f78/)
-   -   Facturas Digitales SAT - Mexico C# (http://www.forosdelweb.com/f78/facturas-digitales-sat-mexico-c-803607/)

Ivan_A_R 14/09/2010 15:11

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por javalos532 (Mensaje 3533221)
Hola a todos, alguien ya tiene este codigo en C#.... con VB me sale perfecto el sello pero en C# no me da igual ...ese es el codigo que estoy utilizando...

X509Certificate2 _MiCertificado = new X509Certificate2(@"....cert.p12", "12345");
RSACryptoServiceProvider RSA = (RSACryptoServiceProvider)_MiCertificado.PrivateKe y;
MD5 hasher = MD5CryptoServiceProvider.Create();
byte[] bytesFirmados = RSA.SignData(System.Text.Encoding.UTF8.GetBytes(pD ato), hasher);
return Convert.ToBase64String(bytesFirmados);

Gracias.

Disculpa Javalo, en pDato que estas mandando? La cadena original en forma de string?

javalos532 15/09/2010 10:37

Respuesta: Facturas Digitales SAT - Mexico C#
 
Asi es Ivan, ahi tienes que colocar la cadena Original como string.

Saludos.

Baskes 20/09/2010 09:55

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por F_tanori (Mensaje 3483422)
El procedimiento es correcto aparentemente el problema es que no pasa la validacion, como comentabamos en el otro foro (solocodigo) , el proceso es el indicado por SAT, segun la imagen (Extraida de una presentacion de power point de ellos mismos (SAT)). hemos usado el mismo hash md5 que da el validador del SAT, pero el sello no es igual, hice la prueba con FIRMASAT y el sello si pasa la validacion :neurotico

¿Y como validar si el sello es correcto para el SAT?

Yo sigo todo el procedimiento y al validar el sello digital, me indica que no es valido. Compare mi cadena original con la que me da el SAT y es la misma, así como hash de MD5. ¿Como saber si mi sello digital es correcto?

Este es el código que uso para generar el sello digital:
Código:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.EnableRaisingEvents = true;
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory; // Application.StartupPath;
                proc.StartInfo.FileName = "openssl.exe";
               
                proc.StartInfo.Arguments = "pkcs8 -inform DER -in aaa010101aaa_csd_01.key -passin pass:a0123456789 -out PrivateKEY.PEM ";
                proc.Start();
                proc.WaitForExit();
                ////Extraer la Llave Publica del Certificado
                proc.StartInfo.FileName = "openssl.exe";
                proc.StartInfo.Arguments = "x509 -inform DER -outform PEM -in aaa010101aaa_CSD_01.cer -pubkey -out PublicKEY.PEM";
               
                proc.Start();
                proc.WaitForExit();
                ////Firmar Hash Md5 con la llave privada
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = string.Concat("dgst -out Firma.binario -sign PrivateKEY.PEM ", CrearHash(md5));
               
                proc.Start();
                proc.WaitForExit();
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = "enc -in Firma.binario -a -A -out Firma.base64";
                proc.Start();
                proc.WaitForExit();


BenuR 20/09/2010 17:10

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por javalos532 (Mensaje 3525739)
Solucionado.... el problema fue que debo utilizar los .pem y nos el .cer y .key.

Gracias.

de dónde obtuviste los .pem?... me arroja el mismo error que a tí utilizando los .cer y .key

BenuR 20/09/2010 17:16

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por polacp86 (Mensaje 3525417)
P.D. Alguien que tenga ejemplos de como generar los comprobantes en xml !!!!!!!!!!!!!!!!!!!!!!!

Yo comencé por realizar los XML, todavía no genero los sellos ni nada de eso, pero mira el código para escribir es mas o menos así:

Código:

            string xmlns = "http://www.sat.gob.mx/cfd/2";
            StreamWriter writer;
            XmlTextWriter xmlWriter;
           
                //Crear archivo XML
                writer = File.CreateText(_xmlPath);
                writer.Close();

                //Preparar archivo
                xmlWriter = new XmlTextWriter(_xmlPath, System.Text.Encoding.UTF8);
                xmlWriter.Formatting = Formatting.Indented;
                xmlWriter.WriteStartDocument();
               
                //Insertar elementos
                xmlWriter.WriteStartElement("Comprobante");
                xmlWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
                xmlWriter.WriteAttributeString("xmlns", xmlns);
                xmlWriter.WriteAttributeString("xsi", "schemaLocation", null, xmlns + " http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd");
               
                xmlWriter.WriteStartElement("Emisor");
                xmlWriter.WriteStartElement("DomicilioFiscal");
                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("Receptor");
                xmlWriter.WriteStartElement("Domicilio");
                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("Conceptos");
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("Impuestos");
                xmlWriter.WriteStartElement("Traslados");
                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();
               
                xmlWriter.WriteEndElement();
               
                //Cerrar
                xmlWriter.Close();

_xmlPath es la ubicación donde se guardará el archivo y necesitarás las librerías "System.XML" y "System.IO".

así ya tendrás la estructura general del documento (nodos) y sólo te faltará llenarlo (atributos y propiedades)...

ssjantonio 21/09/2010 16:34

Respuesta: Facturas Digitales SAT - Mexico C#
 
A principios de año escribi un Wrapper En C++\CLI de OpenSSL para convertir el .CER y .KEY a PEM, y funciones para firmar, abandone el proyecto y haciendo pruebas me encontre con varios memory leaks asi que el dia de hoy me habia dado a la tarea de hacer lo mismo con Bouncy (aunque la otra libreria este funcionando correctamente), ya tengo el método para convertir los archivos .cer a PEM, sin embargo no he logrado convertir el .key a PEM, alguien lo ha logrado?

Aquí esta el método para convertir los .CER a PEM usando Bouncy Castle:

public void DERToPEM(string sFileFrom, string sFileTo)
{
using(System.IO.Stream sr = System.IO.File.OpenRead(sFileFrom))
{
Org.BouncyCastle.X509.X509CertificateParser cp = new X509CertificateParser();
var cert = cp.ReadCertificate(sr);

var pKey = cert.GetPublicKey();

using(System.IO.TextWriter tw = new System.IO.StreamWriter(sFileTo))
{
PemWriter pw = new PemWriter(tw);
pw.WriteObject(pKey);
pw.WriteObject(cert);
tw.Close();
}
}
}

Si a alguien le interesa la librería en C++\CLI para que haga pruebas y corregir los memory leaks puedo enviárselos a su correo.

winexim 22/09/2010 23:43

Respuesta: Facturas Digitales SAT - Mexico C#
 
Publicado hoy Jueves 23 en el diario oficial de la federacion

DOF: 23/09/2010
ANEXO 20 de la Primera Resolución de Modificaciones a la Resolución Miscelánea Fiscal para 2010, publicada el 14 de septiembre de 2010.
Al margen un sello con el Escudo Nacional, que dice: Estados Unidos Mexicanos.- Secretaría de Hacienda y Crédito Público.
Modificación al Anexo 20 de la Resolución Miscelánea Fiscal para 2010

Este es el link



http://www.dof.gob.mx/nota_detalle.p...cha=23/09/2010


Contenido

Medios electrónicos

I. Del Comprobante Fiscal Digital:
A. Características técnicas del archivo que contenga el informe mensual de comprobantes fiscales digitales emitidos
B. Estándar de comprobante fiscal digital
C. Generación de sellos digitales para comprobantes fiscales digitales
II. Del Comprobante Fiscal Digital por Internet:
A. Estándar de comprobante fiscal digital por internet
B. Generación de sellos digitales para comprobantes fiscales digitales por internet
C. Estándar y uso del complemento obligatorio: Timbre Fiscal Digital del SAT
D. Estándar del servicio de cancelación
E. Especificación técnica del código de barras bidimensional
III. De los distintos medios de comprobación digital:
A. Estándares y especificaciones técnicas que deberán cumplir las aplicaciones informáticas para la generación de claves de criptografía asimétrica a utilizar para Firma Electrónica Avanzada
B. Uso de la facilidad de nodos opcionales <Complemento> y <ComplementoConcepto>
C. Uso de la facilidad de ensobretado <Addenda>

J_L_A 26/09/2010 06:49

Respuesta: Facturas Digitales SAT - Mexico C#
 
Buen dia a todos los visitantes del foro. Les doy otra liga para ver la última versión de "Anexo 20 de la Primera Resolución de Modificaciones a la Resolución Miscelánea Fiscal para 2010, publicada el 14 de septiembre de 2010." en formato doc.

http://www.sat.gob.mx/sitio_internet/informacion_fiscal/legislacion/52_18801.html

A primera vista hay un cambio importante para quienes están en la etapa de generar el sello digital, ahora en lugar de utilizar digestión MD5, el SAT pide que se utilice SHA-1. Aun falta saber cuando entrarán en operación los nuevos cambios pero conviene estar enterados.

A la orden si es que les puedo ayudar en algo. Estoy usando c sharp con openssl y ya logré pasar todas casi todas las etapas (obviamente exceptuando las últimas novedades). Estoy en la parte de los complementos y addendas aunque creo que no me van a ser necesarias.

Saludos!

J_L_A 26/09/2010 07:59

Respuesta: Facturas Digitales SAT - Mexico C#
 
BenuR, hay una manera más fácil para generar el xml.

-Convertir cfdv2.xsd (está en la página del SAT) a clase de c# desde la linea de comandos ms-dos:
Código:

%:\>xsd cfdv2.xsd /c
(Devuelve cfdv2.cs)
-Integrarlo al proyecto como módulo de clase, por ejemplo con el nombre Comprobante.cs

-Ahora se declara una variable de tipo Comprobante
Código:

Comprobante comprobante = new Comprobante();
-Se le asignan valores:
Código:

comprobante.version = "2.0";
comprobante.serie = "ABCD";
.
.
.

... y así con cada clase (emisor, receptor, conceptos, impuestos, etc.) del módulo Comprobante.cs:
Código:

ComprobanteEmisor comprobanteEmisor = new ComprobanteEmisor();

comprobanteEmisor.nombre = "Juan Pérez";
comprobanteEmisor.rfc = "ABCD0102039Z0";
.
.
.

-Después se genera el xml con:
Código:

using System.xml;
using System.Xml.Serialization;
using System.Text.Encoding;

XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
XmlTextWriter xmlTextWriter = new XmlTextWriter(RutaConNombreArchivoSinExtension + ".xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;
XmlSerializer xs = new XmlSerializer(typeof(Comprobante));

xs.Serialize(xmlTextWriter, comprobante, xmlNameSpace);
xmlTextWriter.Close();

Será necesario generar el xml dos veces: la segunda para insertarle el sello digital. Si quieren mas adelante los digo como se hace.

Espero sirva. A la orden para dudas, correcciones u objeciones.

Saludos!

J_L_A 26/09/2010 08:09

Respuesta: Facturas Digitales SAT - Mexico C#
 
Me faltó decir:

Buscar el xml en la ruta que pusieron en "RutaConNombreArchivoSinExtension"

Nos1 28/09/2010 17:42

Respuesta: Facturas Digitales SAT - Mexico C#
 
Muchas Gracias JLA,
Pudieras mostrar el codigo que va despues? (para insertarle el sello digital, etc)

ah, y otra pregunta, en este caso como manejas las adendas especiales de las empresas que asi lo requieren (soriana, etc)?
Gracias de antemano.
Nos1

Nos1 28/09/2010 17:52

Respuesta: Facturas Digitales SAT - Mexico C#
 
ah, y otra pregunta, como manejas las adendas especiales de las empresas que asi lo requieren (soriana, etc)?
Gracias.
Nos1

J_L_A 29/09/2010 17:26

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por Nos1 (Mensaje 3576804)
Muchas Gracias JLA,
Pudieras mostrar el codigo que va despues? (para insertarle el sello digital, etc)

ah, y otra pregunta, en este caso como manejas las adendas especiales de las empresas que asi lo requieren (soriana, etc)?
Gracias de antemano.
Nos1

Que tal NOS1:
Ya tienes generado el sello digital y está listo para insertarlo? Por favor concrétame mas tu pregunta para que te pueda ayudar, por ejemplo no se a que te refieres con el "etc".

En cuanto a las addendas, comentaba mas arriba que apenas estoy llegando ahi y en ese punto aun no puedo aportar, lo siento. Pero quizá haya alguien en el foro que nos pueda echar una mano.

Saludos a todos!

Nos1 30/09/2010 14:26

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por J_L_A (Mensaje 3578255)
Que tal NOS1:
Ya tienes generado el sello digital y está listo para insertarlo? Por favor concrétame mas tu pregunta para que te pueda ayudar, por ejemplo no se a que te refieres con el "etc".

En cuanto a las addendas, comentaba mas arriba que apenas estoy llegando ahi y en ese punto aun no puedo aportar, lo siento. Pero quizá haya alguien en el foro que nos pueda echar una mano.

Saludos a todos!

Hola,
Perdón, era una tontería por la cual no se me generaba el sello digital (puse una contraseña de prueba). Aun me falta corroborar que el sello sea el correcto (se que hay una pagina de la sat para verificar eso, tengo que investigar).

En cuanto a la addenda, si, me refiero a las grandes cadenas que exigen cosas en particular ahi, dado que yo seguí el camino de 100% .net que amablemente otros foreros aportarton (no usar comandos), yo tambien estaré viendo como hacer esto de la addenda.
Todo empieza con un ComprobanteAddenda ca = new ComprobanteAddenda(); al parecer, sin embargo, por lo complejas que son las addendas, a mi se me haría mas comodo un parser (algo para simplemente ir concatenando strings) en lugar de usar nodos y elementos, etc. Sin embargo no se si eso sea lo mas apropiado una vez que el resto del XML lo generé con la clase "opensslkey.cs". Tampoco sé de antemano como incluir el parser ahí.
Cualquier recomendación o expericia tuya o de cualquier forero es gratamente bienvenida.
Saludos.

ecastilloc 14/10/2010 13:13

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por J_L_A (Mensaje 3573197)
BenuR, hay una manera más fácil para generar el xml.

-Convertir cfdv2.xsd (está en la página del SAT) a clase de c# desde la linea de comandos ms-dos:
Código:

%:\>xsd cfdv2.xsd /c
(Devuelve cfdv2.cs)
-Integrarlo al proyecto como módulo de clase, por ejemplo con el nombre Comprobante.cs

-Ahora se declara una variable de tipo Comprobante
Código:

Comprobante comprobante = new Comprobante();
-Se le asignan valores:
Código:

comprobante.version = "2.0";
comprobante.serie = "ABCD";
.
.
.

... y así con cada clase (emisor, receptor, conceptos, impuestos, etc.) del módulo Comprobante.cs:
Código:

ComprobanteEmisor comprobanteEmisor = new ComprobanteEmisor();

comprobanteEmisor.nombre = "Juan Pérez";
comprobanteEmisor.rfc = "ABCD0102039Z0";
.
.
.

-Después se genera el xml con:
Código:

using System.xml;
using System.Xml.Serialization;
using System.Text.Encoding;

XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
XmlTextWriter xmlTextWriter = new XmlTextWriter(RutaConNombreArchivoSinExtension + ".xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;
XmlSerializer xs = new XmlSerializer(typeof(Comprobante));

xs.Serialize(xmlTextWriter, comprobante, xmlNameSpace);
xmlTextWriter.Close();

Será necesario generar el xml dos veces: la segunda para insertarle el sello digital. Si quieren mas adelante los digo como se hace.

Espero sirva. A la orden para dudas, correcciones u objeciones.

Saludos!

Hola Qué tal a todos, muchas gracias por las contribuciones de todos. Quisiera despejar una duda en cuanto a la construcción del XML, ya que me atoré en la parte de conceptos, tengo el siguiente código, el cual funciona a la perfección hasta la parte de conceptos que es donde me manda el sig mensaje: "Referencia a objeto no establecida como instancia de un objeto". '¿¿Alguien me podría decir por que pasa esto??, ¿Necesito un constructor??

private void crearCFD_Click(object sender, EventArgs e)
{

Comprobante comprobante = new Comprobante();
ComprobanteEmisor comprobanteEmisor = new ComprobanteEmisor();
t_UbicacionFiscal ubicacionEmisor = new t_UbicacionFiscal();
ComprobanteReceptor comprobanteReceptor = new ComprobanteReceptor();
t_Ubicacion ubicacionReceptor = new t_Ubicacion();
ComprobanteConcepto[] comprobanteConcepto = new ComprobanteConcepto[10];


comprobante.version = "2.0";
comprobante.serie = "ABCD";
comprobante.folio = "12345";
comprobante.fecha = Convert.ToDateTime("2010-05-03T14:11:36");
comprobante.noCertificado = "20001000000100000377";
comprobante.subTotal = 2000.00M;
comprobante.total = 2320.00M;
comprobante.noAprobacion = "49";
comprobante.anoAprobacion = "2010";
comprobante.formaDePago = "PAGO EN UNA SOLA EXHIBICIÓN";
comprobante.descuento = 0.00M;
comprobante.metodoDePago = "EFECTIVO";



comprobanteEmisor.nombre = "CONTRIBUYENTE PRUEBASEIS PATERNOSEIS MATERNOSEIS";
comprobanteEmisor.rfc = "PAMC660606ER9";

ubicacionEmisor.calle = "PRUEBA SEIS";
ubicacionEmisor.noExterior = "6";
ubicacionEmisor.noInterior = "6";
ubicacionEmisor.colonia = "PUEBLA CENTRO";
ubicacionEmisor.localidad = "PUEBLA";
ubicacionEmisor.municipio = "PUEBLA";
ubicacionEmisor.estado = "PUEBLA";
ubicacionEmisor.pais = "MÉXICO";
ubicacionEmisor.codigoPostal = "72000";

comprobanteReceptor.nombre = "ROSA MARÍA CALDERÓN UIRIEGAS";
comprobanteReceptor.rfc = "CAUR390312S87";
ubicacionReceptor.calle = "TOPOCHICO";
ubicacionReceptor.noExterior = "52";
ubicacionReceptor.colonia = "JARDINES DEL VALLE";
ubicacionReceptor.estado = "NUEVO LEON";
ubicacionReceptor.pais = "México";
ubicacionReceptor.codigoPostal = "95465";


comprobanteConcepto[0].unidad = "Servicio";
comprobanteConcepto[0].noIdentificacion = "01";
comprobanteConcepto[0].descripcion = "Asesoria Fiscal y administrativa";
comprobanteConcepto[0].valorUnitario = 2000.00M;
comprobanteConcepto[0].importe = 2000.00M;


comprobanteEmisor.DomicilioFiscal = ubicacionEmisor;
comprobante.Emisor = comprobanteEmisor;
comprobanteReceptor.Domicilio = ubicacionReceptor;
comprobante.Receptor = comprobanteReceptor;
comprobante.Conceptos = comprobanteConcepto;


XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("schemaLocation", "http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd");
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
XmlTextWriter xmlTextWriter = new XmlTextWriter("C:\\Users\\BJK1\\Desktop\\archivo" + ".xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;
XmlSerializer xs = new XmlSerializer(typeof(Comprobante));

xs.Serialize(xmlTextWriter, comprobante, xmlNameSpace);
xmlTextWriter.Close();

}

riotamesis 18/10/2010 18:13

Respuesta: Facturas Digitales SAT - Mexico C#
 
Justo yo estaba con el mismo problema

Antes de asignarle los valores debes inicializar el objeto en cada posicion,

comprobanteConcepto[0] = new ComprobanteConcepto();

y ya despues asignas tus valores

comprobanteConcepto[0].unidad = "Servicio";
comprobanteConcepto[0].noIdentificacion = "01";
comprobanteConcepto[0].descripcion = "Asesoria Fiscal y administrativa";
comprobanteConcepto[0].valorUnitario = 2000.00M;
comprobanteConcepto[0].importe = 2000.00M;

A mi me funciono...

Saludos

Nos1 19/10/2010 11:52

Respuesta: Facturas Digitales SAT - Mexico C#
 
Alguien sabe como se puede obtener la cadena original, si nos basamos en este esquema (usando la clase .cs)? espero no sea demasiado obvia mi pregunta.
Saludos.

Nos1 19/10/2010 14:52

Respuesta: Facturas Digitales SAT - Mexico C#
 
Tratando de contestarme a mi mismo, vi el formato

http://www.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_6543.html

Supongo que no hay atajos mas que hacerlo a mano, y no es posible que se emita en automático la cadena original

jgarcia3465 21/10/2010 21:08

Respuesta: Facturas Digitales SAT - Mexico C#
 
Saludos javalos532, estoy buscando el código fuente para emitir CFD´s del SAT con todas las características, lo tienes? lo vendes? Me interesa en VB.net

Alguien sabe de quién lo tenga disponible? Me urge para implementarlo en la empresa donde laboro, me meti en aprietos, les dije que no era necesario el ContPAQ, échenme la mano porque me puede costar la chamba...

Gracias,

José Luis
[email protected]

bichoikaro 23/10/2010 09:58

Respuesta: Facturas Digitales SAT - Mexico C#
 
bien,... YO HE PODIDO ASER LA DIGESTION, PERO NO PUEDO GENERAR EL SELLO... COMO PUEDO GENERAR EL SELLO EN C#... ¡¡
A Y EN QUE4 MOMENTO USO EL CERTIFICADO DEL SAT Y EL ARCHIVO .KEY

ASI GENERO LA DIGESTION MD5

cadena = @"||A|1|2005-09-02T16:30:00|1|ISP900909Q88|Industrias del Sur Poniente, S.A. de C.V.|Alvaro Obregón|37|3|Col. Roma Norte|México|Cuauhtémoc|Distrito Federal|México|06700|Pino Suarez|23|Centro|Monterrey|Monterrey|Nuevo Léon|México|95460|CAUR390312S87|Rosa María Calderón Uriegas|Topochico|52|Jardines del Valle|Monterrey|Monterrey|Nuevo León|México|95465|10|Caja|Vasos decorados|20|200|1|pieza|Charola metálica|150|150|IVA|52.5||";
sw.Write(cadena);
sw.Close();

MessageBox.Show("cadena {0}, '" + cadena + "'");
System.IO.StreamReader sr = new StreamReader(fic);
txt = sr.ReadToEnd();
sr.Close();
//DIGESTION MD5
MD5 md5 = new MD5CryptoServiceProvider();
byte[] data = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(cadena) );
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i <= data.Length - 1; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
string cadmd5 = sBuilder.ToString();
MessageBox.Show("encriptando cadena md5: {0}, '" + sBuilder + "' LA CAD STRINGG: {1}, '" + sBuilder + "'");

denisa 26/10/2010 17:42

Respuesta: Facturas Digitales SAT - Mexico C#
 
Hola Tengo una duda aqui

xmlNameSpace.Add("schemaLocation", "http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd");


output

xmlns:schemaLocation="http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"

Deberia?

xsi:schemaLocation="http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"

me podrían ayudar con esto

denisa 26/10/2010 17:43

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por denisa (Mensaje 3612520)
Hola Tengo una duda aqui

xmlNameSpace.Add("schemaLocation", "http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd");


output

xmlns:schemaLocation="http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"

Deberia?

xsi:schemaLocation="http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"

me podrían ayudar con esto


GoLuM83 03/11/2010 18:44

Respuesta: Facturas Digitales SAT - Mexico C#
 
Hola ecastilloc puse tu codigo de comprobantes para generar el XML solo que me arroja un error al serializar

The global XML attribute 'fecha' from namespace '' references distinct types System.DateTime and System.DateTime. Use XML attributes to specify another XML name or namespace for the attribute or types.

Me podrias ayudar?

Gracias

GoLuM83 03/11/2010 18:54

Respuesta: Facturas Digitales SAT - Mexico C#
 
Ups al parecer con la conversion a .cs se agrego un campo fecha con tipo de dato date, solo lo quite y ya funciono una disculpa.

zeroccm 08/11/2010 15:56

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por riotamesis (Mensaje 3601885)
Justo yo estaba con el mismo problema

Antes de asignarle los valores debes inicializar el objeto en cada posicion,

comprobanteConcepto[0] = new ComprobanteConcepto();

y ya despues asignas tus valores

comprobanteConcepto[0].unidad = "Servicio";
comprobanteConcepto[0].noIdentificacion = "01";
comprobanteConcepto[0].descripcion = "Asesoria Fiscal y administrativa";
comprobanteConcepto[0].valorUnitario = 2000.00M;
comprobanteConcepto[0].importe = 2000.00M;

A mi me funciono...

Saludos

Hola disculpa como agregas el IVa o el ISR por que no encuentro como, gracias.

aldaking 09/11/2010 18:49

Respuesta: Facturas Digitales SAT - Mexico C#
 
Este es el código que uso para generar el sello digital:
Código:

.
.
.
                ////Firmar Hash Md5 con la llave privada
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = string.Concat("dgst -out Firma.binario -sign PrivateKEY.PEM ", CrearHash(md5));
               
                proc.Start();
                proc.WaitForExit();
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = "enc -in Firma.binario -a -A -out Firma.base64";
                proc.Start();
                proc.WaitForExit();

Que es lo que haces en esta parte del codigo donde dice... CrearHash(md5)...porque concatenas???

estoy en esa parte y no se que mas hacer :S

arcangeldoc 10/11/2010 17:59

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por aldaking (Mensaje 3629883)
Este es el código que uso para generar el sello digital:
Código:

.
.
.
                ////Firmar Hash Md5 con la llave privada
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = string.Concat("dgst -out Firma.binario -sign PrivateKEY.PEM ", CrearHash(md5));
               
                proc.Start();
                proc.WaitForExit();
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = "enc -in Firma.binario -a -A -out Firma.base64";
                proc.Start();
                proc.WaitForExit();

Que es lo que haces en esta parte del codigo donde dice... CrearHash(md5)...porque concatenas???

estoy en esa parte y no se que mas hacer :S


Este es la funcion que el crea

le envias tu cadena original

public static string CrearHash(string input)
{
MD5 md5Hasher = MD5.Create();
byte[] data = md5Hasher.ComputeHash(UTF8Encoding.UTF8.GetBytes(i nput));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++){
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}

arcangeldoc 10/11/2010 18:05

Respuesta: Facturas Digitales SAT - Mexico C#
 
Con respecto a la cadena Original y la creacion del sello digital

al ejecutar el siguiente comando creo el sello digital

$ openssl dgst -MD5 -sign aaa010101aaa_CSD_01.key.pem cadena_original.txt | openssl enc -base64 -a

pero al crearlo sobre lo siguiente comando el sello digital varia

$ xsltproc cadenaoriginal_2_0.xslt 1.xml | openssl dgst -MD5 -sign aaa010101aaa_CSD_01.key.pem | openssl enc -base64 -a

NOTA: xsloproc genera la cadena original automaticamente segun la informacion que entrega el xslt del SAT

Alguien le ha pasado lo mismo

Esto usando Linux

killer_beaner 13/11/2010 23:41

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por Baskes (Mensaje 3565231)
¿Y como validar si el sello es correcto para el SAT?

Yo sigo todo el procedimiento y al validar el sello digital, me indica que no es valido. Compare mi cadena original con la que me da el SAT y es la misma, así como hash de MD5. ¿Como saber si mi sello digital es correcto?

Este es el código que uso para generar el sello digital:
Código:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.EnableRaisingEvents = true;
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory; // Application.StartupPath;
                proc.StartInfo.FileName = "openssl.exe";
               
                proc.StartInfo.Arguments = "pkcs8 -inform DER -in aaa010101aaa_csd_01.key -passin pass:a0123456789 -out PrivateKEY.PEM ";
                proc.Start();
                proc.WaitForExit();
                ////Extraer la Llave Publica del Certificado
                proc.StartInfo.FileName = "openssl.exe";
                proc.StartInfo.Arguments = "x509 -inform DER -outform PEM -in aaa010101aaa_CSD_01.cer -pubkey -out PublicKEY.PEM";
               
                proc.Start();
                proc.WaitForExit();
                ////Firmar Hash Md5 con la llave privada
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = string.Concat("dgst -out Firma.binario -sign PrivateKEY.PEM ", CrearHash(md5));
               
                proc.Start();
                proc.WaitForExit();
                proc.StartInfo.FileName = "openssl.exe ";
                proc.StartInfo.Arguments = "enc -in Firma.binario -a -A -out Firma.base64";
                proc.Start();
                proc.WaitForExit();


Compañeros que tal muy buena tarde,

Estoy desarrollando el sistema de facturación y tengo problema en la generación del .xml
También sigo al pie de la letra el procedimiento y al validar me indica igual que no es válido. Pero que fue leído exitosamente.
Lo que si les puedo decir es que el archivo .xml se tiene que guardar en UTF_8 en lugar de ascii que es como lo genera.
Abriéndolo con un editor de texto profesional (ultraedit) el xml lo muestra como archivo DOS, convirtiéndolo el mismo archivo a formato utf_8 y salvarlo para posteriormente validarlo en el SAT, mi problema es que no lo puedo salvar, me lo regresa al formato 2
alguna idea?

BenuR 17/11/2010 17:43

Respuesta: Facturas Digitales SAT - Mexico C#
 
Cita:

Iniciado por Nos1 (Mensaje 3603116)
Tratando de contestarme a mi mismo, vi el formato

http://www.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_6543.html

Supongo que no hay atajos mas que hacerlo a mano, y no es posible que se emita en automático la cadena original

Si se puede, necesitas el archivo cadenaoriginal_2_0.xslt, y el archivo XML ya generado, las instrucciones son:

Código:

  string tempFile = "./ostring.txt";
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load("cadenaoriginal_2_0.xslt");

            using (FileStream f = new FileStream(tempFile, FileMode.OpenOrCreate, FileAccess.Write))
            {
                xslt.Transform(_xmlPath, null, f);
            }

tempFile contiene la cadena original...


La zona horaria es GMT -6. Ahora son las 03:57.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.