Requisitos CFDI 4.0
En Abril del 2023, el SAT liberó la nueva versión 4.0 de CFDI, la cual sustituye a la versión 3.3, que estaba vigente desde 2017.
Derivado al cambio por parte del SAT, se actualiza la emisión de CFDI, incluyendo los siguientes ajustes mandatorios a nuevas validaciones y funcionalidades, correspondientes a la versión 4.0:
- Actualización e integración del nombre y código postal del domicilio fiscal del emisor y del receptor.
- Se debe incluir el régimen fiscal del receptor.
- Se deberá especificar el régimen fiscal.
- Se debe registrar si la operación es objeto de impuestos.
- Se debe identificar operaciones de exportación.
Funcionamiento
El API para generación de factura electrónica de Openpay es parte de las funcionalidades que ofrece la plataforma para complementar el proceso de compra del usuario.
El proceso de generación se realiza de manera asíncrona, el comercio envía la petición de generación a Openpay para que se valide la petición y se dispare el proceso de generación y se tendrá como respuesta el resultado de la validación, una vez que se lanza el proceso de generación Openpay notificará al comercio a través de notificación (webhook) el resultado final de la generación.
Notificaciones
Para configurar la URL, ir a: Configuraciones -> Webhooks -> Agregar y seleccionar “Personalizar Eventos” y notificaciones de Facturas creadas y fallidas como se muestra en la siguiente imagen:

