QR dinámico en facturas y cupones de pago
Un QR dinámico representa una deuda puntual: tiene su monto, su vencimiento y se paga una sola vez. Es la opción para imprimir en facturas, cupones o resúmenes. Generás un QR por comprobante, el cliente lo escanea con cualquier billetera o app bancaria y PAGOS360 te avisa cuando se pagó.
Hasta que se pague, podés corregir el monto o el vencimiento, o eliminarlo. Más información en QR dinámico.
todas las llamadas usan tu API Key (Authorization: Bearer <API Key>) y se hacen desde tu servidor. Los ejemplos usan sandbox, el entorno de pruebas (https://qr.sandbox.pagos360.com); en producción el host es https://qr.pagos360.com.
El flujo
Creás los QR de tus comprobantes, en lote.
Obtenés el contenido de cada QR y lo imprimís en el comprobante.
Si algo cambia antes del pago, editás o eliminás el QR.
Cuando el cliente paga, recibís un webhook (un aviso automático en tu sistema) y el QR pasa a
Paid.
Paso 1: crear los QR (hasta 10.000 por pedido)
Usá POST /save-qr-data. total_count tiene que coincidir con la cantidad de elementos de data.
Reglas principales:
Campo | Regla |
|---|---|
| Obligatorio. Hasta 25 caracteres, empieza con el ID de tu cuenta y un guion ( |
| Obligatorios. Monto: número, mínimo 10, hasta 2 decimales. Fecha: |
| Opcionales, van juntos. La segunda fecha tiene que ser posterior a la primera y el segundo monto, mayor o igual al primero. |
| Opcional, |
| Obligatorios. Ciudad hasta 15 caracteres; código postal de exactamente 8. |
| Obligatorios. |
| Opcional, hasta 255 caracteres. Usá el número de comprobante: es lo que vas a recibir en el webhook. |
Respuestas:
Respuesta | Significado |
|---|---|
| Se crearon todos. |
| Hay errores de validación. No se crea ningún QR del lote. |
| Esos IDs ya existían. El resto del lote sí se creó. |
|
|
| El cuerpo no es un JSON válido. |
Revisá siempre el code: todas las respuestas llegan con HTTP 200. Ver Importar QR (hasta 10.000 ítems).
Más de 10.000 QR: importación por archivo
Para lotes de hasta 100.000 QR, subís un archivo y el resultado llega por webhook.
1. Pedí una URL de carga. Vence a los 60 segundos.
2. Subí el archivo con PUT a esa URL. Respetá el orden de las claves: webhook_url, total_count y data. Incluí siempre webhook_url: es obligatorio para que el archivo se procese.
Una respuesta HTTP 200 sin cuerpo indica que el archivo se subió.
3. Esperá el webhook en webhook_url:
type puede ser batch_imported (todo OK), batch_partial_rejected (algunos QR no se crearon) o batch_total_rejected (no se creó ninguno). Si es un rechazo parcial, consultá los errores con el id del payload, de a 10.000 por página:
Cada error indica el QR y los códigos de los campos que fallaron (por ejemplo, FAC000125;E10;E11). La tabla de códigos está en Importar QR (hasta 100.000 ítems).
Paso 2: imprimir el QR
Consultá cada QR con GET /status/{qr_id} y usá el campo string para generar la imagen con cualquier librería de códigos QR.
obtené el string de /status para imprimir exactamente lo que guardó PAGOS360. También podés armarlo vos siguiendo el formato de QR dinámico.
Paso 3: editar o eliminar antes del pago
Editar con POST /edit-qr/{qr_id}. Funciona con QR dinámicos en Pending. Enviá todos los campos obligatorios, también los que no cambian:
La nueva fecha tiene que ser de hoy en adelante y no puede ser anterior a la que ya tenía el QR.
Se pueden editar
multiple_payment,description,payer_name,payer_email,external_reference,first_*ysecond_*. No se pueden editarexpiration_time,citynipostal_code.Respuesta correcta:
[{"code": "H005", "message": "Ok"}]. Si el QR no está enPending:F005. Si no existe o no es dinámico:F004.
Para varios QR a la vez, usá Editar QR (hasta 10.000 ítems).
Eliminar con DELETE /delete-qr/{qr_id}. Funciona con QR en Pending. Una vez eliminado, el QR ya no se puede pagar.
Para varios QR a la vez, usá Eliminar QR (hasta 10.000 ítems).
Paso 4: enterarte del pago
Webhook. Cuando se paga un QR, PAGOS360 registra una solicitud de pago pagada y envía el webhook paid de la entidad payment_request, con el external_reference del QR. Ver Webhooks.
Consulta. GET /status/{qr_id} devuelve status: "Paid" y paid_at (solo la fecha, DD-MM-AAAA). Estados posibles: Pending, Paid, Refunded, Deleted. Ver Consultar QR.
Vencimientos
Hasta
first_due_dateinclusive se cobrafirst_total. Después, si hay segundo vencimiento, se cobrasecond_totalhastasecond_due_dateinclusive.Con
expiration_time, el QR vence el día defirst_due_datea esa hora.Pasado el último vencimiento, la billetera no puede cobrarlo.
para volver a cobrar un QR vencido, editá sus fechas mientras siga en Pending. No hay un estado "vencido": un QR vencido sigue figurando como Pending.