Skip to main content

Quickstart

El propósito de esta guía es que usted configure su entorno de desarrollo local y cree una orden de pago de la manera más sencilla y rápida posible.

Lo primero que debe hacer es crear un directorio para su proyecto y crear la configuración de nodejs de la siguiente manera

mkdir flow-nodejs
cd flow-nodejs
npm init -y

Luego debe instalar alguna dependencias necesarias para facilitar la integración

npm i axios dotenv

Cree archivo con sus variables de entorno

[project_path]/.env
API_KEY=
SECRET_KEY=

Luego cree un archivo main.js e importe dependencias necesarias y cargue sus variables de entorno definidas en .env

[project_path]/main.js
const crypto = require('node:crypto')
const axios = require('axios')
const dotenv = require('dotenv')
const querystring = require('node:querystring')
dotenv.config({
path:'./.env'
})

const config = {
apiUrl:"https://sandbox.flow.cl/api",
apiKey:process.env.API_KEY,
secretKey:process.env.SECRET_KEY
}

Cree un objeto con los parámetros requeridos por el servicio payment/create

const params = {
apiKey:config.apiKey,
commerceOrder: crypto.randomUUID(),
urlConfirmation:'https://mydomain.com/confirmation',
urlReturn:'https://mydomain.com/payment-status',
email: 'juanperez123@gmail.com',
subject:'Compra de articulos en tienda online',
amount:30000
}

Una vez con el objeto de los parámetros listo, usted debe generar la firma y agregarla de la siguiente manera

const secretKey = config.secretKey;
const keys = Object.keys(params);
keys.sort();
let toSign = "";
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
toSign += key + params[key];
}
const signature = crypto.createHmac("sha256",secretKey).update(toSign).digest("hex")

const body = {
...params,
s:signature
}

Una vez con el objeto listo, debe transformarlo a formato url encoded y hacer la petición https, con los datos creados de la siguiente manera:

const encodedBody = querystring.stringify(body)

axios.post(`${config.apiUrl}/payment/create`,encodedBody)
.then((response)=>console.log("checkout url",`${response.data.url}?token=${response.data.token}`))
.catch((error)=>console.error(error))

Una vez el llamado a la api resuelva la respuesta, abra el navegador en la url logeada y podrá ver el checkout de flow donde podrá pagar la orden generada

Vea script completo


const crypto = require('node:crypto');
const axios = require('axios');
const dotenv = require('dotenv');
const querystring = require('node:querystring');
dotenv.config({
path:'./.env'
});

const config = {
apiUrl: "https://sandbox.flow.cl/api",
apiKey: process.env.API_KEY,
secretKey: process.env.SECRET_KEY
};

const params = {
apiKey: config.apiKey,
commerceOrder: crypto.randomUUID(),
urlConfirmation: 'https://mydomain.com/confirmation',
urlReturn: 'https://mydomain.com/payment-status',
email: 'juanperez123@gmail.com',
subject: 'Compra de articulos en tienda online',
amount: 30000
};

const secretKey = config.secretKey;
const keys = Object.keys(params);
keys.sort();

let toSign = "";
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
toSign += key + params[key];
}

const signature = crypto.createHmac("sha256", secretKey).update(toSign).digest("hex");

const body = {
...params,
s: signature
};

const encodedBody = querystring.stringify(body);

axios.post(`${config.apiUrl}/payment/create`, encodedBody)
.then((response) => console.log("checkout url", `${response.data.url}?token=${response.data.token}`))
.catch((error) => console.error(error));