NAV Navbar
shell php

Introducción

Esta es la documentación de la API HTTP de Pagaris, la manera más fácil y económica de dejar que los clientes de tu tienda en línea paguen a meses sin una tarjeta de crédito, mientras tú recibes tu dinero de contado y al instante.

¿A quién va dirigida esta documentación?

A desarrolladores de tiendas en línea que deseen hacer una integración custom directamente con la API o a través de SDKs. Si tu tienda en línea está hecha con Shopify, Woocommerce, Prestashop, o Magento ya contamos con integraciones exprés, por lo que puedes usarlas para hacer tu integración más sencilla.

Sobre la API

// Instalar la librería (SDK) en PHP, incluyéndola en composer.json o con el
// siguiente comando
$ composer require pagaris/pagaris-php

La API de Pagaris es REST y usa JSON para las solicitudes y respuestas. Usa códigos de respuesta y verbos HTTP estandar.

Para garantizar la seguridad, todas las solicitudes se deben hacer por HTTPS.

La API está versionada (la documentación que estás viendo corresponde a la versión 1, que es la actual). Cuando existan nuevas versiones cuyos cambios no sean compatibles con la versión anterior, se creará una nueva versión y se debe especificar en la URL.

La URL base de la API es:

https://pagaris.com/api/v1

Ambientes

Puedes probar tu integración a la API en el ambiente de Sandbox usando la llave privada de modo Sandbox. Puedes probar tu integración con casos de prueba. En modo Sandbox, no hay movimientos reales de dinero, sólo existe para que confirmes que tus sistemas están correctamente integrados con Pagaris.

Una vez que tu integración sea exitosa y desees integrarte en modo Producción, deberás de solicitar que tu Comercio sea aprobado. Una vez aprobado, puedes utilizar la llave privada de modo Producción.

La manera en la que se determina en qué ambiente está hecha una solicitud a la API es dependiendo de qué llave usas (más info. en sección de Autenticación).

Autenticación

Cualquier llamada a la API debe de ser autenticada con llaves de Aplicaciones. Puedes crear una Aplicación y obtener sus llaves aquí.

La manera en que se autentica y autoriza una solicitud en Pagaris es a través del envío de una firma y otra información en el header Authorization de tus solicitudes.

Generación de la firma

Generar firma

PRIVATE_KEY=31jzpPDRG1xA1hNwso5dMfj4
TIMESTAMP=$(date +%s)
METHOD=GET
BODY=""
REQUEST_PATH=/api/v1/orders

# Generar firma
SIGNATURE_STRING=$(echo -n "$TIMESTAMP-$METHOD-$REQUEST_PATH-$BODY")
SIGNATURE=$(echo -n "$SIGNATURE_STRING" | openssl dgst -hex -sha256 -hmac $PRIVATE_KEY)
<?php

// Al usar el SDK de PHP la firma se genera automáticamente.
// Sólo debes establecer el ID de tu Aplicación y tu llave secreta

Pagaris\Pagaris::setApplicationId(getenv('PAGARIS_APPLICATION_ID'));
Pagaris\Pagaris::setPrivateKey(getenv('PAGARIS_PRIVATE_KEY'));

La firma se construye con los siguientes elementos:

  1. Con un timestamp del tiempo de la solicitud
  2. El método HTTP de la llamada
  3. La dirección (path) de la llamada
  4. El cuerpo de la llamada

Se deben concatenar los elementos, unidos por un guión (ej. <timestamp>-<método>-<dirección>-<cuerpo>). Una vez concatenados, se debe de firmar esta cadena con un HMAC usando el algoritmo SHA-256 y tu llave privada. Debes convertir el valor binario de esta firma en un valor hexadecimal.

Generación del header Authorization

Generar encabezado

URL=https://pagaris.com/api/v1/orders
APP_ID=80b6d652-48cd-4819-aa61-22ce1b67b91f

AUTH_HEADER="Pagaris $APP_ID:$TIMESTAMP:$SIGNATURE"

# Incluir encabezado en la llamada
curl $URL -H "Authorization: $AUTH_HEADER"
// Al usar el SDK de PHP, el encabezado se genera automáticamente.
// Sólo debes establecer el ID de tu Aplicación y tu llave secreta
// como se describe en la sección anterior.

