Ver Mensaje Individual
  #47 (permalink)  
Antiguo 19/07/2010, 13:06
Beak
 
Fecha de Ingreso: febrero-2009
Mensajes: 67
Antigüedad: 15 años, 9 meses
Puntos: 3
De acuerdo Respuesta: Factura electroncia sat mexico

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.