La empresa Facturación Moderna S.A de C.V, es un Proveedor Autorizado de Certificación (PAC) con número de autorización: 58077 que ofrece los servicios de validación, emisión, resguardo y certificación de CFDI .
Facturación Moderna cuenta con una API SOAP para el servicio de emisión/timbrado de CFDI.
Al contratar con nosotros el servicio de timbrado, te proporcionamos lo siguiente:
La asesoría excluye revisión de código para identificar problemas de lógica, manejo de clases o errores de sintaxis, propios del usuario.
El servicio de timbrado recibe una petición con el archivo a certificar codificado en Base64 y devuelve un objeto con el XML certificado.
A continuación se presenta un diagrama del funcionamiento general de la solución:
TimbreFiscalDigital
en
formato de texto codificado en Base64 .
Diagrama 1: Funcionamiento general.
Para uso del servicio es necesario tener:
El cliente web es solamente de referencia, sólo deberá ser utilizado para realizar pruebas de estructura y contenido de los archivos a timbrar (Layout o XML).
En ambiente real no existe interfaz gráfica, todo debe ser enviado por peticiones SOAP
https://t1demo.facturacionmoderna.com/timbrado/soap
https://t1demo.facturacionmoderna.com/timbrado/wsdl
El método requestTimbrarCFDI
es capaz de certificar cualquier archivo en formato XML o TXT (que cumpla con las estructuras soportadas por el servicio), el cual espera como parámetro un objeto de la siguiente forma:
Propiedad | Tipo | Descripción | Observaciones |
---|---|---|---|
UserPass | String | Contraseña de la conexión | Para el ambiente de pruebas es: b9ec2afa3361a59af4b4d102d3f704eabdf097d4 |
UserID | String | Nombre del usuario de la conexión | Para el ambiende de pruebas es: UsuarioPruebasWS |
emisorRFC | String | RFC del la empresa que emite el comprobante a certificar. | Para el ambiente de pruebas el RFC del emisor deberá ser alguno del siguiente listado: Ver listado de RFC Descargar Certificados de Prueba. |
text2CFDI | String | Archivo fuente a certificar (Layout o XML) codificado en Base64 | Importante El nodo debe estar codificado en
Base64. Puede realizar pruebas de estructura del archivo aquí. Si desea visualizar ejemplos de archivos fuente de clic aquí |
generarPDF (Opcional) | Boolean | True si se desea que el servicio retorne la representación impresa del CFDI en formato PDF. |
Al utilizar está propiedad, el método requestTimbrarCFDI retorna el archivo codificado en Base64 en el nodo pdf .
|
generarCBB (Opcional) | Boolean | True si se desea que el servicio regrese un archivo PNG con el código de barras bidimensional (CBB). |
Al utilizar está propiedad, el método regresa el nodo png en
lugar del nodo pdf
|
A continuación se muestra una petición al método en formato XML para consumir el método requestTimbrarCFDI
con SOAP 1.2
<?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="https://t1demo.facturacionmoderna.com/timbrado/soap" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
<env:Body> <ns1:requestTimbrarCFDI env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <param0 xsi:type="enc:Struct"> <UserPass xsi:type="xsd:string">b9ec2afa3361a59af4b4d102d3f704eabdf097d4</UserPass> <UserID xsi:type="xsd:string">UsuarioPruebasWS</UserID> <emisorRFC xsi:type="xsd:string">RFC del emisor contenido en el archivo</emisorRFC> <text2CFDI xsi:type="xsd:string">Archivo codificado en Base64</text2CFDI> <generarTXT xsi:type="xsd:boolean">false</generarTXT> <generarPDF xsi:type="xsd:string">false</generarPDF> <generarCBB xsi:type="xsd:boolean">false</generarCBB> </param0> </ns1:requestTimbrarCFDI> </env:Body> </env:Envelope>
Una vez realizada la petición en caso de éxito nos devolverá un objeto con las siguientes propiedades
Nodo | Tipo | Descripción | Ejemplos de contenido |
---|---|---|---|
xml | String (Base64) | Contiene el CFDI certificado en formato XML. (Codificado en Base64) | Visualizar/Descargar |
String (Base64) | Contiene la representación impresa del CFDI en formato PDF. (Codificado en Base64) | Visualizar/Descargar | |
txt | String (Base64) | Contiene el nodo TimbreFiscalDigital en formato de
texto. (Codificado en Base64) |
Visualizar/Descargar |
png | String (Base64) |
Contiene CBB en formato PNG, este nodo aparece si la
propiedad generarCBB fue establecidad con True . (Codificado en Base64)
|
Visualizar/Descargar |
La respuesta en formato XML es similar al siguiente ejemplo
<?xml version='1.0' encoding='utf-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="https://t2demo.facturacionmoderna.com/timbrado/soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:requestTimbrarCFDIResponse> <return xsi:type="SOAP-ENC:Struct"> <xml xsi:type="xsd:string">Nodo con el archivo XML codificado en Base64</xml> <txt xsi:type="xsd:string">Nodo con el archivo TXT codificado en Base64</txt> <pdf xsi:type="xsd:string">Nodo con el archivo PDF codificado en Base64</pdf> </return></ns1:requestTimbrarCFDIResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Nota importante:Se ha implementado la siguiente lista con la finalidad de replicar el ambiente productivo en el cual se aplican validaciones de LCO y LRFC.
Actualmente los listados de productivo que emite el SAT contienen la razón social sin régimen capital, por lo que se ha implementado de la misma forma en demo.
MI RAZON SOCIAL (Se omite el S.A de C.V)
Validez Obligaciones
RFC | SCNF | Validez Obligaciones | Nombre | CP |
---|---|---|---|---|
Persona física | ||||
CACX7605101P8 | No | 1 | XOCHILT CASAS CHAVEZ | 10740 |
FUNK671228PH6 | No | 2 | KARLA FUENTE NOLASCO | 83200 |
IAÑL750210963 | No | 3 | LUIS IAN ÑUZCO | 30230 |
JUFA7608212V6 | No | 4 | ADRIANA JUAREZ FERNANDEZ | 29133 |
Persona Moral | ||||
EKU9003173C9 | No | 2 | ESCUELA KEMPER URGATE | 26015 |
H&E951128469 | No | 1 | HERRERIA & ELECTRICOS | 55555 |
IIA040805DZ4 | No | 3 | INDISTRIA ILUMINADORA DE ALMACENES | 29960 |
XIA190128J61 | No | 4 | XENON INDUSTRIAL ARTICLES | 26670 |
OÑO120726RX3 | Si | 2 | ORGANICOS ÑAVEZ OSORIO | 32040 |
El método requestCancelarCFDI
de acuerdo al nuevo esquema de cancelación este metódo sólo realiza la solicitud de cancelación de un CFDI ante el SAT, hay nuevos métodos que se utilizarán de la mano de este, pero
la documentación la tenemos reservada para nuestros usuarios y por lo tanto solo podrán visualizarla una vez que se les entreguen sus accesos
a su panel administrador, desde el cual tenemos documentado todos los métodos relacionados a este proceso.
Nota: En ambiente productivo para poder enviar la solicitud de cancelación, es necesario que el usuario haya cargado previamente sus certificados en la liga: https://developers.facturacionmoderna.com/activar_cancelacion
Propiedad | Tipo | Descripción | Observaciones |
---|---|---|---|
UserPass | String | Contraseña de la conexión | Para el ambiente de pruebas es: b9ec2afa3361a59af4b4d102d3f704eabdf097d4 |
UserID | String | Nombre del usuario de la conexión | Para el ambiende de pruebas es: UsuarioPruebasWS |
emisorRFC | String | RFC con el cuál se desea realizar la conexión, deberá ser el mismo que venga en el archivo a certificar. | En ambiente de pruebas puede utilizar cualquiera de los RFC incluidos en los certificados de prueba, en la sección Kit de ayuda. |
uuid | String | UUID del CFDI que se desea cancelar | |
Motivo | String | Motivo por el cual se cancela la factura. | Opciones: 01 Comprobantes emitidos con errores con relación. 02 Comprobantes emitidos con errores sin relación. 03 No se llevó a cabo la operación. 04 Operación nominativa relacionada en una factura global. |
FolioSustitucion | String | Folio Fiscal del comprobante que lo sustituye. | Requerido cuando Motivo tenga el valor 01 |
A continuación se muestra una petición al método
en formato XML para consumir el
método requestCancelarCFDI
con SOAP 1.2
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://t1demo.facturacionmoderna.com/timbrado/soap" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body><ns1:requestCancelarCFDI> <request xsi:type="SOAP-ENC:Struct"> <UserPass xsi:type="xsd:string">b9ec2afa3361a59af4b4d102d3f704eabdf097d4</UserPass> <UserID xsi:type="xsd:string">UsuarioPruebasWS</UserID> <emisorRFC xsi:type="xsd:string">ESI920427886</emisorRFC> <uuid xsi:type="xsd:string">ABC1147C-D41E-4596-9C3E-45629B097CDB</uuid> <Motivo xsi:type="xsd:string">01</Motivo> <FolioSustitucion xsi:type="xsd:string">ABC1147C-D41E-4596-9C3E-45629B090000</FolioSustitucion> </request> </ns1:requestCancelarCFDI> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
La respuesta en formato XML es similar al siguiente ejemplo
Nuestro servicio de cancelación funciona mediante una cola, la cancelación de un comprobante se realiza de 2 a 3 minutos después de haberlo enviado a cancelar.
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://t1demo.facturacionmoderna.com/timbrado/soap" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body><ns1:requestCancelarCFDIResponse> <return xsi:type="SOAP-ENC:Struct"> <Code xsi:type="xsd:string">GT05</Code> <Message xsi:type="xsd:string">UUID enviado a la cola de cancelancion, espere unos minutos.</Message> </return> </ns1:requestCancelarCFDIResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
La propiedad text2CFDI
enviada en el
método requestTimbrarCFDI
soporta los siguientes
tipos de archivos
Tipo de archivo | Descripción | Ventajas | Ejemplos |
---|---|---|---|
Archivo XML | Archivo XML con las especificaciones requeridas por el SAT basado en el Anexo 20. |
|
XML Versión 4.0
Vigente a partir del 01 de Enero de 2022 XML Versión 3.3 Vigente hasta el 30 de Junio de 2022 |
Archivo de texto (Layout) en formato INI | Archivo de texto simple, contiene los datos básicos para generación de un
Comprobante Fiscal en formato de texto.
Es una estructura propia de Facturación Moderna Soporta sólo los complementos más usados, en caso de requerir alguno en específico deben preguntar al correo wsoporte@facturacionmoderna.com si se tiene o no soportado mediante esta estructura. |
|
TXT Versión 4.0
Vigente a partir del 01 de Enero de 2022 TXT Versión 3.3 Vigente hasta el 30 de Junio de 2022 |
Formato Propio | Si tu sistema genera un archivo TXT o XML con los datos requeridos para generar un comprobante fiscal, podemos analizar si es candidato para que lo procese nuestro servicio. Sólo envía tu solicitud de revisión a nuestra cuenta de: wsoporte@facturacionmoderna.com y una vez analizado te responderemos cual es el costo y los tiempos de implementación para procesarlo. |
Vigente desde el 01 de Enero de 2022 y Única versión válida a partir del 01 de Julio de 2022
Se les recomienda revisar toda la documentación públicada por el SAT y estar al pendiente de las actualizaciones que pública
el mismo, esta versión de CFDI, esta regulada con catálogos y cuenta con validaciones adicionales a las especificadas en el xslt por lo que es importante tambien revisen la matriz de validaciones.
Toda la documentación antes mencionada la localizan en http://omawww.sat.gob.mx/tramitesyservicios/Paginas/anexo_20_version3-3.htm Ir a documentación SAT
El SAT suele actualizar sus ligas, en caso de que la actualmente publicada ya no este en uso, favor de corroborar directamente en el sitio oficial
Tipo de archivo | Tipo de ejemplo | Casos de Uso | Sección distintiva |
---|---|---|---|
Estructura XML definida y regulada por el SAT |
|||
Archivo XML | Estructura general, basada en anexo 20.
XML 4.0 estructura |
|
No aplica |
Archivo XML | Ejemplo de CFDI básico con impuesto trasladado
CFDI 4.0 Ejemplo básico |
|
No aplica |
Archivo XML | Ejemplo de CFDI Global
CFDI 4.0 Emisión Global |
|
Ver ilustración |
Archivo XML | Ejemplo CFDI con complemento nómina 1.2 Revisión C
Comp. de nómina versión 1.2 |
|
No aplica |
Archivo XML | Ejemplo CFDI 4.0 con complemento Pagos 2.0
Ejemplo con 1 sólo pago Ejemplo con + de 1 pago |
|
No aplica |
Archivo XML | Ejemplo CFDI 4.0 con nodo Terceros
Ejm. Acuenta de terceros |
|
AcuentaTerceros |
Estructura TXT |
|||
Archivo TXT | Estructura general definida por Facturación Moderna.
Est. general Descripción Layout |
|
No aplica |
Archivo TXT | Ejemplo de TXT para generar CFDI básico con los datos minimos requeridos
Ejm. Básico |
|
No aplica |
Archivo TXT | Ejemplo para generar CFDI de operación GLOBAL
Ejm. CFDI Global |
|
Ver ilustración |
Archivo TXT | Estructura general para Recibo de 1.2
Estr. TXT de nómina CFDI 4.0 |
|
TXT nómina CFDI 4.0 |
Archivo TXT | Ejemplo CFDI con complemento nómina 1.2 Revisión C
Ejemplo nómina |
|
No aplica |
Archivo TXT | Estructura general para Complemento de pagos 2.0
TXT pagos 2.0 |
|
No aplica |
Archivo TXT | Ejemplo CFDI 4.0 con complemento Pagos 2.0
Ejemplo con 1 sólo pago Ejemplo con + de 1 pago |
|
No aplica |
Facturación moderna no se responsabiliza del entendimiento, interpretación y/o uso por parte de los usuarios de los ejemplos
aqui publicados.
La finalidad de la publicación de esta sección es meramente orientativa, para ayudar a los usuarios a agilizar su integración con el web service, sin embargo en caso de
requerir ajustes o actualizaciones al código de las clases, es 100% responsabilidad de quien lo usa hacerlas.
Estimados usuarios les recalcamos que Facturación Moderna NO tiene ninguna obligación de realizar ajustes y/o actualizaciones a los EJEMPLOS GRATUITOS aquí publicados.
Consulta nuestros ejemplos en GitHub https://github.com/facturacionmoderna
Código | Descripción | Causa |
---|---|---|
FM501 | Detalles de conexión requeridos. | No se está indicando las credenciales de acceso al servicio (userPass, userID). |
FM507 | El RFC de la solicitud no corresponde con el comprobante. | El RFC del emisor proporcionado no coincide con el RFC emisor del layout. |
FM402 | El RFC utilizado no se encuentra en la Lista de Contribuyentes Obligados (LCO). | El RFC del emisor proporcionado aun no está registrado en la lista oficial de contribuyentes obligados del SAT (Actualizado diariamente.) |
301 | El CFDI no cumple con el estándar XML. | El archivo contiene algún error en la estructura del CFDI. |
302 | El sello del emisor es inválido. | Generalmente ocurre cuándo realiza un paso incorrecto en el proceso de sellado o alguna modificación al contenido del XML después de haber generado el sello. |
303 | La serie del certificado utilizado no corresponde al certificado reportado. | El atributo noCertificado no corresponde al contenido del atributo certificado del XML. |
304 | El certificado ha sido revocado. | El certificado utilizado para sellar el comprobante, aparece como revocado en LCO. |
305 | El certificado ha expirado. | El certificado empleado ha superado su vigencia. |
306 | El CFDI fue firmado con una FIEL. | |
307 | El CFDI contiene un timbre previo. | Ocurre cuándo se envía un XML con el nodo timbre incluido o cuándo el contenido del archivo XML es exactamente el mismo a uno previamente certificado. |
307 | El comprobante ya fue timbrado anteriormente. | |
401 | El CFDI tiene más de 72 horas de haber sido expedido. | La fecha de emisión del comprobante ha superado las 72 horas. |
Lo primero que se necesita es tener instalada la librería OpenSSL (programa dedicado a la generación y tratado de claves, certificados y keyStore) para poder utilizar los comandos que nos ayudarán a crear las llaves de nuestros sellos digitales.
Instalar librería:
Debian/Ubuntu: #sudo apt-get install openssl
CentOS, Red Hat: #yum install openssl
Ejecutar las instrucciones:
Archivo key.pem
openssl pkcs8 -inform DER -in nombrearchivo.key -out nombrearchivo.key.pem -passin pass:contraseñaarchivo cer.pem
openssl x509 -inform DER -outform PEM -in ruta/nombreArchivo.cer -pubkey -out ruta/nombreArchivo.cer.pem
Descargar libreria: http://slproweb.com/products/Win32OpenSSL.html
Deberán descargar la versión según su sistema operativo, e instalar.
Ejecutar desde terminal
Archivo key.pem
openssl.exe pkcs8 -inform DER -in ruta/nombreArchivo.key -passin pass:contraseña -out ruta/nombreArchivo.key.pemarchivo cer.pem
openssl.exe x509 -inform DER -outform PEM -in ruta/nombreArchivo.cer -pubkey -out ruta/nombreArchivo.cer.pem
Para poder certificar sus comprobantes a través del consumo de alguno de nuestro métodos de conexión deberá:
2.- Realizar el proceso de pruebas, mandar a revisión evidencia de 3 archivos procesados exitosamente (XML y PDF) al correo wsoporte@facturacionmoderna.com
3.- Esperar a que el área de soporte confirme las pruebas han sido aceptadas.
4.- Concretar la compra, y enviar datos de personas autorizadas para solicitar soporte, datos de empresa o persona titular.
5.- Realizar cambios de datos de conexión a los asignados para pase a producción.