Una vez que tienes la firma, debes construir el encabezado Authorization con los siguientes elementos:

  1. El ID de la Aplicación que creaste y que contiene la llave privada que estás usando
  2. El mismo timestamp que usaste para construir la firma
  3. La firma generada

Estos elementos deben ser unidos con dos puntos (ej. Authorization: Pagaris <id de aplicación>:<timestamp>:<firma>)

Órdenes

Una Orden se refiere a una compra que un comprador de tu comercio decide pagar con Pagaris. En otras palabras, cuando en un carrito de compras de $3,500.00 tu comprador decide pagar a través de Pagaris, debes crear una Orden de $3,500.00.

Flujo de Órdenes

1. Creas una Orden en la API de Pagaris

Ver sección de Crear Orden

2. Rediriges a tu cliente a Pagaris

De la respuesta de la solicitud de creación, obtienes order.url. Usa esta URL para redirigir a tu cliente.

3. Esperas a ser notificado de la actualización de la Orden.

Puedes ser notificado de dos maneras:

3.1 Cuando tu cliente sea redirigido de vuelta a tu comercio

3.2 Cuando recibas webhooks

4. Actúas sobre el estado de la Orden

Si la Orden fue aprobada, puedes confirmarla o cancelarla. Ver secciones Sobre la confirmación de Órdenes y Sobre la cancelación de Órdenes

Si la Orden fue rechazada, puedes decidir darle la opción al comprador de elegir otro método de pago o simplemente rechazar su compra.

5. Una vez confirmada, procesa la compra de tu cliente

Es decir, envía sus productos o dale acceso a tus servicios.

Esquema

Atributo Tipo Valor por defecto Descripción Ejemplo
id string (UUID) Identificador de la Orden '6fde1e7a-df3c-4db9-8da5-e8803baa2551'
amount decimal string Monto de la Orden en MXN '5231.23'
status enum created Estado actual de la Orden (ver Estados de una Orden) 'confirmed'
metadata json object null El Comercio opcionalmente puede enviar información que le ayude a identificar esta Orden en sus sistemas { "purchase_id": 148 }
products json array null El Comercio opcionalmente puede enviar una lista de los productos que componen una Orden [{ "name": "Silla", "amount": 4, "unit_price": "820.23" }]
redirect_url string (URL) null URL que el Comercio establece para que el comprador sea redirigido aquí una vez que haya terminado el proceso en Pagaris https://mi-tienda.com/pagaris-redirect
created_at string (ISO 8601) Fecha y hora en la que se creó una Orden por un Comercio '2019-09-26T11:12:06.595-05:00'
updated_at string (ISO 8601) Fecha y hora del último cambio en la Orden '2019-09-26T11:12:06.595-05:00'
url string (URL) URL a la que el Comercio debe redirigir al comprador para hacer el proceso en Pagaris 'https://pagaris.com/orders/8289e4a7-8c98-4ef6-943e-fb9875846a49/lr'

Estados de una Orden

Estado Descripción
created Una vez que la Orden ha sido creada. El Comercio debe redirigir al comprador a Pagaris a url. El Comercio espera a que la Orden cambie a un estado approved o rejected dependiendo del proceso del comprador en Pagaris.
approved El comprador terminó el proceso en Pagaris exitosamente, por lo que la Orden puede ser confirmada por el Comercio (confirmed)
confirmed El Comercio confirmó la Orden. El monto de esta Orden (menos comisiones) será enviado al Comercio en la siguiente corrida de pagos. El Comercio debe considerar la compra del comprador como exitosa y procesarla.
being_paid_out Se está haciendo una corrida de pagos que incluye esta Orden.
paid_out Se pagó el monto de esta Orden (menos comisiones) al Comercio en una corrida de pagos.
rejected El comprador no terminó el proceso en Pagaris exitosamente. El Comercio debe pedir otro método de pago al comprador o cancelar su compra.
expired El Comercio tardó demasiado en confirmar la Orden. Si el Comercio va a confirmar manualmente una Orden aprobada (ver secciones Sobre la confirmación de Órdenes y Confirmar Orden), debe hacerlo en menos de 72 horas desde que la Orden es aprobada, de lo contrario esta expirará y será imposible confirmarla (y recibir el dinero de la venta).
cancelled El Comercio ha cancelado esta Orden (ver sección Sobre la cancelacón de Órdenes)

Sobre la confirmación de Órdenes

El Comercio puede configurarse para autoconfirmar Órdenes aprobadas. En este caso, una vez que la Orden sea aprobada, de inmediato se pasará a confirmada. Esto es útil para Comercios que siempre pueden procesar una compra de sus clientes en automático y no necesitan revisarlas (ej. no necesitan revisar inventario).

Si esta opción no está habilitada para el Comercio, el Comercio deberá confirmar cada Orden que desee procesar en menos de 72 horas desde que la Orden es aprobada.

Sobre la cancelación de Órdenes

El Comercio puede cancelar una Orden siempre y cuando tenga un estado (status) con valor:

Una vez cancelada, será imposible confirmar una Orden (y recibir el dinero de la venta).

Crear Orden

POST /api/v1/orders

curl -H "Authorization: $AUTH_HEADER" \ # ver sección de Autenticación
     -H "Content-Type: application/json" \
     -d '{"order":{"amount":5329.12,"redirect_url":"https://mi-tienda.com/foo"}}' \
     -X POST https://pagaris.com/api/v1/orders
<?php

$order = Pagaris\Order::create([
  'amount' => 5329.12,
  'redirect_url' => 'https://mi-tienda.com/foo'
]);

Respuesta (201: Created)

{
  "order": {
    "id": "6be774b3-f545-4c4d-82ca-46b6e1b7e9a4",
    "amount": "5329.12",
    "status": "created",
    "metadata": null,
    "products": null,
    "redirect_url": "https://mi-tienda.com/foo",
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/6be774b3-f545-4c4d-82ca-46b6e1b7e9a4/lr"
  }
}

POST /api/v1/orders

Crea una Orden para el Comercio.

Parámetro Obligatorio Notas
order.amount
order.metadata No
order.products No
order.redirect_url No Si se pasa, sobreescribe la URL de redirección que haya sido establecida a nivel Aplicación.

Ver Órdenes

GET /api/v1/orders

curl -H "Authorization: $AUTH_HEADER" \ # ver sección de Autenticación
     https://pagaris.com/api/v1/orders
<?php

$orders = Pagaris\Order::all();

Respuesta (200: OK)

{
  "orders": [
    {
      "id": "6be774b3-f545-4c4d-82ca-46b6e1b7e9a4",
      "amount": "5329.12",
      "status": "created",
      "metadata": null,
      "products": null,
      "redirect_url": "https://mi-tienda.com/foo",
      "created_at": "2019-09-26T11:12:06.595-05:00",
      "updated_at": "2019-09-26T11:12:06.595-05:00",
      "url": "https://pagaris.com/orders/6be774b3-f545-4c4d-82ca-46b6e1b7e9a4/lr"
    },
  ]
}

GET /api/v1/orders

Regresa una lista con todas las Órdenes del Comercio.

Ver Orden

GET /api/v1/orders/:id

curl -H "Authorization: $AUTH_HEADER" \ # ver sección de Autenticación
     https://pagaris.com/api/v1/orders/7092af64-0113-483a-a7d4-9fe5aebe3515
<?php

$order = Pagaris\Order::get('7092af64-0113-483a-a7d4-9fe5aebe3515');

Respuesta (200: OK)

{
  "order": {
    "id": "7092af64-0113-483a-a7d4-9fe5aebe3515",
    "amount": "5329.12",
    "status": "created",
    "metadata": null,
    "products": null,
    "redirect_url": null,
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/7092af64-0113-483a-a7d4-9fe5aebe3515/lr"
  }
}

GET /api/v1/orders/:id

Regresa una sola Orden. Es necesario enviar el id de la Orden en la URL.

Confirmar Orden

PUT /api/v1/orders/:id/confirm

