Introducción
Bienvenido, en este documento se explica como se puede realizar una transacción en nuestra platarforma
Autenticación
Con /api/session genera un ID de sesión con vigencia de 24 horas. Se utiliza en los headers de los demás endpoints a modo de autenticación. Pasadas las 24 horas, se debe consultar para generar un ID de sesión nuevo.
Request
Request:
POST /api/session HTTP/1.1
Host: merchant-api-stg.captarpagos.com
Content-Type: application/json
Content-Length: 73
{
"apiKey": "9556c039340535e23438",
"secret": "d32d77d8f081a4333370"
}
const axios = require('axios');
let data = JSON.stringify({
"apiKey": "9556c039340535e23438",
"secret": "d32d77d8f081a4333370"
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://merchant-api-stg.captarpagos.com/api/session',
headers: {
'Content-Type': 'application/json'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
[post] https://merchant-api-stg.captarpagos.com/api/session
Parámetros disponibles
Body parameters
Body - JSON
{
"apiKey": "9556c039340535ec2438",
"secret": "d32d77d8f081a4d13370"
}
| Key | Value | Descripción |
|---|---|---|
| apiKey | 9556c... | Credenciales asignadas |
| secret | d32d7.. | Credenciales asignadas |
Response
Response:
[
{
"code": 200,
"status": "success",
"session": "11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a"
}
]
| Key | Tipo | Descripción |
|---|---|---|
| code | Integer | Indica el código del estado de respuesta |
| status | String | Indica el estado de la respuesta |
| session | String | Id de sesión para autorización |
Productos y servicios
Con /api/products se puede consultar las empresas que coinciden con el texto de búsqueda y retorna una lista
con los datos de los productos coincidentes, o una lista vacía en caso de no haber
ninguna coincidencia.
Request
Request
GET /api/products?searchName=Gasnor&paymentType=service HTTP/1.1
Host: merchant-api-stg.captarpagos.com
session: 11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a
var axios = require('axios');
var config = {
method: 'get',
url: 'https://merchant-api-stg.captarpagos.com/api/products?searchName=gasnor&paymentType=service',
headers: {
'session': '11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
[get] https://merchant-api-stg.captarpagos.com/api/products?searchName={searchName}&paymentType={paymentType}
Parámetros disponibles
Headers parameters
| Key | Value | Descripción |
|---|---|---|
| session | 11a71611ef5bffc1... | id de sesión |
Query parameters
| Key | Value | Descripcion |
|---|---|---|
| searchName | gasnor | texto de la búsqueda que se desea realizar |
| paymentType | service | tipo de servicio |
Tipos de servicio (paymentType)
Al buscar uno o más productos se tiene que definir el tipo de servicio a utilizar, se pueden seleccionar los siguientes servicios disponibles:
service: Para servicios en general, por ejemplo pago de facturas, servicios públicos, etc.
Ejemplo:
https://merchant-api-stg.captarpagos.com/api/products?searchName=gasnor&paymentType=service
topUp: Para servicios de recarga, por ejemplo recargas telefonicas, internet, tv satelital.
Ejemplo:
https://merchant-api-stg.captarpagos.com/api/products?searchName=movistar&paymentType=topUp
barCode: Para códigos de barra, por ejemplo pago de facturas con código de barra.
Ejemplo:
https://merchant-api-stg.captarpagos.com/api/products?searchName=1234567890987654321&paymentType=barCode
Response
Response:
[
{
"code": 200,
"status": "success",
"products": [
{
"id": "376",
"productName": "GASNOR",
"description": ""
}
]
}
]
| Key | Tipo | Descripción |
|---|---|---|
| code | Integer | Indica el código del estado de respuesta |
| status | String | Indica el estado de la respuesta |
| products | Array(Product) | Lista de empresas coincidentes |
Products
| Key | Tipo | Descripción |
|---|---|---|
| id | String | Identificador de la empresa, se usa para elegir la empresa a facturar |
| productName | String | Nombre de la empresa |
| description | String | Información adicional de la empresa |
Iniciar transacción
Con /api/init se asocia el proceso de transacción a un hash único para hacer seguimiento de todo el flujo sin
necesidad de pasos redundantes, optimiza el proceso. Retorna dicho hash y el
nombre de la empresa a la que se generará la factura.
Request
Request:
GET /api/init?productCode=376 HTTP/1.1
Host: merchant-api-stg.captarpagos.com
session: 11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a
var axios = require('axios');
var config = {
method: 'get',
url: 'https://merchant-api-stg.captarpagos.com/api/init?productCode=376',
headers: {
'session': '11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
[get] https://merchant-api-stg.captarpagos.com/api/init?productCode={productCode}
Parámetros disponibles
Headers parameters
| Key | Value | Descripción |
|---|---|---|
| session | 11a71611ef5bffc1... | id de sesión |
Query parameters
| Key | Value | Descripcion |
|---|---|---|
| productCode | 376 | id de la empresa escogida |
- Ejemplo:
https://merchant-api-stg.captarpagos.com/api/init?productCode=376
Response
Response:
[
{
"code": 200,
"status": "success",
"data": {
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi",
"productName": "GASNOR"
}
}
]
| Key | Tipo | Descripción |
|---|---|---|
| code | Integer | Indica el código del estado de respuesta |
| status | String | Indica el estado de la respuesta |
| data | Data | Datos consultados |
Data
| Key | Tipo | Descripción |
|---|---|---|
| hash | String | Indica el hash asociado a la factura |
| productName | String | Nombre de la empresa |
Flujo transaccional
Con /api/parameters se maneja el flujo del formulario, proporciona paso a paso los datos requeridos por la
empresa, dependiendo de la misma, y maneja las respuestas hasta que la factura
está lista para ser pagada.
Request
Request:
POST /api/parameters HTTP/1.1
Host: merchant-api-stg.captarpagos.com
session: 11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a
Content-Type: application/json
Content-Length: 86
{
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi",
"parameters": []
}
var axios = require('axios');
var data = JSON.stringify({
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi",
"parameters": []
});
var config = {
method: 'post',
url: 'https://merchant-api-stg.captarpagos.com/api/parameters',
headers: {
'session': '11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a',
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
[POST] https://merchant-api-stg.captarpagos.com/api/parameters
Parámetros disponibles
Headers parameters
| Key | Value | Descripción |
|---|---|---|
| session | 11a71611ef5bffc1... | id de sesión |
Body parameters
Body - JSON
{
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi",`
"parameters": [ ]
}
| Key | Tipo | Descripción |
|---|---|---|
| hash | String | Hash obtenido en el endpoint init |
| parameters | Array(String) | Array de string, que muestra las respuestas del formulario |
Response
Response:
[
{
"code": 200,
"status": "success",
"data": {
"options": [
{
"id": 1,
"description": "COBRANZA SIN FACTURA"
},
{
"id": 2,
"description": "COBRO DE FACTURA CON BARRAS - JUJUY"
},
{
"id": 3,
"description": "COBRO DE FACTURA CON BARRA - RESTO DEL PAIS"
}
]
}
}
]
| Key | Tipo | Descripción |
|---|---|---|
| code | Integer | Indica el código del estado de respuesta |
| status | String | Indica el estado de la respuesta |
| data | Data | Proporciona la información a solicitar |
Caso 1 – Presenta parámetro “options”: Este parámetro trae una lista de opciones. Para indicar la opción escogida, se añade el id de dicha opción al array “parameters” del request, en el siguiente llamado.
Caso 2 - Presenta parámetro “input”: Este parámetro proporciona información del dato requerido, se debe preguntar en forma de formulario, cumpliendo lo establecido. La respuesta correspondiente se debe añadir al array “parameters” del request, en el siguiente llamado.
Caso 3 – Presenta parámetro “paymentAmount”: Este parámetro indica que la factura es de monto abierto, proporcionará el monto sugerido, el mínimo y el máximo que se puede pagar. También puede presentar solo mínimo y máximo, en caso de que no haya un monto sugerido. El monto que se desee pagar se debe añadir al array “parameters” del request en el siguiente llamado, en string y con decimales, de la siguiente manera: “1.00”.
Caso 4 – Factura lista para ser pagada: Una vez que estén listos los datos del cliente y no hay más datos por solicitar, el endpoint retornará code 201 y un parámetro “data” con los datos de la factura preparada.
Data
| Key | Tipo | Descripción |
|---|---|---|
| options | Array(Option) | Arreglo de opciones de pago correspondientes |
| input | Input | Objeto con información del dato a consultar |
| paymentAmount | PaymentAmount | Objeto con información del dato a consultar |
| message | String | Indica que la factura esta lista para ser pagada |
| productCode | String | Identificador de la empresa |
| productName | String | Descripcion de la empresa |
| reference | String | Referencia de la factura |
| amount | String | Monto a pagar |
| currency | String | Moneda del pais |
| additionalData | String | Información adicional de la factura |
Option
| Key | Tipo | Descripción |
|---|---|---|
| id | Integer | Identificador de la opción |
| description | String | Descripción de la opción |
Input
| Key | Tipo | Descripción |
|---|---|---|
| name | String | Descripción del dato a solicitar |
| additionalData | String | Información adicional del dato |
| maxLength | Integer | Longitud máxima |
| minLength | Integer | Longitud mínima |
PaymentAmount
| Key | Tipo | Descripción |
|---|---|---|
| amountSuggested | Decimal | Monto sugerido |
| minAmount | Decimal | Monto mínimo |
| maxAmount | Decimal | Monto máximo |
Realizar pago
Una vez que la factura se encuentra lista para ser pagada, con /api/payBill, solo hace falta enviar el
hash de la factura a este endpoint para completar el pago.
Request
Request:
POST /api/payBill HTTP/1.1
Host: merchant-api-stg.captarpagos.com
session: 11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a
Content-Type: application/json
Content-Length: 63
{
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi"
}
var axios = require('axios');
var data = JSON.stringify({
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi"
});
var config = {
method: 'post',
url: 'https://merchant-api-stg.captarpagos.com/api/payBill',
headers: {
'session': '11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a',
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
[post] https://merchant-api-stg.captarpagos.com/api/payBill
Parámetros disponibles
Headers parameters
| Key | Value | Descripción |
|---|---|---|
| session | 11a71611ef5bffc1... | id de sesión |
Body parameters
Body - JSON
{
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi"
}
| Key | Tipo | Descripción |
|---|---|---|
| hash | String | Hash obtenido en el endpoint init |
Response
Response:
[
{
"code": 200,
"status": "success",
"data": {
"operationStatus": "SUCCESS",
"operationId": "62c78dd0801e1a06be698dd8",
"controlNumber": "999217fVqF24EBb57uW7",
"amount": 10.00,
"productName": "GASNOR",
"currency": "ARS",
"transactionDate": "2022-07-07T22:55:58.96881",
"addicionalData": "",
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi"
}
}
]
operationStatus puede ser “SUCCESS” si la factura se pagó exitosamente, y
“FAILED” en caso de que haya sido fallida.
Ticket
Con este endpoint /api/ticket retorna el ticket de una factura, tanto en texto como en pdf (url para
visualizarlo).
Request
Request:
GET /api/ticket?hash=$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi HTTP/1.1
Host: merchant-api-stg.captarpagos.com
session: 11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a
var axios = require('axios');
var config = {
method: 'get',
url: 'https://merchant-api-stg.captarpagos.com/api/ticket?hash=$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi',
headers: {
'session': '11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
[get] https://merchant-api-stg.captarpagos.com/api/ticket
Parámetros disponibles
Headers parameters
| Key | Value | Descripción |
|---|---|---|
| session | 11a71611ef5bffc1... | id de sesión |
Query parameters
| Key | Value | Descripción |
|---|---|---|
| hash | $2b$10$iwCZGPuDC... | id de la empresa escogida |
- Ejemplo:
https://merchant-api-stg.captarpagos.com/api/ticket?hash=$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi
Response
Response:
[
{
"code": 200,
"status": "success",
"data": {
"operationId": "62c84627801e1a06be698df7",
"amount": 10.00,
"pdfUrl": "https://merchant-api-stg.captarpagos.com/rp/62c84627801e1a06be698df5",
"textUrl": "https://merchant-api-stg.captarpagos.com/rt/62c84627801e1a06be698df5",
"ticketText": "RAPIPAGO\nPuesto: 999217\nFecha: 08/07/2022 Hora: 11:58:47\nCódigo de Operación: 62c84627801e1a06be698df7\nEmpresa: 376 GASNOR\n00015158\nNro de refrerencia: 00000004283977\nNro.Op:221316983148846\nCod Seg:60063CB71E\nForma de Pago Importe\nEfectivo $10.00\n** TOTAL ** $10.00\n2952010250001515800000026456121074000264560000121556\nORIGINAL\nVISÍTENOS EN WWW.RAPIPAGO.COM.AR\nAGENTE OFICIAL RAPIPAGO\n---------------*****---------------\n"
}
}
]
| Key | Tipo | Descripción |
|---|---|---|
| code | Integer | Indica el código del estado de respuesta |
| status | String | Indica el estado de la respuesta |
| data | Data | Proporciona la información del ticke |
Data
| Key | Tipo | Descripción |
|---|---|---|
| operationId | String | Identificador de la operación |
| amount | Decimal | Monto de la factura |
| pdfUrl | String | Url que muestra el PDF del ticket |
| textUrl | String | Url que muestra el texto del ticket |
| ticketText | String | Texto del ticket en string |
Consulta de transacciones
En el caso de que el endpont pagar transaccion no retorne una respuesta valida, se puede consultar mediante con el hash de la factura con /api/consult, solo hace falta enviar el
hash de la factura a este endpoint para completar el pago.
Request
Request:
GET /api/consult HTTP/1.1
Host: merchant-api-stg.captarpagos.com
session: 11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a
hash: 2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi
Content-Type: application/json
Content-Length: 63
var axios = require('axios');
var config = {
method: 'get',
url: 'https://merchant-api-stg.captarpagos.com/api/consult',
headers: {
'session': '11a71611ef5bffc1b8c70405039566064b7c544b2f6dd3dbd7b96a762d6ff88a',
'hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi',
'Content-Type': 'application/json'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
[get] https://merchant-api-stg.captarpagos.com/api/consult
Parámetros disponibles
Headers parameters
| Key | Value | Descripción |
|---|---|---|
| session | 11a71611ef5bffc1... | id de sesión |
| hash | b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOf... | Hash obtenido en el endpoint init |
Response
Response:
[
{
"code": 200,
"status": "success",
"data": {
"operationStatus": "SUCCESS",
"operationId": "62c78dd0801e1a06be698dd8",
"controlNumber": "999217fVqF24EBb57uW7",
"amount": 10.00,
"productName": "GASNOR",
"currency": "ARS",
"transactionDate": "2022-07-07T22:55:58.96881",
"addicionalData": "",
"hash": "$2b$10$iwCZGPuDCGCxXwHQs1YUBuxxpNOfFR1E3L5YWzdVxrJM.3co4FXdi"
}
}
]
operationStatus puede ser “SUCCESS” si la factura se pago exitosamente, y
“FAILED” en caso de que haya sido fallida.
Rutina de reintentos
Al intetar el pago de una transaccion y ocurre un error inesperado donde la respuesta no sea ninguna de las esperadas (Confirmación o Rechazo), se debe esperar 30 seg antes de hacer el 1er llamado al ep de consulta, si en el primer llamado a consulta ocurre un error se debe volver a llamar a consulta, en este caso si no se obtiene una respuesta esperada se espera otros 30 seg antes de hacer el tercer y ultimo llamado en el cual si no se obtiene una respuesta definitiva se debe dar por finalizada la transaccion y se debe consultar con Captar Pagos para su verificación manual.
Errores
Mensajes de respuestas comunes
| Código | Mensaje |
|---|---|
| 400 | Bad Request -- Your request is invalid. |
| 401 | Unauthorized -- Your API key is wrong. |
| 404 | Not Found -- The specified kitten could not be found. |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
Transacción finalizada
/api/payBill
Al momento de realizar una transacción el response puede llegar con un code 200, pero esto solo indica que se completó dicha solicitud, se tiene que evaluar también el operationStatus para ver si la transacción se realizó o no con éxito.
operationStatus: FAILED | SUCCESS
additionalData: [mensaje que entrega el proveedor del servicio] en el additionalData viene información de la transacción efectuada, esta varía si la transacción fue realizada o no.