Cobro con Terminal
Flujo completo de un cobro desde el ERP hasta la confirmación.
Diagrama de secuencia
sequenceDiagram
participant Cajero
participant ERP as ERP (Histrix)
participant API as Integration API
participant MP as MercadoPago
participant Terminal as Terminal Point
Cajero->>ERP: Cobra $1500.50
ERP->>API: POST /orders
API->>API: POS → Terminal lookup
API->>API: Monto: 1500,50 → 1500.50
API->>MP: POST /v1/orders
MP-->>API: order_id, status: created
API-->>ERP: 201 { order_id, status: created }
MP->>Terminal: Envía orden
Terminal->>Terminal: Muestra monto
Note over Cajero,Terminal: Cliente acerca tarjeta/QR
Terminal->>MP: Pago procesado
MP->>API: Webhook order.processed
API->>API: Actualiza DB
ERP->>API: GET /orders/:orderId
API->>MP: GET /v1/orders/:id
MP-->>API: status: processed, payments: [...]
API-->>ERP: 200 { status: processed }
ERP->>Cajero: ✅ Pago confirmado
Desde el ERP
1. Crear la orden
curl -X POST https://api.example.com/orders \
-H "Content-Type: application/json" \
-H "x-api-token: mk_client_key" \
-d '{
"caja_id": "SUC001-POS001",
"external_reference": "TICKET-00001",
"amount": "1500,50",
"description": "Venta mostrador",
"payment_method": "all",
"expiration_minutes": 16
}'
2. Polling del estado
El ERP puede consultar periódicamente el estado:
flowchart LR
A["GET /orders/:key"] --> B{status?}
B -->|created| C["⏳ Esperar<br/>+ reintentar"]
B -->|at_terminal| C
B -->|processed| D["✅ Pago OK<br/>Cerrar ticket"]
B -->|canceled| E["❌ Cancelado"]
B -->|expired| F["⏰ Expirado<br/>Crear nueva orden"]
B -->|failed| G["❌ Rechazado<br/>Ver status_detail"]
C --> A
3. Reintentos
Si una orden se cancela o expira, MercadoPago crea una nueva con diferente order_id:
# Primera orden — se canceló
POST /orders → order_id: "550e8400" → canceled
# Reintento — nueva orden
POST /orders → order_id: "550e8401" → processed ✅
external_reference puede repetirse
El mismo TICKET-00001 puede tener múltiples order_id (intentos). Cada intento es una orden separada.
Métodos de pago
| Valor | Terminal acepta |
|---|---|
all (default) |
Todos los medios |
debit_card |
Tarjeta débito y crédito |
credit_card |
Tarjeta débito y crédito |
qr |
Solo QR y Pix |
Expiración
La orden expira automáticamente si no se procesa dentro del tiempo configurado:
expiration_minutes |
Rango | Default |
|---|---|---|
| Mínimo | 1 min | — |
| Default | — | 16 min |
| Máximo | 180 min | — |