Foros del Web » Programando para Internet » ASPX (.net) »

Facturas Digitales SAT - Mexico C#

Estas en el tema de Facturas Digitales SAT - Mexico C# en el foro de ASPX (.net) en Foros del Web. Cita: Iniciado por javalos532 Hola a todos, alguien ya tiene este codigo en C#.... con VB me sale perfecto el sello pero en C# no ...

  #61 (permalink)  
Antiguo 14/09/2010, 16:11
 
Fecha de Ingreso: julio-2010
Mensajes: 10
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por javalos532 Ver Mensaje
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?
  #62 (permalink)  
Antiguo 15/09/2010, 11:37
 
Fecha de Ingreso: mayo-2010
Mensajes: 34
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Asi es Ivan, ahi tienes que colocar la cadena Original como string.

Saludos.
  #63 (permalink)  
Antiguo 20/09/2010, 10:55
 
Fecha de Ingreso: marzo-2004
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por F_tanori Ver Mensaje
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
¿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();

Última edición por Baskes; 20/09/2010 a las 12:24
  #64 (permalink)  
Antiguo 20/09/2010, 18:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por javalos532 Ver Mensaje
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
  #65 (permalink)  
Antiguo 20/09/2010, 18:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por polacp86 Ver Mensaje
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)...
  #66 (permalink)  
Antiguo 21/09/2010, 17:34
 
Fecha de Ingreso: enero-2009
Mensajes: 2
Antigüedad: 10 años, 11 meses
Puntos: 0
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.
  #67 (permalink)  
Antiguo 23/09/2010, 00:43
 
Fecha de Ingreso: marzo-2007
Mensajes: 74
Antigüedad: 12 años, 9 meses
Puntos: 0
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>
  #68 (permalink)  
Antiguo 26/09/2010, 07:49
Avatar de J_L_A  
Fecha de Ingreso: septiembre-2010
Ubicación: México D. F
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
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!
  #69 (permalink)  
Antiguo 26/09/2010, 08:59
Avatar de J_L_A  
Fecha de Ingreso: septiembre-2010
Ubicación: México D. F
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
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!
  #70 (permalink)  
Antiguo 26/09/2010, 09:09
Avatar de J_L_A  
Fecha de Ingreso: septiembre-2010
Ubicación: México D. F
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Me faltó decir:

Buscar el xml en la ruta que pusieron en "RutaConNombreArchivoSinExtension"
  #71 (permalink)  
Antiguo 28/09/2010, 18:42
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
De acuerdo 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
  #72 (permalink)  
Antiguo 28/09/2010, 18:52
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
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
  #73 (permalink)  
Antiguo 29/09/2010, 18:26
Avatar de J_L_A  
Fecha de Ingreso: septiembre-2010
Ubicación: México D. F
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por Nos1 Ver Mensaje
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!
  #74 (permalink)  
Antiguo 30/09/2010, 15:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por J_L_A Ver Mensaje
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.
  #75 (permalink)  
Antiguo 14/10/2010, 14:13
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por J_L_A Ver Mensaje
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();

}
  #76 (permalink)  
Antiguo 18/10/2010, 19:13
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 9 años, 1 mes
Puntos: 0
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
  #77 (permalink)  
Antiguo 19/10/2010, 12:52
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
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.
  #78 (permalink)  
Antiguo 19/10/2010, 15:52
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
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
  #79 (permalink)  
Antiguo 21/10/2010, 22:08
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 9 años, 1 mes
Puntos: 0
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]
  #80 (permalink)  
Antiguo 23/10/2010, 10:58
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 9 años, 1 mes
Puntos: 0
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 + "'");
  #81 (permalink)  
Antiguo 26/10/2010, 18:42
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
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
  #82 (permalink)  
Antiguo 26/10/2010, 18:43
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por denisa Ver Mensaje
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
  #83 (permalink)  
Antiguo 03/11/2010, 19:44
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
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
  #84 (permalink)  
Antiguo 03/11/2010, 19:54
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
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.
  #85 (permalink)  
Antiguo 08/11/2010, 15:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por riotamesis Ver Mensaje
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.
  #86 (permalink)  
Antiguo 09/11/2010, 18:49
Avatar de aldaking  
Fecha de Ingreso: noviembre-2009
Ubicación: Saltillo
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Pregunta 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
  #87 (permalink)  
Antiguo 10/11/2010, 17:59
Avatar de arcangeldoc  
Fecha de Ingreso: noviembre-2010
Ubicación: Mexico
Mensajes: 4
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por aldaking Ver Mensaje
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();
}
  #88 (permalink)  
Antiguo 10/11/2010, 18:05
Avatar de arcangeldoc  
Fecha de Ingreso: noviembre-2010
Ubicación: Mexico
Mensajes: 4
Antigüedad: 9 años, 1 mes
Puntos: 0
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
  #89 (permalink)  
Antiguo 13/11/2010, 23:41
 
Fecha de Ingreso: noviembre-2009
Mensajes: 12
Antigüedad: 10 años
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por Baskes Ver Mensaje
¿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?
  #90 (permalink)  
Antiguo 17/11/2010, 17:43
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Facturas Digitales SAT - Mexico C#

Cita:
Iniciado por Nos1 Ver Mensaje
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...

Etiquetas: digitales, facturas, mexico, sat, aspx
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

SíEste tema le ha gustado a 5 personas




La zona horaria es GMT -6. Ahora son las 14:36.