Pago con QR dinámico
El QR se genera en el momento del cobro y se muestra en la pantalla de la caja. Único por transacción, expira si no se paga dentro de la ventana de tiempo.
sequenceDiagram
participant C as Caja
participant B as Backend del comercio
participant Y as Yappy API
participant A as Yappy App
C->>B: Iniciar caja
B->>Y: POST /session/device
Y-->>B: token
Note over B,Y: token vive toda la sesión (12h)
C->>B: Iniciar cobro de $X
B->>Y: POST /qr/generate/DYN
Y-->>B: transactionId + hash
B-->>C: Renderiza QR en pantalla
loop Polling cada 2-5 seg
B->>Y: GET /transaction/{id}
Y-->>B: status=PENDING
end
A->>Y: Cliente escanea y paga
B->>Y: GET /transaction/{id}
Y-->>B: status=COMPLETED
B-->>C: Imprime factura
Note over C,B: (Opcional) Al final del turno
C->>B: Cerrar caja
B->>Y: DELETE /session/device Pasos del flujo
-
Apertura de caja: llama a
POST /session/devicecon eldevice.idde la caja. Guarda eltokendevuelto — lo necesitarás en todas las llamadas de esa sesión. -
Generar QR por cada cobro: llama a
POST /qr/generate/DYNcon el desglose del monto. Recibirás untransactionIdy unhash. -
Renderizar el QR: usa el
hashpara generar visualmente el QR en la pantalla. La librería que uses (qrcode.js, ZXing, etc.) toma elhashcomo contenido del QR. -
Polling hasta que el cliente pague: consulta
GET /transaction/{transactionId}cada 2–5 segundos. Detén el polling cuandostatus === "COMPLETED"ostatus === "CANCELLED". -
Timeout de 5 minutos: si el cliente no paga en 5 minutos, cancela la transacción con
PUT /transaction/{transactionId}y genera un nuevo QR si el cliente quiere reintentar. -
Cierre de caja: al final del día, llama a
DELETE /session/devicepara cerrar la sesión.