Órdenes
Creación, consulta, cancelación y reembolso de órdenes de pago.
Ciclo de vida de una orden
stateDiagram-v2
[*] --> created: POST /orders
created --> at_terminal: MP procesa
at_terminal --> processed: Pago exitoso
at_terminal --> canceled: Cancelado en terminal
at_terminal --> failed: Pago rechazado
at_terminal --> expired: Timeout
at_terminal --> action_required: Requiere acción
created --> canceled: POST /orders/cancel
processed --> refunded: POST /orders/refund (total)
processed --> partially_refunded: POST /orders/refund (parcial)
processed --> [*]
canceled --> [*]
failed --> [*]
expired --> [*]
refunded --> [*]
partially_refunded --> [*]
Endpoints
POST /orders
Crea una orden de pago en la terminal asociada a la caja del ERP.
Body:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
caja_id |
string | ✅ | ID de la caja en el ERP |
external_reference |
string | ✅ | Referencia del ticket (max 64 chars) |
amount |
string | ✅ | Monto con coma decimal (ej: 1500,50) |
description |
string | ❌ | Descripción (max 150 chars) |
ticket_number |
string | ❌ | Número de factura |
print_ticket |
boolean | ❌ | Imprimir ticket en terminal (default: false) |
payment_method |
enum | ❌ | all, debit_card, credit_card, qr |
expiration_minutes |
number | ❌ | Minutos de expiración 1-180 (default: 16) |
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",
"print_ticket": true,
"ticket_number": "FAC-A-00001",
"payment_method": "credit_card"
}'
Flujo interno:
flowchart LR
A["ERP envía<br/>caja_id + amount"] --> B["Buscar POS<br/>en DB"]
B --> C["Buscar terminal<br/>en MP"]
C --> D["Convertir monto<br/>coma → punto"]
D --> E["Crear orden<br/>en MP"]
E --> F["Guardar en DB"]
F --> G["Responder<br/>al ERP"]
GET /orders/:orderId
Consulta el estado real de una orden en MercadoPago.
{
"order_id": "550e8400",
"external_reference": "TICKET-00001",
"caja_id": "SUC001-POS001",
"sucursal_id": "SUC001",
"amount": "1500.50",
"description": "Venta mostrador",
"ticket_number": "FAC-A-00001",
"status": "processed",
"status_detail": "accredited",
"payments": [
{
"id": "PAY01...",
"amount": "1500.50",
"paid_amount": "1500.50",
"status": "approved",
"payment_method": {
"type": "credit_card",
"installments": 1,
"id": "visa"
}
}
],
"refunds": [],
"created_at": "2025-02-13T15:00:00Z",
"last_updated_at": "2025-02-13T15:01:30Z"
}
Sincronización
Este endpoint siempre consulta el estado real en MercadoPago y actualiza la DB local si hubo cambios.
POST /orders/cancel
Cancela una orden de pago.
Body:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
order_id |
string | ✅ | ID de la orden a cancelar |
Estado at_terminal
Si la orden ya está en la terminal física (at_terminal), MercadoPago devuelve 409. El operador debe cancelar directamente desde la terminal.
POST /orders/refund
Reembolsa una orden (total o parcial).
Body:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
order_id |
string | ✅ | ID de la orden a reembolsar |
amount |
string | ❌ | Monto parcial con coma. Si no se envía → reembolso total |
Reembolso parcial
Solo disponible para pagos con tarjeta, QR con billetera de Mercado Pago u otras billeteras. Si el método de pago no lo soporta, devuelve 422.