Facturación electrónica (2)

Buen día a ti que me lees ...

En esta ocasión y ostentando que por fin he echado a volar la facturación electrónica con PHP y MySQL, a través de un PAC quiero listar los pasos que realice y que espero te sirva de alguna manera. 

Antes de comenzar aclaro que cada uno los pasos lleva detalles, supongo muchos de mis colegas ya los conocen y otros tal vez no, pero no nos desesperemos aun falta un par de meses para diciembre. Si lo hacen con Java o con  dll , les diré "es lo mismo pero revolcado". :) 

PASO 0: Leer el anexo 20, aunque no lo entiendas del todo ahora, cuando estés programando sentirán que la luz en el camino es este anexo del SAT.

PASO 1: Crear nuestra base de datos con los requerimientos del emisor y el receptor (Tal y como lo pide el anexo 20, ahí pueden ver los campos que son requeridos y los que son opcionales, pero que puedes incluir si así lo prefieres).

PASO 2: Generar Cálculos de facturación y almacenarlos correctamente con los datos requeridos en el anexo 20 (Si ya tienes un proceso de facturación, solo verifica que estén completos los datos).

PASO 3: Leer y aprender como configurar OPENSSL en servidor Linux / windows, instalarlo y hacer unas pruebas de encriptación ( Asegúrese de que esta encriptando y desencriptando correctamente, para eso yo utilice ejemplos de cadenas originales, abajo pongo links de ayuda de los cuales aprendí bastante).
*Tip: La digesta SHA1 de una cadena original debe ser igual a la que regresa el verificador del SAT.

PASO 4: Asegúrate de que tu Openssl tenga permisos en tu servidor (hosting).

PASO 5: Contrata o configura una conexión segura. (HTTPS).

PASO 6: Recuerda la facturación electrónica lee UTF-8 , por lo que te sugiero cuidar los caracteres especiales (como ñ, tildes, entre otros) que te puedan arrojar caracteres extraños y rompan con la limpieza de los datos que vas a encriptar y enviar al pac. 

PASO 7: Una vez que tienes bien tu factura, deberás general la cadena original (UTF-8, recuerda), cuida los espacios en blanco, los saltos de carro (\n \r) , puedes revisarla con un lector hexadecimal si quieres estar seguro de que no se cuela algún carácter oculto. 
* Respeta la estructura del SAT, es muy importante,  ya que con algunos PAC sus validadores no son muy flexibles, si tienes dudas del orden pregúntale a tu PAC.

PASO 8:  Sella tu cadena original con Openssl y SHA1. Algunos lo hacen con las funciones nativas de php, personalmente use la clásica, exec(" "). Es tu elección, siempre y cuando la disgesta coincida como lo menciono en el paso 3.

PASO 9: Crea tu XML con el sello de la cadena original y certificado del emisor (Insisto, revisa que la secuencia sea igual que tu cadena original y esta a su vez  respete los requerimientos del anexo 20).

PASO 10: Si sientes que ya no puedes más cuéntaselo a quien más confianza le tengas, no te exasperes. Escribí este paso para que respires un poco jeje

PASO 11: Los XML son sencillos de armar, solo verifica que si tu estado maneja impuestos especiales, los indiques antes del complemento, si la respuesta es si y no lo habías considerado regresa al paso 0.

PASO 12: Estas casi en la recta final, ahora que ya tienes el XML, hay que enviarlo al PAC por Webservices, no necesitas saber mucho, normalmente tu proveedor te enviara un ejemplo de como consumirlo y  lo único que tendrás que indicar es la ruta donde almacenaste tu XML a timbrar y claro bien importante la ruta donde guardaras la respuesta con el XML timbrado. 

PASO 13:  Normalmente el cliente pedirá un pdf  (o imprimirlo), en ambos casos necesitaras generar el QR (Que crees, también viene en el anexo 20) y agregar las leyendas de una factura oficial.

PASO 14: Ya tienes la factura electrónica!!!. No olvides de adjuntar xml y pdf de tu factura en el correo que le enviaras al receptor. 

Listo es todo, la verdad leído no parece tan difícil verdad? ... 

Aquí abajo unos links, si tienen dudas dejen sus comentarios, si se me escapa algo disculpen, he hecho esto en un espacio libre que tuve. Más que pronto les doy más detalles de cada paso si les parece necesario.

Recursos:



No me queda más por decir que gracias a los que directa e indirectamente me ayudaron a tener este nuevo "conocimiento" que ahora te comparto (Gracias Internet) ... Sonríe !


Comentarios

  1. PHP QR code se base en el estándar ISO/IEC 18004:2006 tengo entendido. Aun así es aceptado por el SAT?

    ResponderEliminar
    Respuestas
    1. Creo que te respondí a tu correo. En resumen, no leí en el anexo 20 algún tipo de restricción y/o requisito respecto al estándar. Saludos :)

      Eliminar
    2. Gracias por responder a mi pregunta.

      Eliminar
    3. Las impresiones de los comprobantes fiscales digitales a través de Internet deben incluir un código de barras bidimensional conforme al formato de QR Code (Quick Response Code) descrito en el estándar ISO/IEC18004, con base a los siguientes lineamientos de representación gráfica.
      a) Código de barras bidimensional QR, con base al estándar ISO/IEC 18004:2000, conteniendo los siguientes datos en el siguiente formato:
      1. RFC del emisor
      2. RFC del receptor
      3. Total (a 6 decimales fijos)
      4. Identificador único del timbre (UUID) asignado


      * Tuve que revisar el anexo y recordé tu pregunta, pero según este link http://www.validacfd.com/phpbb3/viewtopic.php?f=7&t=409 .. no deberíamos tener problemas por la versión :)

      Eliminar

Publicar un comentario

Entradas populares de este blog

Nuevos desarrollos

Llegada la edad ..