Ir al contenido

Boletos QR

Cada reserva confirmada genera un boleto con un QR firmado. La firma (HMAC-SHA256 con BOLETO_HMAC_SECRET) permite validar el QR sin tocar la DB y detectar códigos alterados.

  • Automática: POST /reservas/{id}/confirmar emite el boleto y encola el correo qr_emitido.
  • Manual (reemisión puntual):
Ventana de terminal
curl -X POST http://localhost:5000/boletos/ \
-H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \
-d '{"reservaId":"<uuid>"}'

Si la reserva ya tiene boleto → 409 "La reserva ya tiene boleto".

Ventana de terminal
GET /boletos/?reservaId=<uuid> # boleto de una reserva
GET /boletos/{id} # por id

Pensado para escáners y terminales; responde siempre 200 y decide con valido + motivo:

Ventana de terminal
curl -X POST http://localhost:5000/boletos/verificar \
-H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \
-d '{"codigo":"a1b2c3…"}'
{ "valido": true, "boletoId": "…", "reservaId": "…", "revocado": false }
motivo Significado
codigo_invalido Longitud/formato inválido
no_encontrado No existe ningún boleto con ese código
firma_invalida El código existe pero la firma HMAC no coincide (alterado)
revocado Boleto revocado por operación
Ventana de terminal
curl -H "authorization: Bearer $TOKEN" \
"http://localhost:5000/boletos/{id}/descarga?formato=png" -o boleto.png
# formato: png (default) | pdf
  • PNG arranca con magic bytes 89 50 4E 47; PDF con %PDF-.
  • Cada descarga queda registrada; el historial:
Ventana de terminal
GET /boletos/{id}/descargas
Ventana de terminal
curl -X POST http://localhost:5000/boletos/{id}/revocar \
-H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \
-d '{"motivo":"Boleto reportado perdido"}'
  • El QR deja de verificar: valido: false, motivo: "revocado".
  • Cancelar la reserva también revoca su boleto (revocadoAt queda en el historial).

→ Check-in