curl -H "Authorization: $AUTH_HEADER" \ # ver sección de Autenticación
     -X PUT \
     https://pagaris.com/api/v1/orders/5fafd2f0-ed45-451f-8d7f-4399fe3ab154/confirm
<?php

$order = Pagaris\Order::get('5fafd2f0-ed45-451f-8d7f-4399fe3ab154');
$order->confirm();

Respuesta (200: OK)

{
  "order": {
    "id": "5fafd2f0-ed45-451f-8d7f-4399fe3ab154",
    "amount": "6742.30",
    "status": "confirmed",
    "metadata": null,
    "products": null,
    "redirect_url": null,
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/5fafd2f0-ed45-451f-8d7f-4399fe3ab154/lr"
  }
}

PUT /api/v1/orders/:id/confirm

Confirma una Order cuyo estado (status) es approved (ver secciones Estados de una Orden y Sobre la confirmación de Órdenes).

Es necesario enviar el id de la Orden en la URL. Si la Orden a la que se está haciendo referencia no tiene un status de approved, regresa un error 401.

Cancelar Orden

PUT /api/v1/orders/:id/cancel

curl -H "Authorization: $AUTH_HEADER" \ # ver sección de Autenticación
     -X PUT \
     https://pagaris.com/api/v1/orders/65f18379-5be4-44ec-94c6-415f575045b4/cancel
<?php

$order = Pagaris\Order::get('65f18379-5be4-44ec-94c6-415f575045b4');
$order->cancel();

Respuesta (200: OK)

{
  "order": {
    "id": "65f18379-5be4-44ec-94c6-415f575045b4",
    "amount": "6742.30",
    "status": "cancelled",
    "metadata": null,
    "products": null,
    "redirect_url": null,
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/65f18379-5be4-44ec-94c6-415f575045b4/lr"
  }
}

PUT /api/v1/orders/:id/cancel

Cancela una Order cuyo estado (status) es created o approved (ver secciones Estados de una Orden y Sobre la cancelación de Órdenes).

Es necesario enviar el id de la Orden en la URL. Si la Orden a la que se está haciendo referencia no tiene un status de created o approved, regresa un error 401.

Errores

Se usan códigos de estado HTTP comunes. Los más relevantes son los siguientes:

Código Descripción Causa
200 OK Solicitud correcta
201 Created Se creó el recurso correctamente
401 Unauthorized No estás autorizado para realizar esta acción. Se puede deber, entre otras cosas, a que
  1. no incluíste el encabezado Authorization, o este es incorrecto (ver Autenticación, y genera correctamente la firma),
  2. la firma no se generó recientemente y expiró (se debe hacer la solicitud segundos después de generar la firma),
  3. la llave privada no corresponde a la Aplicación,
  4. la Aplicación no está activa,
  5. el Comercio no está aprobado y se está haciendo una solicitud de Producción (antes de ser aprobado, sólo se pueden hacer solicitudes en Sandbox),
  6. no tienes permiso para realizar esta acción (ej. confirmar una Orden que no está aprobada)
404 Not Found No se encontró un recurso (ej. la Orden que buscas no existe). Asegúrate que el recurso que estás buscando se creó en el mismo ambiente que el ambiente que se está usando en esta solicitud (es decir, los IDs del ambiente de Sandbox no se encuentran en Producción y viceversa).
422 Unprocessable Entity La solicitud no se formó correctamente. Normalmente significa que faltan parámetros o que los valores que se mandaron son inválidos. Puedes revisar error.detail en la respuesta para conocer el motivo
5xx Server Error Algo salió mal de nuestro lado. Hemos sido notificados y trabajaremos en solucionarlo. Estos errores son muy poco comunes.

Webhooks

Ejemplo

POST https://tu-servicio.com/webhooks-pagaris
Authorization: Pagaris <autorizacion>
{
  "event": {
    "type": "order.status_update",
  },
  "payload": {
    "order": {
      "id": "6be774b3-f545-4c4d-82ca-46b6e1b7e9a4",
      "amount": "5329.12",
      "status": "approved",
      "metadata": null,
      "products": null,
      "redirect_url": "https://mi-tienda.com/foo",
      "created_at": "2019-09-26T11:12:06.595-05:00",
      "updated_at": "2019-09-26T11:14:03.595-05:00",
    }
  }
}