Nota: : La sección de eventos de “Facturas” solo estará disponible hasta que en su cuenta de Openpay se haya activado la API de facturación.
Endpoints
Los servicios de facturación se encuentran disponibles dentro de la API de Openpay y requieren la misma autenticación de los otros servicios. Para más información sobre la autenticación consulte: http://www.openpay.mx/docs/api/?#autenticaci-n
Endpoints para facturación:
Acción
URL
Método
Generación de Factura
https://{enviroment}/v1/{merchant_id}/invoices/v40
POST
Listado de Facturas
https://{enviroment}/v1/{merchant_id}/invoices/v40
GET
Obtención de Factura
https://{enviroment}/v1/{merchant_id}/invoices/v40/{UUID}
GET
Cancelar Factura
https://{enviroment}/v1/{merchant_id}/invoices/v40/{UUID}
DELETE
Ambientes:
- Desarollo: https://dev-api.openpay.mx
- Pruebas: https://sandbox-api.openpay.mx
- Producción: https://api.openpay.mx
Ejemplo:
POST:
https://sandbox-api.openpay.mx/v1/mzdtln0bmtms6o3kck8f/invoices/v40
DELETE:
https://sandbox-api.openpay.mx/v1/mzdtln0bmtms6o3kck8f/invoices/v40/92ACB752-0F17-427F-A007-A63DFC612036
Generación de CFDI
Para la generación de CDFI es necesario enviar un Objeto Generacion de CFDI. Los campos de este objeto deberán ser enviados en un mensaje JSON realizando una petición HTTP POST a la URL: https://{enviroment}/v1/{merchant_id}/invoices/v40
Lista de Objetos
- Objeto DoctoRelacionado
- Objeto Concepto
- Objeto Impuesto
- Objeto Receptor
- Objeto Relacionado
- Objeto Cfdi Relacionado
- Objeto Complementos
- Objeto Complemento Aerolíneas
- Objeto Aerolíneas Cargo
- Objeto Complemento Pago
- Objeto Complemento Donatarias
Ejemplos de petición de emisión de factura:
{
"lugar_expedicion": "37800",
"moneda": "MXN",
"total": 100,
"tipo_de_cambio": 1,
"forma_pago": "28",
"metodo_pago":"PUE",
"invoice_id":"010101010",
"conceptos: [
{
"clave":"01010101",
"identificador":"1",
"cantidad":1,
"clave_unidad":"18",
"unidad":"1","descripcion":"concepto uno",
"valor_unitario":100,
"importe":100,
"descuento":0,
"objeto_imp":"01",
"traslados":null,
"retenciones":null
}
],
"receptor":{
"rfc": "XIQB891116QE4",
"nombre": "BERENICE XIMO QUEZADA",
"uso_cfdi": "G03",
"domicilio_fiscal": "57424",
"email":"victor.gomez@openpay.mx",
"regimen_fiscal": "606"
}
}
{ "subtotal":86.21,
"total_trasladados":13.79,
"impuestos_traslado":[
{
"impuesto":"002",
"tipo_factor":"Tasa",
"tasa":0.16,
"importe":13.79
}
],
"total":100,
"tipo_de_cambio":1,
"forma_pago":"28",
"conceptos":[
{
"clave":"87631801",
"clave_unidad":"D48",
"identificador":"80111821",
"cantidad":1,
"descripcion":"204: prueba trxch1vcasicofbdsav5",
"valor_unitario":86.21,
"importe":86.21,
"objeto_imp":"02",
"traslados":[
{
"impuesto":"002",
"base":86.21,
"tipo_factor":"Tasa",
"tasa":0.16,
"importe":13.79
}
]
}
],
"lugar_expedicion":"04000",
"moneda":"MXN",
"receptor":{
"nombre":"JOSE MARIA MORFIN CASTILLEJOS",
"rfc":"MOCM680926D64",
"email":"jd@openpay.mx",
"uso_cfdi":"G03",
"domicilio_fiscal":"04100",
"regimen_fiscal":"605"
},
"invoice_id":"5665-1684346946",
"metodo_pago":"PUE"
}
Respuesta de solicitud de generación
Campos Respuesta
- invoice_id
- request_id
- date
- status
- fiscal_status
- message
Campo
Descripción
invoice_id
Identificador de la factura enviado en la solicitud
request_id
POST
date
POST
status
POST
fiscal_status
POST
message
POST
Ejemplos respuesta petición:
{
"invoice_id": "order1234",
"request_id": "7edd3834-81a7-4609-ac80-c0fd415c5723",
"date": "2016-04-25T12:14:52-05:00",
"status": "ok",
"fiscal_status": "active",
"message": "Cfdi generation started"
}
Ejemplos respuesta webhook:
{
"type": "invoice.failed",
"event_date": "2023-05-17T11:34:37-06:00",
"invoice_data": {
"invoice_id": "5665-1684344813",
"creation_date": "2023-05-17T11:33:33-06:00",
"receiver_rfc": "MOCM680926D64",
"total": 100,
"subtotal": 86.21,
"status": "error",
"fiscal_status": "active",
"message": "cvc-complex-type.4: El atributo 'Base' debe aparecer en el elemento 'Traslado'. - "
}
}
Obtención de un CFDI
Para obtener los datos de una factura exitosa, adjuntar el UUID al enviar un GET a la URL del API de facturación. Esto obtendrá los datos de un solo CFDI, con la opción de obtener las URL de descargas para el PDF y el XML
Parámetros aceptados en la petición
Campo
Descripción
getUrls
Si el valor es true, obtiene las URL de descarga para el PDF y el XML. Estas URL tienen un tiempo de expiración por lo que deberán usarse inmediatamente.
creation[gte]
Obtener CFDI con fecha de creación mayor o igual al día indicado. YYYY-MM-DD
creation[lte]
Obtener CFDI con fecha de creación menor o igual al día indicado. YYYY-MM-DD
id
Busca CFDI por su invoice_id
limit
Indica el número de resultados a obtener en el API, valor máximo 500. 10 por defecto.
getUrls
Si el valor es true, obtiene las URL de descarga para el PDF y el XML. Estas URL tienen un tiempo de expiración por lo que deberán usarse inmediatamente.
Respuesta de CFDI
Campo
Descripción
invoice_id
Identificador de la factura enviado en la solicitud
creation_date
Fecha en la que se solicitó la generación / Fecha en la que se generó el documento
issue_date
Fecha en que se envió a timbrar el CFDI / Fecha en laque se timbró el documento
uuid
UUID único del CFDI / Número de folio fiscal
certificate_number
Número de certificado usado
receiver_rfc
RFC del Receptor Registros / RFC del Receptor
total
Total del CFDI / Monto total
subtotal
Subtotal del CFDI / Monto Subtotal
status
PENDING,OK,ERROR
fiscal_status
ACTIVE, CANCELLED
public_xml_link
URL de descarga del XML. Solo se regresa si getUrls se envió con valor true
public_pdf_link
URL de descarga del PDF. Solo se regresa si getUrls se envió con valor true
link_expiration_date
Fecha de expiración de las URL. Regresada solo si getUrls se envió con valor true
Merchants param
- ID para emitir facturas debe ser único: Este parámetro permite que un request no genere una nueva petición,para un proceso de reintentos.
- Habilitar facturación 4.0: Este parámetro actualmente ya se encuentra deprecado, ya no es necesario habilitarlo, todos los comercios emiten en la versión actual 4.0.
- Enviar facturación genérica cuando ocurre un error con el sat: Este parámetro solo se debe habilitar cuando el comercio no desee generar una factura genérica derivado de alguna inconsistencia de datos informado al SAT, de lo contrario se emitirá la factura generica.
Requerimientos
Ambiente de Pruebas
- Enviar el merchant_id de la cuenta de pruebas de Openpay
- Ambientar correctamente el comercio en la tabla de MERCHANTS_INFO con la información del Set de datos.
Ambiente de Productivo
- Enviar el merchant_id de la cuenta productiva de Openpay
- Enviar la información fiscal del emisor del CFDI
- Enviar el CSD (Certificado de Sello Digital): llave privada, pública y contraseña que otorga el SAT para la emisión de CFDI
- Enviar el logotipo del comercio que se colocará en la representación impresa del CFDI (PDF)
Set de pruebas
Datos para pruebas en ambiente DEV, QA, Sandbox
Coleccion Postman facturación de terceros
https://drive.google.com/file/d/17yWvizMZ0cs96TziFkhtoazjWXopu2bB/view?usp=sharing
Facturación comisiones:
Una vez ambientado correctamente el comercio hay que seguir estos pasos:
1.- Acceder como usuario administrador al dashboard.
2.- En la opción de “Configurar Pago automático”
3.- Habilitar todos los días:
4.- En la opción de “avanzadas”, habilitar en Operaciones permitidas “Liquidaciones”
5.- En la sección de “Comercio” agregar una plan de comisiones :
Yo agregue el de default de openpay
6.- Acceder como comercio y generar transacciones por medio del api o link de cobro.
7.- Cambiar la fecha en la tabla de TRANSACTIONS a las transacciones realizadas, por el mes anterior, por ejemplo si es Marzo cambiar la fecha a febrero:
8.- Una vez que se realizaron los ajustes de las fechas, correr mediante el manager el job de liquidaciones. merchant-available-balance. Esperar unos 10 mins
9.- Acceder con el comercio en el menú de “Comisiones” , aparecerá algo así:
10.- Accedemos al detalle con el icono negro que esta al final del registro (Signo de mayor).
11.- Nos mostrará esta pantalla y abajo del total el botón de generar factura, la generamos y debe mostrar un registro como esto al final del proceso.
Errores comunes
Los errores más comunes que emite el SAT al generar la factura son: