Saltar a contenido

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

curl -X POST https://api.example.com/orders/refund \
  -H "Content-Type: application/json" \
  -H "x-api-token: mk_client_key" \
  -d '{ "order_id": "550e8400" }'
curl -X POST https://api.example.com/orders/refund \
  -H "Content-Type: application/json" \
  -H "x-api-token: mk_client_key" \
  -d '{ "order_id": "550e8400", "amount": "500,00" }'

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)