Puedes establecer URLs para recibir Webhooks de una Aplicación (tanto en ambiente de Sandbox como Producción) desde el portal de Pagaris. Una vez que establezcas estas URLs, recibirás eventos o notificaciones a modo de solicitudes POST con información relevante sobre, por ejemplo, un cambio de estado en una Orden de tu comercio.

Este es el mecanismo por el cual te notificamos cambios relevantes para que puedas tomar las acciones necesarias.

Firma

<?php
if (isset($_SERVER["HTTP_AUTHORIZATION"])) {
  $authHeader = $_SERVER["HTTP_AUTHORIZATION"];
  $value = explode(" ", $authHeader)[1]; // <id de aplicación>:<timestamp>:<firma>
  list($appId, $timestamp, $signature) = explode(":", $value);
  $body = file_get_contents('php://input');
  // $path = '/path-de-url-de-webhooks';

  $valid = Pagaris\Pagaris::verifyWebhookSignature([
    'signature' => $signature,
    'timestamp' => $timestamp,
    'path' => $path,
    'body' => $body
  ]);
}
# Ejemplo de una aplicación en Ruby on Rails
class PagarisWebhooksController < ApplicationController
  def create
    id, timestamp, signature = request.authorization
      &.match(/\APagaris\s(.+):(.+):(.+)\z/)&.captures

    data = "#{timestamp}-#{request.method}-#{request.fullpath}-#{request.raw_post}"
    expected_signature = OpenSSL::HMAC.hexdigest('SHA256', private_key, data)

    if expected_signature == signature
      # Firma válida
      render json: { status: :ok }, status: :ok
    end
  end
end

Así como el Comercio debe firmar las solicitudes que hace a la API, los Webhooks que se envían al Comercio también son firmados con un mecanismo similar al que se explica en la sección de Autenticación. Esto es con la finalidad de que puedas corroborar que el Webhook efectivamente proviene de Pagaris y puedas confiar en su información. No es obligatorio que revises la firma de los webhooks que enviamos, pero es recomendable.

Enviaremos la firma en el encabezado Authorization (ej. Authorization: Pagaris <id de aplicación>:<timestamp>:<firma>) de la solicitud y la puedes corroborar de la siguiente manera:

  1. Extraer el contenido del encabezado Authorization
  2. Separar los campos (id de Aplicación, timestamp y firma obtenida)
  3. Generar una firma esperada:
    • Con el timestamp, método, path y cuerpo de la solicitud que recibiste, separados por guiones
    • Con la llave privada del ambiente adecuado
  4. Comparar la firma obtenida (paso 2) con la firma esperada (paso 3)

Reintentos

Intentaremos enviar el webhook a la URL que hayas establecido. Si tu servicio no responde con un código de estado 200 - OK, reintentaremos enviar el webhook durante 2 o 3 días continuamente hasta que conteste correctamente. Si no contesta después de este tiempo, el webhook se ignorará.

Esquema

Atributo Descripción
event.type Describe qué tipo de webhook se está enviando
payload Es el cuerpo del webhook. Puede contener uno o más recursos (ej. una orden en payload.order)

Tipos

Cambio de estado de Orden

Ejemplo del cuerpo de un webhook de cambio de estado de Orden

{
  "event": {
    "type": "order.status_update",
  },
  "payload": {
    "order": {
      "id": "6be774b3-f545-4c4d-82ca-46b6e1b7e9a4",
      "amount": "5329.12",
      "status": "approved",
      "metadata": null,
      "products": null,
      "redirect_url": "https://mi-tienda.com/foo",
      "created_at": "2019-09-26T11:12:06.595-05:00",
      "updated_at": "2019-09-26T11:14:03.595-05:00",
    }
  }
}

Tipo order.status_update

Descripción Cuando el estado de una Orden cambia, recibes la Orden para que puedas, por ejemplo, determinar si procesas o no el pedido del comprador.

Casos de prueba

