Checkouts API

El checkout es la transición de un carrito a una orden.

Para generar y modificar checkouts es necesario agregar el header Channel-Key, que se muestra en la vista del canal API dentro del administrador.


Objeto de Checkout

La estructura de la respuesta está dividida en dos partes:

{
  "meta": {
    ...
  },
  "data": {
    ...
  }
}

Sección meta

Atributo Tipo Descripción
is_shipping_required boleano Indica si la orden necesita método de envío.
selected_shipping_method cadena Indica el método de envío asignado al checkout.
selected_payment_gateway cadena Indica el método de pago asignado al checkout.
shipping_methods[] arreglo Lista todos los métodos de envío que son utilizables por la orden con base en su costo total y/o peso de envío.
payment_gateways[] arreglo Lista todos los métodos de pago utilizables para la orden.

Sección data

El contenido de data es una orden. Consulta la documentación de Órdenes para ver la estructura del objeto.


Recursos para Checkout

Recursos para direcciones

Para llenar la información de dirección de pago y/o envío es necesario utilizar los códigos de paises y estados/regiones como se indican en los siguiente endpoints.

Las solicitudes a estos recursos dependen de las particularidades de la tienda, por ejemplo, si ésta solo vende en México únicamente se requiere solicitar al endpoint de estados/regiones los pertenecientes al código MX.

GET /v1/countries

La estructura de la respuesta está dividida en dos partes:

{
  "billing_countries": [
    ...
    ],
  "shipping_countries": [
    ...
  ]
}

El valor de la llave code de los paises elegidos para envío y/o pago se usarán más adelante.

GET /v1/countries/{code}/states

El valor de la llave code de los estados elegidos para envío y/o pago se usarán más adelante. Si la lista de estados está vacía en lugar de utilizar el código, se enviará una cadena con el nombre correspondiente.

Gateways

Aun cuando las solicitudes de checkout regresan los gateways disponibles, es posible solicitarlos directamente.

GET /v1/gateways

Obtiene el listado de gateways de pago disponibles.

GET /v1/gateways/{id}

Obtiene información de un gateway de pago.


Creación / actualización de Checkout

Dependiendo de las particularidades de la tienda posible saber o ignorar a priori ciertos valores necesarios para asignar los métodos de pago y envío.

Si la implementación es para una tienda quw solo vende en México productos que requiren envío, luego de solicitar los estados al endpoint es posible generar una vista donde se capturen todos los datos: información del comprador, la direcciones de envío y opcionalmente la dirección de pago, generando y llenando la información de checkout en un solo paso.

Si por el contrario, los paises son variables y/o se venden productos que pueden o no requerir envío, será necesario crear un checkout sin enviar datos y con base en la información meta respondida saber que elementos agregar a la vista de captura para enviar al endpoint de actualización.

POST /v1/carts/{cartId}/checkout
PUT /v1/checkouts/{orderId}

Carga útil

Un objeto con los siguientes elementos:

Nombre Tipo Default Requerido Descripción
customer[email] cadena true El email del comprador.
customer[first_name] cadena false El/los nombre(s) del comprador.
customer[last_name] cadena false El/los apellido(s) del comprador.
customer[is_newsletterable] boleano false false Indica si el email del comprador puede ser usado para enviar newsletters.
shipping[first_name] cadena true El/los nombre(s) para la dirección de envío.
shipping[last_name] cadena true El/los apellido(s) para la dirección de envío.
shipping[address1] cadena true La información principal de envío, calle, número exterior e interior, etc.
shipping[address2] cadena false Campo extra para dirección como colonia, barrio, etc.
shipping[references] cadena false Referencias de la drección de envío como edificios cercanos, entre que calles se encuentra, etc.
shipping[company] cadena false La compañía a la que pertenece la dirección de envío.
shipping[postcode] cadena true El código postal de la dirección de envío.
shipping[city] cadena true La ciudad de la dirección de envío.
shipping[country_code] cadena true El código de país de la dirección de envío, obtenido desde /v1/countries.
shipping[state_code] cadena false El código de estado de la dirección de envío, obtenido desde /v1/countries/{code}/states.
shipping[state] cadena false El nombre del estado de la dirección de envío (requerido si no hay un código de estado disponible).
shipping[phone] cadena true El teléfono de la dirección de envío.
shipping[id] cadena false El ID de alguna dirección perteneciente al cliente. Cuando se especifica, los otros datos de shipping se ignoran
same_address boleano true false Indica si se usará la misma dirección de envío como dirección de pago.
billing[first_name] cadena true El/los nombre(s) para la dirección de pago.
billing[last_name] cadena true El/los apellido(s) para la dirección de pago.
billing[address1] cadena true La información principal de envío, calle, número exterior e interior, etc.
billing[address2] cadena false Campo extra para dirección como colonia, barrio, etc.
billing[company] cadena false La compañía a la que pertenece la dirección de pago.
billing[postcode] cadena true El código postal de la dirección de pago.
billing[city] cadena true La ciudad de la dirección de pago.
billing[country_code] cadena true El código de país de la dirección de pago, obtenido desde /v1/countries.
billing[state_code] cadena false El código de estado de la dirección de pago, obtenido desde /v1/countries/{code}/states.
billing[state] cadena false El nombre del estado de la dirección de pago (requerido si no hay un código de estado disponible).
billing[phone] cadena true El teléfono de la dirección de pago.
billing[id] cadena false El ID de alguna dirección perteneciente al cliente. Cuando se especifica, los otros datos de billing se ignoran

