Facturación electrónica

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.

Funcionamineto generacion factura electrónica

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:

Funcionamineto generacion factura electrónica

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


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

  1. Enviar el merchant_id de la cuenta de pruebas de Openpay
  2. Ambientar correctamente el comercio en la tabla de MERCHANTS_INFO con la información del Set de datos.

Ambiente de Productivo

  1. Enviar el merchant_id de la cuenta productiva de Openpay
  2. Enviar la información fiscal del emisor del CFDI
  3. Enviar el CSD (Certificado de Sello Digital): llave privada, pública y contraseña que otorga el SAT para la emisión de CFDI
  4. 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

Emisores
RFCNombreDomicilio Fiscal Certificados No Certificado
EKU9003173C9 ESCUELA KEMPER URGATE - 20928 - 20914 - 21855 - 31508 Código Postal del comercio https://wiki.finkok.com/lib/exe/fetch.php?media=csd_iia040805dz4_20190617133200.zip 30001000000400002434
IIA040805DZ4INDISTRIA ILUMINADORA DE ALMACENES- 64258 - 63900 - 62964 Código Postal del comercio https://wiki.finkok.com/lib/exe/fetch.php?media=csd_iia040805dz4_20190617133200.zip 30001000000400002447
IVD920810GU2INNOVACION VALOR Y DESARROLLO- 61957 - 61100 - 58000 Código Postal del comercio https://wiki.finkok.com/lib/exe/fetch.php?media=csd_ivd920810gu2_20190617133525.zip 30001000000400002438
MISC491214B86CECILIA MIRANDA SANCHEZ- 64258 - 63900 Código Postal del comercio https://wiki.finkok.com/lib/exe/fetch.php?media=csd_misc491214b86_20190528175539.zip 30001000000400002332
XIQB891116QE4BERENICE XIMO QUEZADA- 57424 https://wiki.finkok.com/lib/exe/fetch.php?media=csd_xiqb891116qe4_20190528180227.zip 30001000000400002336

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:

CódigoDescripciónPosible solución
Error found: [CFDI40147]El campo DomicilioFiscalReceptor del receptor, debe encontrarse en la lista de RFC inscritos no cancelados en el SATRevisar el domicilio fiscal ya sea en la petición de Json o en la tabla de MERCHANTS_INFO
Error found: [CFDI40144]El campo Nombre del receptor, debe encontrarse en la lista de RFC inscritos no cancelados en el SATRevisar las siguientes tablas en caso de comisiones:
● MERCHANTS_INFO.tradename
● MERCHANTS_METADATA_VALUES
En caso de terceros, revisar en el Json que este correcto el nombre y sin espacios.