Cancelación y Reembolso
Cancelación
¿Cuándo se puede cancelar?
flowchart TD
A["ERP: POST /orders/cancel"] --> B{Estado de<br/>la orden?}
B -->|created| C["✅ Cancela via API"]
B -->|at_terminal| D["❌ 409 — Cancelar<br/>desde la terminal"]
B -->|processed| E["❌ 400 — Ya procesada<br/>Usar /refund"]
B -->|canceled/expired| F["❌ 400 — Ya finalizada"]
Flujo
sequenceDiagram
participant ERP
participant API as Integration API
participant MP as MercadoPago
ERP->>API: POST /orders/cancel { order_id }
API->>API: Buscar orden en DB
API->>MP: POST /v1/orders/:id/cancel
alt MP devuelve 200
MP-->>API: status: canceled
API->>API: Actualizar DB
API-->>ERP: 200 { status: canceled }
else MP devuelve 409 (at_terminal)
MP-->>API: 409
API-->>ERP: 409 "Cancelar desde la terminal"
end
Ejemplo
curl -X POST https://api.example.com/orders/cancel \
-H "Content-Type: application/json" \
-H "x-api-token: mk_client_key" \
-d '{ "order_id": "550e8400" }'
Reembolso
Total vs Parcial
flowchart TD
A["ERP: POST /orders/refund"] --> B{¿Incluye amount?}
B -->|No| C["Reembolso TOTAL<br/>Devuelve todo"]
B -->|Sí| D["Reembolso PARCIAL"]
D --> E{¿Método de<br/>pago válido?}
E -->|"Tarjeta / QR / Billetera"| F["✅ Reembolso parcial OK"]
E -->|"Otro método"| G["❌ 422 — No disponible<br/>para este método"]
Flujo de reembolso total
sequenceDiagram
participant ERP
participant API as Integration API
participant MP as MercadoPago
ERP->>API: POST /orders/refund { order_id }
API->>API: Buscar orden en DB
API->>MP: POST /v1/orders/:id/refund (sin body)
MP-->>API: status: refunded
API->>API: Actualizar DB
API-->>ERP: 200 { type: total, status: refunded }
Note over MP: MP envía webhook order.refunded
Flujo de reembolso parcial
sequenceDiagram
participant ERP
participant API as Integration API
participant MP as MercadoPago
ERP->>API: POST /orders/refund { order_id: "550e8400", amount: "500,00" }
API->>API: Buscar orden en DB
API->>MP: GET /v1/orders/:id (obtener transaction_id)
MP-->>API: payments: [{ id: PAY01... }]
API->>MP: POST /v1/orders/:id/refund { transactions: [{ id, amount }] }
MP-->>API: status: partially_refunded
API-->>ERP: 200 { type: partial, amount: 500.00 }
Ejemplos
Restricciones del reembolso parcial
| Método de pago |
Parcial disponible |
| Tarjeta de crédito |
✅ |
| Tarjeta de débito |
✅ |
| QR (billetera MP) |
✅ |
| Otras billeteras |
✅ |
| Otros métodos |
❌ (devuelve 422) |