Skip to content

Electronic Invoice

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.

Operation

Openpay's electronic invoice generation API is part of the functionalities offered by the platform to complement the user's purchase process.

The generation process is performed asynchronously, the trade sends the generation request to Openpay so that the request is validated and the generation process is triggered and the result of the validation will be responded to once the process is launched Generation Openpay will notify the commerce through notification (webhook) the final result of the generation.

 

 

Notifications

To set the URL, go to: Settings -> Webhooks -> Add y seleccionar “Personalizar Eventos” y notificaciones de Facturas creadas y fallidas como se muestra en la siguiente imagen:

 

 

Note: : 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 for invoice:

Action

URL

Método

Invoice Generation

https://{enviroment}/v1/{merchant_id}/invoices/v40

POST

List CFDI

https://{enviroment}/v1/{merchant_id}/invoices/v40

GET

Retrieve CFDI

https://{enviroment}/v1/{merchant_id}/invoices/v40/{UUID}

GET

Cancel Invoice

https://{enviroment}/v1/{merchant_id}/invoices/v40/{UUID}

DELETE

Environments

  • Desarollo: https://dev-api.openpay.mx
  • Tests: Production:
  • Production https://api.openpay.mx

Example:

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

Generation of CFDI

For the generation of CFDI it is necessary to send a Generation of CFDI Object. 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

Object List


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"
}

 

Generation request response

Campos Respuesta

  • invoice_id
  • request_id
  • date
  • status
  • fiscal_status
  • message

Field

Description

invoice_id

Identifier of the invoice sent in the request

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'. - "
       }
 }

Retrieving a 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

Parameters allowed in the request

Field

Description

getUrls

If sent with value true, retrieves the download URL for the PDF and XML. These URL have an expiration date, so they must be used immediately.

creation[gte]

List the CFDI with creation date greater or equal to a given day. YYYY-MM-DD.

creation[lte]

List the CFDI with creation date less or equal to a given day. YYYY-MM-DD.

id

Search CFDI by invoice_id

limit

The maximum number of results to retrieve. The default is 10, and the maximum allowed value is 500.

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.​

CFDI Response

Field

Description

invoice_id

Identifier of the invoice sent in the request

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

Number of Certificate used

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

Download URL for the XML. Will only be returned if getUrls was sent true.

public_pdf_link

Download URL for the PDF. Will only be returned if getUrls was sent true.

link_expiration_date

Expiration date for both URL. Will only be returned if getUrls was sent 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.

 

Requirements

Testing Environment

  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.

Production Environment

  1. Enviar el merchant_id de la cuenta productiva de Openpay
  2. Send the tax information of the issuer of the CFDI
  3. Send the CSD (Digital Seal Certificate): private, public key and password granted by the SAT for the issuance of CFDI
  4. Send the logo of the trade that will be placed in the printed representation of the 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: