![]() |
Respuesta: Facturas Digitales SAT - Mexico C# Muchas gracias polacp86, reviso esta pagina y cualquier resultado lo notifico... todavia no tengo la parte del xml pero si termino la parte del sellado me dedicare al 100% de hacer lo del XML y te ayudo en esta parte. |
Respuesta: Facturas Digitales SAT - Mexico C# Que tal polacp86, implemente la funcion para sellar que indican en la pagina y que son tal cual los pasos que indicas y no llego al mismo sello que con OpenSSL... que me podra faltar ? incluso ya valide y el MD5 y este valor si me da igual pero al momento de obtener el sello no coinciden.. Gracias. |
Respuesta: Facturas Digitales SAT - Mexico C# Hola javalos, que raro que no sale el mismo resultado, revisaste el codigo que viene hasta el final de la pagina?????????? ese fue el que utilice. |
Respuesta: Facturas Digitales SAT - Mexico C# Hola a TODOS les comento que finalmente logre obtener un sello digital verificado por el validador del SAT con lo siguiente: Dim objCert As New X509Certificates.X509Certificate2("archivo.p12", "b0123456789") Dim lRSA As RSACryptoServiceProvider = objCert.PrivateKey Dim lhasher As New MD5CryptoServiceProvider() Dim bytesFirmados As Byte() = lRSA.SignData(System.Text.Encoding.UTF8.GetBytes(p CadenaOriginal), lhasher) Return Convert.ToBase64String(bytesFirmados) El problema es que no he podido hacerlo 100% NET debido a que no he encontrado la forma de generar el archivo con formato p12 directamente desde .NET sin utilizar el openssl. Alguien tiene una idea de como combinar los archivos .key y .cer en uno solo con formato p12 (o bien pfx) SIN UTILIZAR openSSL?? Gracias de Antemano y Saludos |
Respuesta: Facturas Digitales SAT - Mexico C# 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. |
Respuesta: Facturas Digitales SAT - Mexico C# Ya encontre la solucion... El problema era que no estaba mandando la cadena original, el codigo funciona perfectamente... |
Respuesta: Facturas Digitales SAT - Mexico C# Chequen la info de esta pagina, http://www.jensign.com/opensslkey/index.html de ahi pueden sacar lo necesario para leer la llave privada de el archivo .key directamente desde C# y generar el RSACryptoServiceProvider Suerte |
Respuesta: Facturas Digitales SAT - Mexico C# Saludos, hasta hace unos dias lograba enviar satisfactoriamente los certificados en al validador del SAT, a partir del fin de semana pasado me empezo a validar campos que antes no hacia, como que el numero exterior y la localidad iban nullas, despues de buscarle encontre que habian nuevos certificados de pruebas los baje pero me marca error de que el sello no es valido. Saben ustedes algo de esto?, si ha cambiado algo en validaciones?. Saludos. Hugo Luna |
Respuesta: Facturas Digitales SAT - Mexico C# Solo quiero agradecer a todas las personas que han participado y aportado sus conocimientos en este foro, he leido y seguido sus recomendaciones y funcionan a la perfección, ya he podido validar en la pagina del SAT. Mil gracias!!! |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
Código: MD5 md5Hasher = new MD5CryptoServiceProvider(); Ejemplo de Cadena Original: ||2.0|ABCD|2|03-05-2010T14:11:36|49|2008|INGRESO|UNA SOLA EXHIBICIÓN| 2000.00|00.00|2320.00|PAMC660606ER9|CONTRIBUYENTE PRUEBASEIS PATERNOSEIS MATERNOSEIS|PRUEBA SEIS|6|6|PUEBLA CENTRO|PUEBLA|PUEBLA|PUEBLA||MÉXICO| 72000|CAUR390312S87|ROSA MARÍA CÁLDERON URIEGAS|TOPOCHICO|52| JARDINES DEL VALLE|NUEVO LEÓN|MEXICO|95465|1.00|SERVICIO|01| ASESORIA FISCAL Y ADMINISTRATIVA|2000.00|IVA|16.00|320.00|| Resultado de la digestión MD5 como HEX: 03abe73de4ca428816de4af6f6f737a7 Ami me da como resultado: b64df6b8cbd7031c53ba5a1fe6ae4ab5 ¿Alguna idea? |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
|
Respuesta: Facturas Digitales SAT - Mexico C# Asi es Ivan, ahi tienes que colocar la cadena Original como string. Saludos. |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
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(); |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
|
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
Código: string xmlns = "http://www.sat.gob.mx/cfd/2"; así ya tendrás la estructura general del documento (nodos) y sólo te faltará llenarlo (atributos y propiedades)... |
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. |
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> |
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! |
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(); Código: comprobante.version = "2.0"; Código: ComprobanteEmisor comprobanteEmisor = new ComprobanteEmisor(); Código: using System.xml; Espero sirva. A la orden para dudas, correcciones u objeciones. Saludos! |
Respuesta: Facturas Digitales SAT - Mexico C# Me faltó decir: Buscar el xml en la ruta que pusieron en "RutaConNombreArchivoSinExtension" |
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 |
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 |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
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! |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
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. |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
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(); } |
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 |
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. |
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 |
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] |
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 + "'"); |
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 |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
|
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 |
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. |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
|
Respuesta: Facturas Digitales SAT - Mexico C# Este es el código que uso para generar el sello digital: Código: . estoy en esa parte y no se que mas hacer :S |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
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(); } |
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 |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
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? |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
Código: string tempFile = "./ostring.txt"; |
Respuesta: Facturas Digitales SAT - Mexico C# Cita:
Disculpa...funciona al 100 tu sistema??? Responde pronto |
Respuesta: Facturas Digitales SAT - Mexico C# Que tal, antes que nada un saludo a todos, esta es la primera vez que escribo en este foro, pero realmente necesito ayuda. Estoy atorado con la generacion del archivo con la cadena original, ya que al guardarlo o me lo guarda en ansi o utf8 pero con bom. El problema es que si guardo el texto de la cadena original dentro de la variable si me lo guarda sin bom, pero si la variable que tiene la cadena original es producto de las concatenaciones ya no me funciona, espero me haya dado a entender, por ejemplo: Funciona: strCadOriginal = "||2.0|FAPBL|38|20-12-2010T11:..." No funciona: strCadIriginal = strVersion & strSerie & ... Sabran por que es esto, tengo mas de tres dias con esto y no puedo resolverlo, les agradezco su atencion. Gracias Cita:
|
Respuesta: Facturas Digitales SAT - Mexico C# Que tal, antes que nada un saludo a todos, esta es la primera vez que escribo en este foro, pero realmente necesito ayuda. Estoy atorado con la generacion del archivo con la cadena original, ya que al guardarlo o me lo guarda en ansi o utf8 pero con bom. El problema es que si guardo el texto de la cadena original dentro de la variable si me lo guarda sin bom, pero si la variable que tiene la cadena original es producto de las concatenaciones ya no me funciona, espero me haya dado a entender, por ejemplo: Funciona: strCadOriginal = "||2.0|FAPBL|38|20-12-2010T11:..." No funciona: strCadIriginal = strVersion & strSerie & ... Sabran por que es esto, tengo mas de tres dias con esto y no puedo resolverlo, les agradezco su atencion. Gracias |
Respuesta: Facturas Digitales SAT - Mexico C# Ve en el foro de .net http://www.forosdelweb.com/f29/factu...mexico-806167/ Como recomendacion, es mejor generar la cadena original mediante la transformacion via XSLT con el archivo publicado x el sat. Queda en 3 o 4 lineas y te evitas problemas. |
Respuesta: Facturas Digitales SAT - Mexico C# Hola, solo para agradecer a todos y de paso postear mis resultados. No se como este esto, pero ahi va mi solucion que me genera un sello valido:
Código C#:
Ver original [URL="http://www.forosdelweb.com/f78/facturas-digitales-sat-mexico-c-803607/index3.html#post3573197"]Aqui esta el post en el que el usuario J_L_A menciona como generar las clases a partir del archivo [B]cfdv2.xsd[/B][/URL] Gracias a todos. |
Respuesta: Facturas Digitales SAT - Mexico C# Gracias a todos los que ponen sus dudas y soluciones he logrado crear mi comprobante fiscal digital, de aquí y de otras páginas, les dejo mi código por si a alguien le sirve, es visual basic 2008: Cadena Original: Cadena = “|” SGL_Query = “SELECT EFA_CEFA,EFA_NUME,CONVERT(VARCHAR,EFA_FECH,126),CT E_NORS,CTE_RFCC,CTE_CALL,CTE_NEXT,CTE_NINT,CTE_COL O,” SGL_Query = SGL_Query & “PDM_DESC, ENT_DESC, PAI_DESC, CTE_CODP ” SGL_Query = SGL_Query & “FROM TDFCTEFA, TCFCTCTE, TCRHUPAI, TCRHUPDM, TCRHUENT ” SGL_Query = SGL_Query & “WHERE EFA_CCTE = CTE_CCTE And CTE_CPDM = PDM_CPDM And CTE_CENT = ENT_CENT ” SGL_Query = SGL_Query & “And CTE_CPAI = PAI_CPAI ” SGL_Query = SGL_Query & ” AND EFA_CEFA=” & Val(Txt_Clave.Text) Call Ejecuta(sat, SGL_Query) Do Until TraeSig(sat) = NOMOREROWS Cadena = Cadena + “|2.0|A” Cadena = Cadena + “|” + Trim(DameDato(sat, 2)) Cadena = Cadena + “|” + Trim(DameDato(sat, 3)) Cadena = Cadena + “|174911|2010|ingreso|efectivo|Pago en una sola exhibicion|subtotal|0|grantotal” Cadena = Cadena + “|JSI060303UA9|JF SISTEMAS, S. A. DE C. V.|MIRAVEREDA|23|B|CUMBRIA” Cadena = Cadena + “|CUAUTITLAN IZCALLI|ESTADO DE MEXICO|MEXICO|54740″ Cadena = Cadena + “|” + Trim(DameDato(sat, 5)) Cadena = Cadena + “|” + Trim(DameDato(sat, 4)) Cadena = Cadena + “|” + Trim(DameDato(sat, 6)) If Trim(DameDato(sat, 7)) + Trim(DameDato(sat, 8)) “” Then Cadena = Cadena + “|” + Trim(DameDato(sat, 7)) + Trim(DameDato(sat, 8)) Else Cadena = Cadena + “|” End If Cadena = Cadena + “|” + Trim(DameDato(sat, 9)) Cadena = Cadena + “|” + Trim(DameDato(sat, 10)) Cadena = Cadena + “|” + Trim(DameDato(sat, 11)) Cadena = Cadena + “|” + Trim(DameDato(sat, 12)) Cadena = Cadena + “|” + Trim(DameDato(sat, 13)) Loop SGL_Query = “SELECT DFE_CANT,DFE_CONC,DFE_IMPO,DFE_CANT*DFE_IMPO,DFE_I IVA*DFE_CANT,DFE_CONS ” SGL_Query = SGL_Query & “FROM TDFCTDFE WHERE DFE_CEFA=” & Val(Txt_Clave.Text) Call Ejecuta(sat, SGL_Query) Dim ImpIva As Double ImpIva = 0 GTotal = 0 Subtotal = 0 Do Until TraeSig(sat) = NOMOREROWS Cadena = Cadena + “|” + Trim(DameDato(sat, 1)) Cadena = Cadena + “|PZA” Cadena = Cadena + “|” + Trim(DameDato(sat, 6)) Cadena = Cadena + “|” + Trim(DameDato(sat, 2)) Cadena = Cadena + “|” + Trim(Str(CorrigeMoneda(DameDato(sat, 3)))) Cadena = Cadena + “|” + Trim(Str(CorrigeMoneda(DameDato(sat, 4)))) ImpIva = ImpIva + Val(CorrigeMoneda(DameDato(sat, 5))) Subtotal = Subtotal + CorrigeMoneda(DameDato(sat, 4)) GTotal = GTotal + CorrigeMoneda(DameDato(sat, 4)) + CorrigeMoneda(DameDato(sat, 5)) Loop Cadena = Cadena + “|IVA|” + Trim(Str(IIva * 100)) Cadena = Cadena + “|” & Trim(Str(ImpIva)) Cadena = Cadena + “|” & Trim(Str(ImpIva)) Cadena = Cadena + “||” Cadena = Replace(Cadena, “subtotal”, Trim(Str(Subtotal))) Cadena = Replace(Cadena, “grantotal”, Trim(Str(GTotal))) System.IO.File.WriteAllText(“C:\SARV3.1J\ELE\caden a_orig.txt”, Cadena) archivo XML: Dim ANIO As Long ANIO = 0 SGL_Query = “SELECT YEAR(EFA_FECH) FROM TDFCTEFA WHERE EFA_CEFA=” & Val(Txt_Clave.Text) Call Ejecuta(sat, SGL_Query) Do Until TraeSig(sat) = NOMOREROWS ANIO = Val(DameDato(sat, 1)) Loop Dim W As New XmlTextWriter(“C:\SARV3.1J\ELE\” & Txt_Clave.Text & “.xml”, System.Text.Encoding.UTF8) W.WriteStartDocument() Shell(“C:\OpenSSL-Win32\bin\openssl.exe pkcs8 -inform DER -in C:\SARv3.1J\ELE\JSI060303UA9_0903250930.key -passin pass:chela2009 -out C:\SARV3.1J\ELE\JSI.key.pem”) System.Threading.Thread.Sleep(500) Shell(“C:\OpenSSL-Win32\bin\openssl.exe x509 -inform DER -outform PEM -in C:\SARv3.1J\ELE\jsi060303ua9_1010061243s.cer -pubkey -passin pass:chela2009 -out C:\SARV3.1J\ELE\JSI.cer.pem”) System.Threading.Thread.Sleep(500) If ANIO 0 Then W.WriteStartElement(“Impuestos”) W.WriteAttributeString(“totalImpuestosTrasladados” , Trim(Str(ImpIva))) W.WriteStartElement(“Traslados”) W.WriteStartElement(“Traslado”) W.WriteAttributeString(“impuesto”, “IVA”) W.WriteAttributeString(“tasa”, Trim(Str((IIva * 100)))) W.WriteAttributeString(“importe”, Trim(Str(ImpIva))) W.WriteEndElement() ‘finaliza traslado W.WriteFullEndElement() ‘finaliza traslados W.WriteFullEndElement() ‘finaliza impuestos End If W.WriteStartElement(“Impresion”) W.WriteAttributeString(“CadenaOriginal”, Cadena) W.WriteFullEndElement() ‘………………………………… W.WriteFullEndElement() ‘finaliza comprobante W.WriteEndDocument() ‘finaliza documento W.Flush() W.Close() obviamente yo uso mi base de datos, espero entiendan el código y lo adapten al suyo. |
Respuesta: Facturas Digitales SAT - Mexico C# Que tal grupo, como les va ? ya tenia mucho que no entraba pero me gustaria saber si alguien ya sustituyo el metodo MD5 por SHA-1 en C# . Gracias a todos y seguimos en contacto. Saludos. |
Respuesta: Facturas Digitales SAT - Mexico C# Revisa esta clase [URL="http://msdn.microsoft.com/es-es/library/system.security.cryptography.sha1cryptoserviceprov ider%28VS.80%29.aspx"]SHA1CryptoServiceProvider[/URL] |
Respuesta: Facturas Digitales SAT - Mexico C# Hola a todos, hace poco empece con esto de la facturacion electronica, y gracias a todos sus aportes, rapidamente he conseguido generar un sello valido en C# Me gustaria que me asesoraran en que pasos siguen, por el momento estoy abordando los siguientes: 1. Crear xml de la factura con sello digital 2. Reporte mensual 3. Pdf para mostrar la factura (todavia investigando) pero no se que mas sigue :( Agradeceria mucho tips, que es eso de la norma para respaldarlas, que otros procesos hay, consideraciones... casi no quiero nada jeje y de verdad muchas gracias a todos |
Respuesta: Facturas Digitales SAT - Mexico C# A mi tambien me esta funcionando el código que mencionas, pero ahora ocupo el 'validador' o sea leer del XML el certificado, leer el sello digital y leer la cadena y validar con esos tres datos, he podido leer los datos pero la funcion en c# rsa.VerifyData(); no me funciona, te anexo el codigo para que le eches un ojo, en teoria deberia de funcionar: public string ValidaSelloDigital2(string selloDigital, string cert, string cadena) { try { byte[] sello_byte = Convert.FromBase64String( selloDigital); byte[] cert_byte = Convert.FromBase64String( cert); X509Certificate2 certificado = new X509Certificate2( cert_byte); //initialze the byte arrays to the public key information. byte[] pk = certificado.GetPublicKey(); //Create a new instance of RSACryptoServiceProvider. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.PersistKeyInCsp = false; //Get an instance of RSAParameters from ExportParameters function. RSAParameters RSAKeyInfo = rsa.ExportParameters(false); //Set RSAKeyInfo to the public key values. RSAKeyInfo.Modulus = pk; //Import key parameters into RSA. rsa.ImportParameters(RSAKeyInfo); byte[] cadena_byte = System.Text.Encoding.UTF8.GetBytes(cadena); System.Security.Cryptography.SHA1CryptoServiceProv ider x = new System.Security.Cryptography.SHA1CryptoServiceProv ider(); byte[] data = x.ComputeHash(cadena_byte); System.Security.Cryptography.MD5CryptoServiceProvi der x2 = new System.Security.Cryptography.MD5CryptoServiceProvi der(); byte[] data2 = x2.ComputeHash(cadena_byte); bool result = rsa.VerifyHash(data2, CryptoConfig.MapNameToOID("MD5"), sello_byte); bool result2 = rsa.VerifyHash(data, CryptoConfig.MapNameToOID("SHA1"), sello_byte); string ret = "Sello inválido."; if (result) { ret = "Sello válido con digestion MD5 " + hash_md5(cadena); } else { if (result2) { ret = "Sello válido con digestion SHA1 " + hash_sha1(cadena); } } return ret; } catch (Exception ex) { return "Error al desencriptar el sello digital " + ex.ToString(); } } Cita:
|
La zona horaria es GMT -6. Ahora son las 09:50. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.