La validación y asignación de información del comprador se realiza si existe al menos algún elemento de la estructura customer. La validación y asignación de dirección de envío se realiza si existe al menos algún elemento de la estructura shipping. La validación y asignación de dirección de pago se realiza si se envía el elemento same_address con valor falso.

Ejemplos

Creación de checkout sin enviar información, esto sirve cuando no se tiene ningún tipo de información previa.

{
}

Creación/actualización de checkout con los datos mínimos del comprador.

{
    "customer": {
        "email": "juantremendo@example.com"
    }
}

Creación/actualización de checkout con los datos mínimos de dirección.

{
    "shipping": {
        "first_name": "Juan",
        "last_name": "Tremendo",
        "address1": "5 norte No.9, int 6. Col Centro.",
        "postcode": "72000",
        "city": "Puebla",
        "country_code": "MX",
        "state_code": "PUE",
        "phone": "1234567890"
    }
}

Creación/actualización de checkout con todos los datos.

{
    "customer": {
        "email": "juantremendo@example.com",
        "first_name": "Juan",
        "last_name": "Tremendo",
        "is_newsletterable": true
    },
    "shipping": {
        "first_name": "Juan",
        "last_name": "Tremendo",
        "address1": "5 norte No.9, int 6",
        "address2": "Centro",
        "references": "Frente al colegio",
        "company": "Tremens LTD",
        "postcode": "72550",
        "city": "Puebla",
        "country_code": "MX",
        "state_code": "PUE",
        "phone": "1234567890"
    },
    "same_address": false,
    "billing": {
        "first_name": "Juan Pedro",
        "last_name": "Pérez Pérez",
        "address1": "25 oriente #2520 - 3",
        "address2": "Plateros",
        "company": "Tronic SA de CV",
        "postcode": "72200",
        "city": "Puebla",
        "country_code": "MX",
        "state_code": "PUE",
        "phone": "1212121212"
    }
}

Adición de direcciones de envío y pago usando direcciones del cliente.

{
    "shipping": {
        "id": "adr_cjg2wni720001x0o2oo2uceah"
    },
    "billing": {
        "id": "adr_cjg3tvrf60004koo2mj4s94ep"
    }
}
{
    "shipping": {
        "id": "adr_cjg2wni720001x0o2oo2uceah"
    },
    "same_address": true
}

Si la orden no require envío, se puede enviar solamente la dirección de pago.

{
    "billing": ...
}

la respuesta es la misma que al Consultar un Checkout.


Consultar un Checkout

GET /v1/checkouts/{id}
{
  "meta": {
    "is_shipping_required": true,
    "selected_shipping_method": null,
    "selected_payment_gateway": null,
    "shipping_methods": [
      {
        "id": "shr_cjg8mcqbt002z13o2u9rgrgc9",
        "kind": "weight",
        "name": "Env\u00edo est\u00e1ndar",
        "from": 0,
        "to": 500,
        "price": 10000,
        "object": "shipping_zone_rate",
        "store": {
          "id": "str_cjg8mcazg000013o2bob3fq25",
          "subdomain": "store1",
          "domain": "store1.kometia.test",
          "name": "store1",
          "description": null,
          "image": null,
          "store_status": "active",
          "email": "user1@mail.com",
          "address1": "Calle Falsa 123",
          "address2": "Colonia",
          "postcode": "12345",
          "city": "Delegaci\u00f3n",
          "country": "Mexico",
          "country_code": "MX",
          "state": "Puebla",
          "state_code": "PUE",
          "references": null,
          "phone": "1234567890",
          "tax_id": null,
          "business_name": null,
          "fiscal_address": null,
          "contact_email": "user1@mail.com",
          "lang": "es",
          "currency": "MXN",
          "timezone": "America\/Mexico_City",
          "weight_unit": "kg",
          "order_prefix": null,
          "order_suffix": null,
          "is_tax_included": true,
          "billing_gateway_source": null,
          "billing_customer_id": null,
          "billing_card_brand": null,
          "billing_card_last_four": null,
          "billing_card_exp_month": null,
          "billing_card_exp_year": null,
          "billing_invoice_custom_data": null,
          "next_billing_at": "2018-05-06 12:00:00",
          "created_at": "2018-04-21 00:01:30",
          "updated_at": "2018-04-21 00:01:50",
          "object": "store"
        }
      }
    ],
    "payment_gateways": []
  },
  "data": {
    "id": "ord_cjgfqxb1p00000vo2vsyefadg",
    "object": "order",
    "number": null,
    "status": "created",
    "financial_status": "unpaid",
    "fulfillment_status": "unfulfilled",
    "email": "juantremendo@example.com",
    "customer": {
      "id": "cus_cjgfqxc9t00050vo2umuift5m",
      "object": "customer",
      "name": "Juan Tremendo",
      "first_name": "Juan",
      "last_name": "Tremendo",
      "email": "juantremendo@example.com",
      "is_newsletterable": true,
      "is_active": false,
      "notes": null,
      "tags": [],
      "created_at": 1524699853,
      "updated_at": 1524699853
    },
    "items": [
      {
        "id": "itm_cjgfqxbr100030vo2kz0ccdmx",
        "object": "order_item",
        "permalink": "test-shirt",
        "name": "Test Shirt 1",
        "product_name": "Test Shirt",
        "sku_name": "1",
        "vendor": null,
        "code": null,
        "image": null,
        "price": 15000,
        "compared_price": 0,
        "quantity": 2,
        "discount": null,
        "is_taxable": true,
        "tax_rate": 1600,
        "subtotal": 25862,
        "taxes": 4138,
        "total": 30000,
        "fulfilled": 0,
        "is_shipping_required": true,
        "weight": 2000,
        "stock_id": null,
        "order_id": "ord_cjgfqxb1p00000vo2vsyefadg",
        "product_id": "prd_cjgff0zr0000013o20rfypz7v",
        "sku_id": "sku_cjgff0zsp000113o29zwjilz8",
        "stock_manager": [],
        "created_at": 1524699852,
        "updated_at": 1524699852
      },
      {
        "id": "itm_cjgfqxbjn00020vo2y9oet7qh",
        "object": "order_item",
        "permalink": "test-product",
        "name": "Test Product",
        "product_name": "Test Product",
        "sku_name": "",
        "vendor": null,
        "code": null,
        "image": null,
        "price": 10000,
        "compared_price": 0,
        "quantity": 1,
        "discount": null,
        "is_taxable": false,
        "tax_rate": 1600,
        "subtotal": 10000,
        "taxes": 0,
        "total": 10000,
        "fulfilled": 0,
        "is_shipping_required": true,
        "weight": 1000,
        "stock_id": null,
        "order_id": "ord_cjgfqxb1p00000vo2vsyefadg",
        "product_id": "prd_cjgff061n000013o22ef8a508",
        "sku_id": "sku_cjgff06q9000113o2wzmfyvzq",
        "stock_manager": [],
        "created_at": 1524699852,
        "updated_at": 1524699852
      }
    ],
    "is_shipping_required": true,
    "shipping_lines": null,
    "shipping_rate": 0,
    "shipping": {
      "address": {
        "city": "Puebla",
        "country": "Mexico",
        "country_code": "MX",
        "address1": "Calle Cadillac #27",
        "address2": "Lomas de San Juan",
        "postcode": "72550",
        "state": "Puebla",
        "state_code": "PUE"
      },
      "name": "Juan Tremendo",
      "phone": "1234567890"
    },
    "billing": {
      "address": {
        "city": "Puebla",
        "country": "Mexico",
        "country_code": "MX",
        "address1": "25 oriente #2520 - 3",
        "address2": "Plateros",
        "postcode": "72200",
        "state": "Puebla",
        "state_code": "PUE"
      },
      "name": "Pedro P\u00e1ramo",
      "phone": "1212121212"
    },
    "discount_codes": null,
    "is_gift": true,
    "gift_message": "Regalito",
    "source_name": "api",
    "customer_note": "Verificar acabado",
    "order_note": null,
    "cancel_reason": null,
    "browser_ip": "127.0.0.1",
    "user_agent": "rest-client",
    "landing_site": "",
    "referring_site": "",
    "gateway": null,
    "total_products": 2,
    "total_discount": 0,
    "total_items": 3,
    "total_items_price": 35862,
    "subtotal_price": 40000,
    "total_taxes": 4138,
    "total_price": 40000,
    "currency": "MXN",
    "total_weight": 5000,
    "transactions": [],
    "is_test": null,
    "customer_id": "cus_cjgfqxc9t00050vo2umuift5m",
    "channel_id": "chn_cjgfds0g9000013o28ww9vlj5",
    "cart_id": "crt_cjgfgqad3000013o2v8dzo0s7",
    "canceler_id": null,
    "placed_at": null,
    "archived_at": null,
    "canceled_at": null,
    "created_at": 1524699851,
    "updated_at": 1524700183
  }
}

Asignar métodos de pago y envío al Checkout

POST /v1/checkouts/{id}/methods

Carga útil

Un objeto con los siguientes elementos:

Nombre Tipo Requerido Descripción
shipping[method] cadena false El id del método de envío elegido. Se debe enviar cuando meta[is_shipping_required] sea verdadero.
payment[gateway] cadena true El id del gateway de pago elegido.

Pagar la orden del Checkout

POST /v1/checkouts/{id}/payment

Carga útil

Un objeto con los siguientes elementos:

Nombre Tipo Requerido Descripción
payment[method] cadena true El método de pago para el gateway elegido.