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
:order_field
nos indica porque campo quieres ordernar.:order
puede ser:DESC
orden descendenteASC
orden ascentente
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 se genera una notificación que no es un resultado directo de una llamada a la API. Como por ejemplo el cobro de una suscripción.
- Cuando existen servicios o funcionalidades que necesitan saber la respuesta a una llamada, pero éstos no la realizan diréctamente. Como por ejemplo un servcio de contabilidad que necesita actualizar el registro cuando se genera una transacción.
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í.
- Toda la data que Zeleri envia mediante Webhook se encuentra encryptadas la cual una vez recibida debe por tu backend debe ser desencryptar mediante la llave privada, en nuestro SDK existen ambas funciones encrypt y descrypt
Algunos casos de uso son:
- Actualizar la membresía de un cliente en tu base de datos cuando el pago de una suscripción es exitoso.
- Enviar un email a un cliente cuando el pago de su suscripción falla.
- Registrar una entrada en contabilidad cuando se realiza una transacción.
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 |