Saltar al contenido principal

Recibir la compra

No hay un webhook aparte para n1coCupones. Cuando el comprador paga, llega el mismo evento SuccessPayment que ya usan las demás integraciones de n1co Business, con el cupón o la giftcard dentro de orderDetail.

Empieza por la documentación del webhook

La configuración del endpoint, la llave secreta, la verificación de la firma HMAC, el objeto event y el payload completo de SuccessPayment con su tabla de campos están en Webhook.

Esta página solo agrega lo que es propio de cupones y giftcards.

Qué guardar

Cada elemento de orderDetail puede traer un objeto coupon. Ese es el cupón o la giftcard:

"orderDetail": [
{
"name": "2 tazas de café a elegir + pan artesanal",
"price": "4.00",
"quantity": "1",
"coupon": {
"code": "U6FWUW",
"qrCodeUrl": "https://qr.n1co.shop/?chl=U6FWUW",
"startDate": "2026-01-06T18:00:00",
"endDate": "2026-03-31T18:00:00",
"redemptionLimit": "1",
"redemptionCount": "0",
"status": "Unredeemed"
}
}
]
CampoPara qué
coupon.codeEl código que el cliente presentará. Es la clave con la que después lo validas.
coupon.startDate y coupon.endDateLa ventana de vigencia.
coupon.statusEstado al momento de la compra. Llega como Unredeemed.
quantityCantidad de la línea.

Una línea sin objeto coupon es un producto normal, no un cupón: ignórala para esta integración.

Los valores numéricos viajan como texto

Todo número llega entrecomillado: "quantity": "1", no "quantity": 1. Un parser que espere un tipo numérico fallará.

Giftcards: el monto

Esto solo aplica a las giftcards. Un cupón no aporta un monto a descontar: ya define por sí mismo qué entregas, así que su price es informativo y no interviene en el canje.

En una giftcard, en cambio, price es el valor que vas a aplicar a la cuenta del cliente, y elegir mal el campo significa cobrarle de más.

Tres campos se parecen. Solo uno es el monto de la giftcard
CampoEjemploPor qué
orderDetail[].price"10.00"Usa esteEs el valor de la giftcard: el monto que el comprador eligió.
OrderTotalDetails.total"10.25"Incluye la tarifa de servicio de la compra. Es lo que pagó el comprador, no lo que la giftcard vale. Esa tarifa no es saldo gastable.
OrderTotalDetails.subtotal"10.00"Es el total de la orden. Coincide cuando se compra una sola giftcard, pero deja de servir cuando la orden trae varias.

Guarda ese valor junto al código. Al canjear, el cajero nunca debería teclearlo.

Siguiente paso

Con el código ya en tu base, el cliente puede llegar a canjearlo: Canjear el código.