Por defecto, todas las Órdenes creadas en el ambiente Sandbox tienen el estado created al ser creadas y después de 2 minutos son aprobadas (es decir, su estado cambia a approved). Si el Comercio requiere probar otros casos (ej. Ordenes rechazadas o expiradas al instante o un tiempo después), se pueden usar los siguientes casos de prueba.

Orden aprobada al instante

<?php

$order = Pagaris\Order::create([
  'amount' => 1500.23,
  'metadata' => ['special_test_case' => 'instantly_approved']
]);

Ejemplo de cuerpo POST /api/v1/orders

{
  "order": {
    "amount": 1500.23,
    "metadata": {
      "special_test_case": "instantly_approved"
    }
  }
}

Ejemplo de respuesta

{
  "order": {
    "id": "7a9aaadb-6135-4aa8-a585-ef199cb9b119",
    "amount": "1500.23",
    "status": "approved",
    "metadata": null,
    "products": null,
    "redirect_url": null,
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/7a9aaadb-6135-4aa8-a585-ef199cb9b119/lr"
  }
}

Para simular una Orden que se aprueba al instante de ser creada, se debe mandar instantly_approved como valor para order.metadata.special_test_case al momento de crearla como se muestra a continuación.

Orden rechazada al instante

<?php

$order = Pagaris\Order::create([
  'amount' => 1500.24,
  'metadata' => ['special_test_case' => 'instantly_rejected']
]);

Ejemplo de cuerpo POST /api/v1/orders

{
  "order": {
    "amount": 1500.24,
    "metadata": {
      "special_test_case": "instantly_rejected"
    }
  }
}

Ejemplo de respuesta

{
  "order": {
    "id": "3356ffd1-2897-47f9-bb91-cb6b6fc2db0d",
    "amount": "1500.24",
    "status": "rejected",
    "metadata": null,
    "products": null,
    "redirect_url": null,
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/3356ffd1-2897-47f9-bb91-cb6b6fc2db0d/lr"
  }
}

Para simular una Orden que se rechaza al instante de ser creada, se debe mandar instantly_rejected como valor para order.metadata.special_test_case al momento de crearla como se muestra a continuación.

Orden rechazada en 2 minutos

<?php

$order = Pagaris\Order::create([
  'amount' => 1500.25,
  'metadata' => ['special_test_case' => 'rejected']
]);

Ejemplo de cuerpo POST /api/v1/orders

{
  "order": {
    "amount": 1500.25,
    "metadata": {
      "special_test_case": "rejected"
    }
  }
}

Ejemplo de respuesta. El estado cambiará en 2 minutos

{
  "order": {
    "id": "c42489d4-d884-4926-8dec-1be467b17c1b",
    "amount": "1500.25",
    "status": "created",
    "metadata": null,
    "products": null,
    "redirect_url": null,
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/c42489d4-d884-4926-8dec-1be467b17c1b/lr"
  }
}

Para simular una Orden rechazada 2 minutos después de haber sido creada, se debe mandar rejected como valor para order.metadata.special_test_case al momento de crearla como se muestra a continuación.

Orden expirada en 2 minutos

<?php

$order = Pagaris\Order::create([
  'amount' => 1500.26,
  'metadata' => ['special_test_case' => 'expired']
]);

Ejemplo de cuerpo POST /api/v1/orders

{
  "order": {
    "amount": 1500.26,
    "metadata": {
      "special_test_case": "expired"
    }
  }
}

Ejemplo de respuesta. El estado cambiará en 2 minutos

{
  "order": {
    "id": "0b011c7d-0e0c-4b9c-93fb-91d628253c89",
    "amount": "1500.26",
    "status": "created",
    "metadata": null,
    "products": null,
    "redirect_url": null,
    "created_at": "2019-09-26T11:12:06.595-05:00",
    "updated_at": "2019-09-26T11:12:06.595-05:00",
    "url": "https://pagaris.com/orders/0b011c7d-0e0c-4b9c-93fb-91d628253c89/lr"
  }
}

Para simular una Orden expirada 2 minutos después de haber sido creada, se debe mandar expired como valor para order.metadata.special_test_case al momento de crearla como se muestra a continuación: