Navegación Navbar
Node.js PHP
  • Introducción
  • Autenticación
  • Idempotencia
  • Encriptacion
  • Errores
  • Paginación, filtros y orden
  • Clientes
  • Metodos de pagos
  • Transacciones
  • Canales de pagos
  • Bancos
  • Webhooks
  • Notificaciones
  • Introducción

    AMBIENTES:

    
    {
      "sandbox" :"https://sandbox.zeleri.com",
      "productivo": "https://api.zeleri.com"
    }
    

    Bienvenido a la API de Zeleri. Usando nuestra API podrás crear y manejar cobros de forma fácil, rápida y segura.

    La API esta organizada alrededor de REST. Nuestra API posee URLs predecibles y orientadas a recursos, y utiliza códigos de respuesta HTTP para indicar el resultado de la llamada. Todas las respuestas de la API retornan objetos JSON, incluyendo los errores, sin embargo, nuestros SDK convertirán las respuestas a objetos específicos de cada lenguaje.

    Utilizamos características incluidas en el protocolo HTTP, como autenticación y verbos, los cuales son soportados por la gran mayoría de los clientes HTTP. Soportamos CORS, lo cual permite interactuar de manera segura con nuestra API desde una aplicación web desde el lado del cliente.

    Tenemos bindings para Node.js! Puedes ver ejemplos de código en el área a la derecha.

    Autenticación

    La API de Zeleri utiliza API Key publica para la autenticación de solicitudes y API Key privada encriptación de data. Podras crear y eliminar tus API KEY en el Dashboard de Zeleri.

    Usos de las API Key

    La API Key publica se usara para realizar todas las consultas a la API de Zeleri mientras que la API Key privada se usara para encryptar data y desencriptar.

    Requests

    Todos los requests a Zeleri deben hacerse a través de HTTPS. Los requests realizados a través de HTTP fallarán al igual que los requests sin API KEY.

    Header de autenticación

    El header Public-Key debe verse así:

    
    Public-Key: zk_pub_F1yBmB8f5UCI1e1Z-I7rp
    
    

    Este tiene el siguiente formato:

    Public-Key: <public-key>

    Donde public-key es la Key publica de comunicación.

    Idempotencia

    La API admite Idempotencia para volver a intentar de forma segura las solicitudes sin realizar accidentalmente la misma operación dos veces. Esto es útil cuando una llamada API se interrumpe en tránsito y no recibe una respuesta. Por ejemplo, si una solicitud para crear Transacción no responde debido a un error de conexión de red, puede volver a intentar la solicitud con la misma clave de idempotencia para garantizar que no se cree más de una transacción.

    Para realizar una solicitud idempotente, proporcione un elemento al header a la solicitud. idempotency_key

    El header Idempotency-Key debe verse así:

    
    Idempotency-Key: zk_pudsb_F1yBmB8f5UCI1e1Z-I7rp
    
    

    Que es idempotencia

    Una clave de idempotencia es un valor único generado por el cliente que el servidor utiliza para reconocer los reintentos posteriores de la misma solicitud. La forma de crear claves únicas depende de usted, pero le sugerimos que use V4 UUID u otra cadena aleatoria con suficiente entropía para evitar colisiones.

    Encriptacion

    La API de Zeleri procesa algunos de sus endpoint mas sencibles con encriptación de la data enviada, para esta encriptación Zeleri usa el algoritmo AES-256 con el modo CBC que junto a la llave privada y el IV del cliente genera un hash que es enviado en el request como payload.

    El payload Payload debe verse así:

    {
      "payload":"ZrVP7N3cYSFgHHWwmAsn5dpm5+KDcB2EQuNW+h9pZ+SRQ/Jw9bdjXoZAKQ8hXMzpjIXEmRzKdtO8+yiqh8Ya2tVur9eGLHbgYy2qxncKZFdIHdsEdJwuR10mdBd4eHBZDV2qpWdRVk5Wcuv08Mos7XZMF8WoykuAO6Zc1K9RE9g="
    }
    
    
    

    Formato de encriptación

    Zeleri en su SDK proporciona los metodos para encriptar y desencriptar, estos metodos usan la llave privada seteada en su enviroment, en caso de no usar el sdk es necesario crear su propio metodo en encriptación con el algoritmo AES-256 con el modo CBC que junto a la llave privada y el IV sera los primeros 16 caracteres de la llave privada

    Metodo en el SDK:

    
    'use strict';
    const Crypto = require('crypto');
    
    const utils = (module.exports = {
    
      encrypt: (prop,payload) => {
        var cipher = Crypto.createCipheriv('aes-256-cbc', prop.private_key, prop.private_key.slice(0, 16))
        var crypted = cipher.update(payload, 'utf-8', 'base64');
        crypted += cipher.final('base64');
        return crypted
      },
    
      decrypt: (prop,payload) => {
        var decipher = Crypto.createDecipheriv('aes-256-cbc', prop.private_key, prop.private_key.slice(0, 16))
        var decrypted = decipher.update(payload, 'base64', 'utf-8');
        decrypted += decipher.final('utf-8');
        return decrypted
      }
    });
    
    
    
    Próximamente
    Próximamente
    Próximamente
    Próximamente
    Próximamente
    Próximamente
    Próximamente
    Próximamente
    Próximamente
    Próximamente
    
    

    Errores

    Ejemplo de respuesta

    {
      "error": {
        "message": "amount parameter required"
      }
    }
    

    Zeleri usa respuestas HTTP convencionales para indicar el éxito o fracaso de un request. En general, códigos en el rango de los 2xx indican éxito, códigos en el rango 4xx indican un error que falló debido a la información proporcionada (ej: un parámetro requerido fue omitido, un pago falló, etc.), y códigos en el rango de los 5xx indican un error con los servidores de Zeleri (estos son raros).

    Atributos

    message

    string

    opcional

    Un mensaje legible que provee mas detalles acerca del error.

    Códigos de error

    200

    Ok

    Todo funcionó como se esperaba.
    400

    Bad Request

    Hay un problema con tu request
    401

    Unauthorized

    Tu api key es incorrecta
    403

    Forbidden

    No tienes permiso para ver esta página
    404

    Not Found

    El recurso especificado no fue encontrado
    422

    Unprocessable Entity

    No podemos procesar tu solicitud, revísala.
    429

    Too Many Requests

    Estas solicitando muchos recursos! Detente!
    500, 502, 503, 504

    Internal Server Error

    Tuvimos un problema con nuestro servidor. Inténtalo nuevamente mas tarde (estos son raros)

    Paginación, filtros y orden

    Ejemplo

    
    const fetch = require('node-fetch-json');
    fetch('https://api.zeleri.com/customers?page=1&limit=10&order_field=name&order=DESC', {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      },
    }).then(function(response) {
      console.log(response);
    });
    
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/customers?page=1&limit=10&order_field=name&order=DESC', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Todos los recursos que retornen un arreglo o lista, soportan paginación, filtros y orden. Por defecto, los valores se ordenan por fecha de creación, donde los mas recientes se ubicarán primero en el arreglo.

    Paginación

    La paginación se realiza definiendo el número de entradas por página a través del parámetro limit y se navega mediante el parámetro page.

    Por ejemplo, para obtener la segunda página desplegando 20 entradas por página:

    GET /recurso&page=1&limit=20

    Para facilitar la navegación y el despliegue de número de páginas, en la respuesta existen un objecto pagination con los siguientes parametros total, perPage , page y lastPage que representan la total de páginas, la cantidad por página, la página actual y la página siguiente respectivamente.

    Filtros

    Ejemplo de filtro

    
    const fetch = require('node-fetch-json');
    fetch('https://api.zeleri.com/customers?name=sheldon', {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      },
    }).then(function(response) {
      console.log(response);
    });
    
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/customers?name=sheldon', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Los parametros funcionan con un %like% cuando realizamos el filtro buscara todos los que coincidan o contentan la información que se trata de filtrar Cabe mencionar que múltiples filtros son soportados.

    Orden

    Se puede definir el orden de despligue de las entradas mediante el parámetro order_field y el parametro order. Este acepta un string con la siguiente estructura:

    :order_field :order

    El órden sólo se puede aplicar sobre un argumento y no soporta órdenes anidados.

    Por ejemplo, si deseamos ordenar un recurso por fecha de creación de manera ascendente, realizamos:

    Ordenar por fecha de creación de manera ascendente

    Ordenar por fecha de creación de manera ascendente

    
    const fetch = require('node-fetch-json');
    fetch('https://api.zeleri.com/customers?order_field=created_at&order=asc', {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      },
    }).then(function(response) {
      console.log(response);
    });
    
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/customers?order_field=created_at&order=asc', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Atributos Paginación

    page

    integer

    Número de página
    limit

    integer

    Número de entradas por página.
    order_field

    string

    Campo por el cual se requiere ordenar
    order

    string

    Orden de despliegue de las entradas

    Clientes

    Los objetos de clientes permiten realizar cobros recurrentes y tener un registro de los mútliples cobros que estan asociados a un mismo cliente. El API permite crear, actualizar y eliminar clientes. Se puede obtener un cliente en particular, así como también una lista de clientes.

    El objeto cliente

    Ejemplo de respuesta

    {
        "id": "cus_GM7HnvbEiueHIE8z2tkJM",
        "unique_id": "sheldoncooper@bazinga.com",
        "name": "sheldon cooper",
        "email": "sheldoncooper@bazinga.com",
        "phone": "+56988888888",
        "payment_methods": [],
        "total_transactions": 0
    }
    

    Atributos

    id

    string

    Identificador único del objeto en zeleri.
    unique_id

    string

    Identificador único del objeto para el cliente, puede ser cualquier formato de string.
    name

    string

    Nombre del cliente.
    email

    string

    Dirección email del cliente.
    phone

    string

    Teléfono del cliente.
    payment_methods

    Array<PaymentMethod>

    Metodos de pagos vinculados al cliente.
    total_transactions

    Integer

    Cantidad de transacciones vinculadas al cliente.

    Crear un cliente

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/customers', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key': '4e93a42c-5c96-11ea-bc55-0242ac130003'
      },
      body: {
        email: "sheldoncooper@bazinga.com",
        name: "sheldon cooper",
        phone: "+56988888888",
        unique_id: "4e93a42c-5c96-11ea-bc55-0242ac130003"
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('POST', 'https://api.zeleri.com/customers', [
      'json' => [
         'email' => 'sheldoncooper@bazinga.com',
         'name' => 'sheldon cooper',
         'phone' => '+56988888888',
         'unique_id' => "4e93a42c-5c96-11ea-bc55-0242ac130003"
       ],
      'headers' => [
        'Accept'=> 'application/json',
        'Content-Type'=> 'application/json',
        'Public-Key'=> 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key'=> '4e93a42c-5c96-11ea-bc55-0242ac130003'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "id": "cus_GM7HnvbEiueHIE8z2tkJM",
        "unique_id": "sheldoncooper@bazinga.com",
        "name": "sheldon cooper",
        "email": "sheldoncooper@bazinga.com",
        "phone": "+56988888888",
        "payment_methods": [],
        "total_transactions": 0
    }
    

    POST /customers

    Crea un nuevo objeto cliente

    Parámetros

    email

    string

    Requerido

    Dirección email del cliente.
    name

    string

    Nombre del cliente.
    phone

    string

    Teléfono del cliente.
    unique_id

    Único

    Requerido

    string

    Es el id unico de referencia al cliente, puede ser un cualquier dato, no se puede repetir a menos que el cliente sea eliminado.

    Respuesta

    Retorna un objeto de cliente si la llamada es exitosa. Si existe otro cliente con el mismo email, retornará un error.

    Obtener un cliente

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/customers/cus_GM7HnvbEiueHIE8z2tkJM', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/customers/cus_GM7HnvbEiueHIE8z2tkJM', [
      'headers' => [
        'Accept'=> 'application/json',
        'Content-Type'=> 'application/json',
        'Public-Key'=> 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "id": "cus_GM7HnvbEiueHIE8z2tkJM",
        "unique_id": "sheldoncooper@bazinga.com",
        "name": "sheldon cooper",
        "email": "sheldoncooper@bazinga.com",
        "phone": "+56988888888",
        "payment_methods": [],
        "total_transactions": 0
    }
    

    GET /customers/{customer_id}

    Obtiene los detalles de un cliente existente. Se necesita proporcionar sólo el identificador único del cliente el cual fue retornado al momento de su creación.

    Parámetros

    customer_id

    Requerido

    string

    Identificador único del cliente.

    Respuesta

    Retorna un objeto de cliente si se provee de un identificador válido.

    Actualizar un cliente

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/customers/cus_GM7HnvbEiueHIE8z2tkJM', {
      method: 'PUT',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      },
      body: {
        email: "sheldoncooper@bazinga.com",
        name: "sheldon cooper"
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('PUT', 'https://api.zeleri.com/customers/cus_GM7HnvbEiueHIE8z2tkJM', [
      'json' => [
        'email' => 'sheldoncooper@bazinga.com',
        'name' => 'sheldon cooper'
      ],
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "id": "cus_GM7HnvbEiueHIE8z2tkJM",
        "unique_id": "sheldoncooper@bazinga.com",
        "name": "sheldon cooper",
        "email": "sheldoncooper@bazinga.com",
        "phone": "+56988888888",
        "payment_methods": [],
        "total_transactions": 0
    }
    

    PUT /customers/{customer_id}

    Actualiza el cliente especificado con los parametros provistos. Cualquier parámetro que no se provea quedará inalterado. Por ejemplo, si se provee el parametro name, este será el nuevo nombre del cliente.

    Parámetros

    customer_id

    Requerido

    string

    Identificador único del cliente.
    nombre

    string

    Nombre.
    email

    string

    Dirección email.
    phone

    string

    Teléfono.

    Respuesta

    Retorna el objeto del cliente si la actualización es exitosa. Retorna un error si algun parámetro de actualización es inválido (ej: identificador de medio de pago inválido).

    Eliminar un cliente

    Ejemplo de llamada

    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/customers/cus_GM7HnvbEiueHIE8z2tkJM', {
      method: 'DELETE',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('DELETE', 'https://api.zeleri.com/customers/cus_GM7HnvbEiueHIE8z2tkJM', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    DELETE /customers/{customer_id}

    Elimina permanentemente un cliente. Esta acción es irreversible. Si existieran suscripciones activas asociadas al cliente, estas se cancelarán inmediatamente.

    Parámetros

    customer_id

    Requerido

    string

    Identificador único del cliente.

    Respuesta

    Retorna una respuesta comun con un mensaje de SUCCESS si el cliente fue eliminado con éxito. Si el identificador del cliente no es válido, retornará un error.

    Obtener una lista de clientes

    Ejemplo de llamada

    
    fetch('https://api.zeleri.com/customers', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/customers', [
      'headers' => [
        'Accept'=> 'application/json',
        'Content-Type'=> 'application/json',
        'Public-Key'=> 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "pagination": {
            "total": 10,
            "perPage": 20,
            "page": 1,
            "lastPage": 1
        },
        "data":[
            {
              "id": "cus_GM7HnvbEiueHIE8z2tkJM",
              "unique_id": "sheldoncooper@bazinga.com",
              "name": "sheldon cooper",
              "email": "sheldoncooper@bazinga.com",
              "phone": "+56988888888",
              "payment_methods": [],
              "total_transactions": 0
            },
            {
              "id": "cus_GM7HnvbEiueHIE8z2tkJM",
              "unique_id": "sheldoncooper@bazinga.com",
              "name": "sheldon cooper",
              "email": "sheldoncooper@bazinga.com",
              "phone": "+56988888888",
              "payment_methods": [],
              "total_transactions": 0
            }
          ]
    }
    

    GET /customers

    Retorna una lista de clientes. Los clientes se encuentran ordenados por defecto por la fecha de creación, donde los mas recientes aparecerán primero.

    Respuesta

    Un arreglo donde cada entrada representa a un cliente con su respectiva información.

    Obtener la lista de transacciones de un de clientes

    Ejemplo de llamada

    
    fetch('https://api.zeleri.com/customers/cus_N9X5ZbIiFfPU7OukkZtBl/transactions', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/customers/cus_N9X5ZbIiFfPU7OukkZtBl/transactions', [
      'headers' => [
        'Accept'=> 'application/json',
        'Content-Type'=> 'application/json',
        'Public-Key'=> 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "pagination": {
            "total": 1,
            "perPage": 20,
            "page": 1,
            "lastPage": 1
        },
        "data": [
            {
                "refunds": [],
                "id": "trx_2ghjT8uEzTlhJ-aqTuTPB",
                "amount": 799990,
                "buy_order": "cus_N9X5Zb1592861047",
                "status": "approved",
                "description": "Mac Mini",
                "attempted_at": null,
                "approved_at": "2020-06-23 01:24:08 +00:00",
                "refunded_at": null,
                "declined_at": null,
                "canceled_at": null,
                "response_message": "aprobado",
                "idempotency_key": null
            }
        ]
    }
    

    GET /customers/:id/transactions

    Retorna una lista de transacciones de un cliente especifico.

    Metodos de pagos

    Los objetos de clientes permiten realizar cobros recurrentes y tener un registro de los mútliples cobros que estan asociados a un mismo cliente. El API permite crear, actualizar y eliminar clientes. Se puede obtener un cliente en particular, así como también una lista de clientes.

    El objeto metodo de pago

    Ejemplo de respuesta

    {
        "id": "pym_wGzj5u2KyLk9JE7d_F3tR",
        "card_last4": "6623",
        "card_type": "credit",
        "card_brand": "Visa",
        "card_exp_date": null,
        "one_time": false,
        "status": "success",
        "bank": {
            "id": "bnk_awvfmgo7KqLs5zrv673MD",
            "name": "Banco Security",
            "logo": "https://zeleri.s3-us-west-2.amazonaws.com/banks/white_logos/049.png",
            "brand_color_start": "#1E1B75",
            "brand_color_end": "#5E007E",
            "logo_color": "https://zeleri.s3-us-west-2.amazonaws.com/banks/color_logos/049.png",
            "website": "bancosecurity.cl",
            "keywords": "bancosecurity.cl",
            "country_code": "cl"
        },
        "gateway": {
            "id": "gtw_EmzNS_i1JpkBviDqlqY4u",
            "name": "WebPay OneClick",
            "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
            "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
            "description": "Tarjetas de Crédito"
        }
    }
    

    Atributos

    id

    string

    Identificador único del objeto.
    card_last4

    string

    Los ultimos 4 digitos de la tarjeta.
    card_type

    string

    Tipo de tarjeta debito / credito.
    card_brand

    string

    Marca de la tarjeta Visa / Mastercard / American Express.
    card_exp_date

    string

    Fecha de expiración del metodo de pago.
    bank

    Array<Bank>

    Banco vinculado a la tarjeta.
    gateway

    Array<Gateway>

    Canal de pago del metodo de pago.

    Crear un metodo de pago

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/payment_methods', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key': '4e93a42c-5c96-11ea-bc55-0242ac130003'
      },
      body: {
        customer_id: "cus_6pHJAXNR90MPbpokn8LdJ",
        gateway_id: "gtw_EmzNS_i1JpkBviDqlqY4u"
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('POST', 'https://api.zeleri.com/payment_methods', [
      'json' => [
         'customer_id' => 'cus_6pHJAXNR90MPbpokn8LdJ',
         'gateway_id' => 'gtw_EmzNS_i1JpkBviDqlqY4u'
       ],
      'headers' => [
        'Accept'=> 'application/json',
        'Content-Type'=> 'application/json',
        'Public-Key'=> 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key'=> '4e93a42c-5c96-11ea-bc55-0242ac130003'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
      "url": "https://webpay3gint.transbank.cl/webpayserver/bp_multicode_inscription.cgi?TBK_TOKEN=e3e437c9e652ab1d9b44c5badf3c735c8f070163edbbcb1c85f571e01893c5ea",
      "id": "pym_R-eiCrzNrKhgqJymiX6Hb"
    }
    

    POST /payment_methods

    Crea un nuevo metodo de pago

    Parámetros

    customer_id

    Único

    Requerido

    string

    Identificador único del cliente que enrrolara.
    gateway_id

    Único

    Canal de enrolamiento, si tienes un canal por defecto entonces este campo es opcional.

    Respuesta

    Retorna un objeto de enrolamiento si la llamada es exitosa. En caso contrario, retornará un error.

    Obtener un metodo de pago

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/payment_methods/pym_R-eiCrzNrKhgqJymiX6Hb', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/payment_methods/pym_R-eiCrzNrKhgqJymiX6Hb', [
      'headers' => [
        'Accept'=> 'application/json',
        'Content-Type'=> 'application/json',
        'Public-Key'=> 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "id": "pym_wGzj5u2KyLk9JE7d_F3tR",
        "card_last4": "6623",
        "card_type": "credit",
        "card_brand": "Visa",
        "card_exp_date": null,
        "one_time": false,
        "status": "success",
        "bank": {
            "id": "bnk_awvfmgo7KqLs5zrv673MD",
            "name": "Banco Security",
            "logo": "https://zeleri.s3-us-west-2.amazonaws.com/banks/white_logos/049.png",
            "brand_color_start": "#1E1B75",
            "brand_color_end": "#5E007E",
            "logo_color": "https://zeleri.s3-us-west-2.amazonaws.com/banks/color_logos/049.png",
            "website": "bancosecurity.cl",
            "keywords": "bancosecurity.cl",
            "country_code": "cl"
        },
        "gateway": {
            "id": "gtw_EmzNS_i1JpkBviDqlqY4u",
            "name": "WebPay OneClick",
            "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
            "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
            "description": "Tarjetas de Crédito"
        },
        "customer": {
            "id": "cus_6pHJAXNR90MPbpokn8LdJ",
            "name": "sheldon cooper"
        }
    }
    

    GET /payment_methods/{payment_method_id}

    Obtiene los detalles de un cliente existente. Se necesita proporcionar sólo el identificador único del cliente el cual fue retornado al momento de su creación.

    Parámetros

    customer_id

    Requerido

    string

    Identificador único del cliente.

    Respuesta

    Retorna un objeto de cliente si se provee de un identificador válido.

    Eliminar un metodo de pago

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/payment_methods/pym_wGzj5u2KyLk9JE7d_F3tR', {
      method: 'DELETE',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('DELETE', 'https://api.zeleri.com/payment_methods/pym_wGzj5u2KyLk9JE7d_F3tR', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    DELETE /payment_methods/{payment_method_id}

    Elimina permanentemente un metodo de pago. Esta acción es irreversible.

    Parámetros

    payment_method_id

    Requerido

    string

    Identificador único del metodo de pago.

    Respuesta

    Retorna una respuesta comun con un mensaje de SUCCESS si el cliente fue eliminado con éxito. En cualquier otro caso retornara un error.

    Transacciones

    Las transacciones representan movimientos en el sistema en torno a pagos. Estos pueden ser transaccionales o vinculados a un "transable", como una suscripción.

    El objeto transacción

    {
        "id": "trx_2Ef05fTvFKihmqH6MH5dk",
        "amount": 100,
        "buy_order": "cus_6pHJAX1582648391",
        "status": "approved",
        "description": null,
        "attempted_at": null,
        "approved_at": "2020-02-25 13:33:15 +00:00",
        "refunded_at": null,
        "declined_at": null,
        "response_message": "aprobado",
        "idempotency_key": "3232222111323552121",
        "gateway": {
              "id": "gtw_EmzNS_i1JpkBviDqlqY4u",
              "name": "WebPay OneClick",
              "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
              "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
              "description": "Tarjetas de Crédito"
        }
    }
    

    Atributos

    id

    string

    Identificador único del objeto.
    amount

    integer

    Monto de la transacción.
    buy_order

    string

    Numero de orden.
    description

    string

    Corresponde a la descripción de la transacción. Puede ser útil para identificar un producto u orden de compra del comercio.
    gateway

    string

    Corresponde a la vía de pago por la cual se efectuó la transacción. Puede ser: webpay_oneclick.
    status

    string

    Estado de la transacción. Puede ser: pending, approved, pending_refunded, refunded, declined.
    approved_at

    datetime

    Fecha de aprobación.
    refunded_at

    datetime

    Fecha de reembolso.
    declined_at

    datetime

    Fecha de rechazo.
    attempted_at

    datetime

    Fecha de reintento.

    Generar una transacción

    El payload del request para la creación de una transacción debe viajar encriptado, ZELERI desencripta el payload, ZELERI responde con un un error. cualquier request de creación de transacción que no se encuentre encriptado previamente, es del deber del cliente encriptar su payload. ZELERI en su SDK facilita un metodo de encriptación, para mas detalles revisar encriptación.

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/transactions', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key': '4e93a42c-5c96-11ea-bc55-0242ac130003'
      },
      body: {
        payload:"32234d4557c9935d4ae86be99f302e08442ad72983100ds1f660fc2cb6e47e2b20854b5188246d9e76bfa8aeb62383f258869d7baf3067b25b5736f15d215995c61ed12f912070979ac34217a5dc17d5bc8e064b305a2c0cd43154c84a904fcded64a0ee4b75081e7a376bbd2a59a7993e74e10c84f502c04b1c804350bc3f1ab594a7dcd14fdcfb34a473c19b654829d2a0a6c7d1176179ae8e944b01d4c6ba5a"
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('POST', 'https://api.zeleri.com/transactions', [
      'json' => [
        'payload' => "32234d4557c9935d4ae86be99f302e08442ad72983100ds1f660fc2cb6e47e2b20854b5188246d9e76bfa8aeb62383f258869d7baf3067b25b5736f15d215995c61ed12f912070979ac34217a5dc17d5bc8e064b305a2c0cd43154c84a904fcded64a0ee4b75081e7a376bbd2a59a7993e74e10c84f502c04b1c804350bc3f1ab594a7dcd14fdcfb34a473c19b654829d2a0a6c7d1176179ae8e944b01d4c6ba5a"
      ],
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key' => '4e93a42c-5c96-11ea-bc55-0242ac130003'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Headers

    Idempotency-Key

    string

    Corresponde a la llave para dar seguimiento a la transacción en caso de ejecutar nuevamente Idempotencia.

    Atributos

    payment_method_id

    Único

    Requerido

    string

    Identificador único del metodo de pago a autilizar.
    amount

    integer

    Requerido

    Monto de la transacción.
    async

    Boolean

    Opción para ejecutar la transacción mediante webhooks o de manera syncrona.
    commerce_id

    string

    Identificador único del comercio, es obligatorio solo si el gateway es de tipo mall ( multicomercio ).

    Ejemplo de respuesta

    {
        "id": "trx_2Ef05fTvFKihmqH6MH5dk",
        "amount": 15000,
        "buy_order": "cus_6pHJAX1582648391",
        "status": "pending",
        "description": null,
        "attempted_at": null,
        "approved_at": null,
        "refunded_at": null,
        "declined_at": null,
        "response_message": "pending",
        "idempotency_key": "eiCrzNrKhgqJymiX6Hb",
        "gateway": {
              "id": "gtw_EmzNS_i1JpkBviDqlqY4u",
              "name": "WebPay OneClick",
              "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
              "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
              "description": "Tarjetas de Crédito"
        }
    }
    
    

    Obtener una transacción

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/transactions/trx_2Ef05fTvFKihmqH6MH5dk', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/transactions/trx_2Ef05fTvFKihmqH6MH5dk', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "id": "trx_2Ef05fTvFKihmqH6MH5dk",
        "amount": 15000,
        "buy_order": "cus_6pHJAX1582648391",
        "status": "pending",
        "description": null,
        "attempted_at": null,
        "approved_at": null,
        "refunded_at": null,
        "declined_at": null,
        "response_message": "pending",
        "idempotency_key": "eiCrzNrKhgqJymiX6Hb",
        "gateway": {
              "id": "gtw_EmzNS_i1JpkBviDqlqY4u",
              "name": "WebPay OneClick",
              "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
              "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
              "description": "Tarjetas de Crédito"
        }
    }
    
    

    GET /transactions/{transaction_id}

    Obtiene los detalles de una transacción existente.

    Parámetros

    transaction_id

    Requerido

    string

    Identificador único de la transacción.

    Respuesta

    Retorna un objeto de transacción si se provee de un identificador válido. De lo contrario, retornará un error.

    Reembolsar una transacción

    Ejemplo de llamada

    
    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/transactions/trx_2Ef05fTvFKihmqH6MH5dk/refund', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key': '4e93a42c-5c96-11ea-bc55-0242ac130003'
      },
      body: {}
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('POST', 'https://api.zeleri.com/transactions/trx_2Ef05fTvFKihmqH6MH5dk/refund', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp',
        'Idempotency-Key' => '4e93a42c-5c96-11ea-bc55-0242ac130003'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "id": "trx_hRRi9m8oNvqoC40Vdsm_p",
        "amount": 100,
        "buy_order": "cus_6pHJAX1582653755",
        "status": "refunded",
        "description": null,
        "attempted_at": null,
        "approved_at": "2020-02-25 09:02:38 +00:00",
        "refunded_at": "2020-02-25 15:03:29 +00:00",
        "declined_at": null,
        "response_message": "reversado",
        "idempotency_key": "32323212333",
        "gateway": {
              "id": "gtw_EmzNS_i1JpkBviDqlqY4u",
              "name": "WebPay OneClick",
              "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
              "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
              "description": "Tarjetas de Crédito"
        }
    }
    

    POST /transactions/{transaction_id}/refund

    Crea un reembolso para una transacción existente. Se reembolzará la totalidad del monto pagado. Sólo se soportan reembolosos para los pagos en crédito de los gateway webpay_oneclick y durante el periodo de tiempo estipulado

    Parámetros

    transaction_id

    Requerido

    string

    Identificador único de una transacción.

    Respuesta

    Retorna un objeto de transacción si la llamada es exitosa. Si la vía de pago no soporta reembolsos o se a excedido el tiempo para reembolso , retornará un error.

    Obtener el listado de transacciones

    Ejemplo de llamada

    
    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/transactions', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/transactions', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    {
        "id": "trx_2Ef05fTvFKihmqH6MH5dk",
        "amount": 15000,
        "buy_order": "cus_6pHJAX1582648391",
        "status": "pending",
        "description": null,
        "attempted_at": null,
        "approved_at": null,
        "refunded_at": null,
        "declined_at": null,
        "response_message": "pending",
        "idempotency_key": "eiCrzNrKhgqJymiX6Hb",
        "gateway": {
              "id": "gtw_EmzNS_i1JpkBviDqlqY4u",
              "name": "WebPay OneClick",
              "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
              "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
              "description": "Tarjetas de Crédito"
        }
    }
    
    

    GET /transactions

    Obtiene el listado de transacciones ordenadas por fecha de creación por defecto.

    Respuesta

    Retorna un arreglo con obejectos de transacción.

    Canales de pagos

    Los medios de pagos son bla bla bla

    Obtener una lista de medios de pagos

    Ejemplo de llamada

    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/gateways', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/gateways', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    [
    
      {
          "id": "gtw_EmzNS_i1JspkBviDqlqY4u",
          "name": "WebPay OneClick",
          "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
          "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
          "description": "Tarjetas de Crédito"
      },
      {
          "id": "gtw_SWveaCnb7wSMe-UqwJYmZQ",
          "name": "Banco de Chile",
          "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/001.png",
          "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/001.png",
          "description": "Cuenta Vista y Corriente"
      },
    ]
    

    GET /gateways

    Retorna una lista de medios de pagos habilitados en zeleri.

    Respuesta

    Un arreglo donde cada entrada representa a un medio de pago con su respectiva información.

    Obtener una lista de medios de pagos habilitados para en tu integración

    Ejemplo de llamada

    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/gateways/enabled', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/gateways/enabled', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    [
    
      {
          "id": "gtw_EmzNS_i1JspkBviDqlqY4u",
          "name": "WebPay OneClick",
          "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/oneclick.png",
          "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/oneclick.png",
          "description": "Tarjetas de Crédito"
      },
      {
          "id": "gtw_SWveaCnb7wSMe-UqwJYmZQ",
          "name": "Banco de Chile",
          "logo": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/logos/001.png",
          "icon": "https://zeleri.s3-us-west-2.amazonaws.com/gateways/icon/001.png",
          "description": "Cuenta Vista y Corriente"
      },
    ]
    

    GET /gateways/enabled

    Retorna una lista de medios de pagos que se encuentra habilitados en tu lista de client gateway configurados.

    Respuesta

    Un arreglo donde cada entrada representa a un medio de pago con su respectiva información.

    Bancos

    Los bancos son información mantenida por zeleri para bla bla bla bla

    Obtener una lista de bancos

    Ejemplo de llamada

    const fetch = require('node-fetch-json');
    
    fetch('https://api.zeleri.com/banks', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Public-Key': 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      }
    }).then(function(response) {
      console.log(response);
    });
    
    <?php
    require 'guzzle.phar';
    
    $client = new GuzzleHttp\Client();
    
    $body = $client->request('GET', 'https://api.zeleri.com/banks', [
      'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Public-Key' => 'zk_pub_F1yBmB8325UCI1e1Z-I7rp'
      ]
    ])->getBody();
    
    $response = json_decode($body);
    
    var_dump($response);
    ?>
    

    Ejemplo de respuesta

    [
    
      {
          "id": "bnk_fdjvne3qed1KfSz-iPU-8o",
          "name": "Banco Santander",
          "logo": "https://zeleri.s3-us-west-2.amazonaws.com/banks/white_logos/037.png",
          "brand_color_start": "#D82E1F",
          "brand_color_end": "#C70000",
          "logo_color": "https://zeleri.s3-us-west-2.amazonaws.com/banks/color_logos/037.png",
          "website": "santander.cl",
          "keywords": "santander.cl",
          "country_code": "cl"
      },
      {
          "id": "bnk_UMcmK03QKOj-PM81h9KM8s",
          "name": "Banco Bci",
          "logo": "https://zeleri.s3-us-west-2.amazonaws.com/banks/white_logos/016.png",
          "brand_color_start": "#5A595A",
          "brand_color_end": "#C6C6C6",
          "logo_color": "https://zeleri.s3-us-west-2.amazonaws.com/banks/color_logos/016.png",
          "website": "bci.cl",
          "keywords": "bci.cl",
          "country_code": "cl"
      },
    ]
    

    GET /banks

    Retorna una lista de bancos.

    Respuesta

    Un arreglo donde cada entrada representa a un banco con su respectiva información.

    Webhooks

    Los Webhooks son callbacks que notifican a tu backend cuando ocurren acciones que lo ameriten. en tu cuenta.

    Por ejemplo: Cuando se genera una transacción, un Webhook te permite recibir una notificación para que puedas tomar una acción dependiendo del resultado de dicha transacción, como enviar un email al usuario sobre su cobro.

    Los Webhooks son útiles en dos situaciones:

    Cuando una notificación ocurre, Zeleri crea un objeto de notificación. Este objeto contiente toda la información relevante de lo ocurrido. Zeleri luego envía el objeto de notificación a través de una llamada HTTP POST a una URL que tú definas para ese propósito. Puedes registar la URL aquí y ver la lista completa de notificaciones aquí.

    Algunos casos de uso son:

    Recibiendo una notificación webhook

    
    // Using Express
    app.post("/my/webhook/url", function(request, response) {
      // Retrieve the request's body and parse it as JSON
      const zeleri = require('zeleri')()
      const result = request.body
    
      let resp = await zeleri.utils.decrypt(result.data)
      let data = JSON.parse(resp)
    
      // Do something with event_json
    
      response.send(200);
    });
    

    Crear un endpoint para recibir webhooks, no es distinto a crear cualquier otra página en tu sitio. Basta con crear una nueva ruta con la URL deseada.

    Los datos del webhook son enviado en formato JSON en el body o cuerpo de la llamada POST. Todos los detalles de la notificación están incluidos y pueden ser usados diréctamente (luego de desencryptar y parsear el JSON).

    Respondiendo a un webhook

    Para acusar recibo del webhook, tu endpoint debe retornar un estado HTTP 200. Cualquier otra información retornada en la cabecera o cuerpo de la llamada será ignorada. Cualquier respuesta que no sea código 200, incluyendo códigos en el rango 3xx, indicará a Zeleri que no se recibió el webhook.

    Si un webhook no es recibido con éxito por cualquier razón, Zeleri continuará tratando de enviar el webhook cada 2 segundos con 3 intentos, dependiendo del caso de notificación enviada Zeleri tomara medidas.

    Por ejemplo: Cuando se genera un transacción autorizada y Zeleri no recibe un código 200 en ninguno de los intentos, Zeleri automaticamente reversara la transacción.

    Buenas prácticas

    Antes de ir a producción, prueba que tu webhook esta funcionando de manera adecuada.

    Si tu endpoint para webhooks ejecuta lógica compleja o realiza llamadas HTTP, es posible que se produzca un timeout antes de que Zeleri pueda ser notificado de la recepción. Por esta razón, es mejor acusar recibo inmediatamente del webhook retornando un código HTTP 200 y luego realizar el resto de las tareas.

    Notificaciones

    Las notificaciones nos permiten comunicarte cambios relevantes en el sistema. Cuando ocurre una situación que involucra comunicación indirecta. Por ejemplo, cuando se autoriza una transacción esta tiene dos formato sincrona y asincrona si la solicitud es asincrona la respues inmediata sera con la transacción pending y a su vez sera responsabilidad del backend del cliente recibir mediante un webhooks la notificación enviada desde zeleri, se crea un tipo de notificación transaction:result;

    Las notificaciones pueden ser enviados diréctamente a tu servidor a través de la utilización de webhooks. Puedes adminstrarlos en la configuración de tu cuenta.

    El objeto notificación

    Ejemplo de respuesta

    {
      "id": "ntf_8ID62xjXVzaSQLnEqFOkU",
      "type": "transaction:result",
      "data": "ZrVP7N3cYSFgHHWwmAsn5dpm5+KDcB2EQuNW+h9pZ+SRQ/Jw9bdjXoZAKQ8hXMzpjIXEmRzKdtO8+yiqh8Ya2tVur9eGLHbgYy2qxncKZFdIHdsEdJwuR10mdBd4eHBZDV2qpWdRVk5Wcuv08Mos7XZMF8WoykuAO6Zc1K9RE9g="
    }
    

    Atributos

    id

    string

    Identificador único del objeto.
    type

    string

    Descripción de la notificación (ej: transaction:result, payment:method:create:result, etc.).
    data

    hash

    Objeto que contiene la información en base al tipo de notificación, esta data viaja encriptada y para desencriptar la información es necesario usar los pasos descritos en encriptacion.

    Tipos de evento

    transaction:result Se notifica sobre el resultado de una transacción ya sea exitosa o fallida. la data desencripta es el contenido del objecto transacción
    payment:method:create:result Se notifica sobre el resulta en el enrolamiento de un método de pago. la data desencripta es el contenido del objecto métodos-de-pagos
    payment:method:update:result Se notifica sobre la actualización de un método de pago esto es cuando se realiza la actualización del banco mediante nuestros SDK moviles. la data desencripta es el contenido del objecto métodos-de-pagos