que tal otra vez yo
pero esto de la factura electronica es muy interesante
le he estado batallando ya que la informacion que se proporciona en las paginas esta muy regada
para los que apenas van comenzando les pongo un proceso que me funciono para generar un sello valido "a mano"
todos los procesos que pongo se realizan sin ninguna programacion y sirven solo para desmentir algunas cosas que he visto como que "el validador de sat no sirve" ademas espero les pueda servir como una especie de guia para automatizar el proceso que representa generar el sello de la factura electronica
aqui les va entonces.
tema de donde saco el archivo ejemplo.xml que utilizare para explicar el proceso
http://www.forosdelweb.com/f18/factu...mexico-638882/
Código:
<?xml version="1.0" encoding="UTF-8"?>
<Comprobante fecha="2005-09-02T16:30:00" folio="1" noAprobacion="1" noCertificado="00001000000000000114" sello="cLBps3/cBUFelW/uxxNmKGvxThUva3AjvppfCxioTBlgqttkrV0yjPvRmA2592l7WQfwN1iXCQT4eyRtblXQre37a+EV4+vGuJD5Oah6ED1U/sVP2ak53nH31RhnQQeQN8NV2TtpjKQaNn64doKwVg9SGDn8PpkpzlPBiqH5164=" serie="A" version="1.0">
<Emisor nombre="Industrias del Sur Poniente, S.A. de C.V." rfc="ISP900909Q88">
<DomicilioFiscal calle="Alvaro Obregón" codigoPostal="06700" colonia="Col. Roma Norte" estado="Distrito Federal" localidad="México" municipio="Cuauhtémoc" noExterior="37" noInterior="3" pais="México"/>
<ExpedidoEn calle="Pino Suarez" codigoPostal="95460" colonia="Centro" estado="Nuevo Léon" localidad="Monterrey" municipio="Monterrey" noExterior="23" pais="México"/>
</Emisor>
<Receptor nombre="Rosa María Calderón Uriegas" rfc="CAUR390312S87">
<Domicilio calle="Topochico" codigoPostal="95465" colonia="Jardines del Valle" estado="Nuevo León" localidad="Monterrey" municipio="Monterrey" noExterior="52" pais="México"/>
</Receptor>
<Conceptos>
<Concepto cantidad="10" descripcion="Vasos decorados" importe="200" unidad="Caja" valorUnitario="20"/>
<Concepto cantidad="1" descripcion="Charola metálica" importe="150" unidad="pieza" valorUnitario="150"/>
</Conceptos>
<Impuestos>
<Traslados>
<Traslado importe="52.5" impuesto="IVA"/>
</Traslados>
</Impuestos>
</Comprobante>
voy al validador y le paso el validador a el ejemplo xml
https://www.consulta.sat.gob.mx/SICO...Validador.html
de esto obtengo la cadena original
la digestion md5
y el certificado usado y reportado
el certificado usado es 10001200000000022517
este numero corresponder al primer certificado de muestra del sat
en el ejemplo xml estoy reportando un certificado diferente que tenia ese ejemplo
el usado es el 00001000000000000114
esto tenemos que tomarlo en cuenta para pasarlo en el validador del ejemplo final
la cadena original es
||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||
la digestion es 8aa2b617944427353697e694a2e35a07
los pasos a realizar son los siguientes.
copio mi certificado a la carpeta bin del openssl para que me sea mas facil ejecutar los comandos
en mi caso puse el certificado aaa010101aaa_CSD_01.cer y le cambie el nombre por cer1.cer
tambien copio el archivo aaa010101aaa_CSD_01.key y le cambio el nombre por key1.key
en los certificados del sat nos agregan una contraseña de clave privada que es: a0123456789
esta clave la vamos a ocupar en el siguiente comando para generar la llave privada
en msdos voy a la carpeta bin del openssl
y ejecuto el siguiente comando
openssl pkcs8 -inform der -in key1.key -passin pass:a0123456789 -out key.pem
---no cierro mi ventana msdos para ejecutar mas comandos
esto genera una llave privada
copio la cadena al notepad ++ y la convierto a formato utf sin bom
guardo el archivo en la carpeta bin del openssl y lo nombro cadenaoriginal.txt
ejecuto en mi ventana msdos el siguiente comando
openssl dgst -md5 cadenaoriginal.txt
esto solo es para comprobar que el resultado en la ventana msdos sea 8aa2b617944427353697e694a2e35a07
si es correcto mi cadena esta en el formado utf8
si no fuera asi tendria que revisar que la cadena original no contenga saltos de linea, enters o cualquier caracter extraño.
si ya obtuve la digestion correcta corro el siguiente comando
openssl dgst -md5 -sign key.pem -out sellado.txt cadenaoriginal.txt
este comando lo que hace es que genera un sello binario tomando como base la cadena original y me lo guarda
bueno espero les sirva a los que van comenzando y puedan ir publicando sus avances tambien.
suerte.
en un archivo llamado sellado.txt
despues ejecuto el siguiente comando
openssl enc -base64 -in sellado.txt -out sellado64.txt
aqui lo que hacemos es que el sellado binario lo encriptamos en base 64
ahora modificaremos el archivo ejemplo.xml con el notepad
abrimos tambien el archivo sellado64.txt
en el ejemplo.xml buscamos la etiqueta que dice sello y la reemplazamos con el contenido de el archivo
sellado64.txt guardamos el resultado como ejemplofinal.xml
y lo pasamos en el validador
el resultado debe ser un sello correcto.
en el validador veran que el certificado usado y el repotado no son el mismo
para esto esto podemos modificar el xml y poner en la etiqueta certificado el numero de certificado que
nos indica el validador del sat. aunque esto no es importante aun ya que solo estoy explicando el proceso "a mano" que hay que realizar para obtener sellos validos, algunos compañeros ya publicaron codigo para obtener el numero de serie de un certificado.