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.
- NodeJS
- Python
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
API_KEY=
SECRET_KEY=
Luego cree un archivo main.js e importe dependencias necesarias y cargue sus variables de entorno definidas en .env
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));
Lo primero que debe hacer es crear un directorio para su proyecto
mkdir flow-python
cd flow-python
Instale dependencias necesarias
pip install requests python-dotenv
Luego cree un archivo .env para sus variables de entorno
API_KEY=
SECRET_KEY=
Luego cree un archivo main.py, importe las dependencias necesarias y cargue sus variables de entorno de la siguiente manera
import hashlib
import hmac
import os
import requests
import uuid
from urllib.parse import urlencode
from dotenv import load_dotenv
load_dotenv()
config = {
"api_url": "https://sandbox.flow.cl/api",
"api_key": os.getenv("API_KEY"),
"secret_key": os.getenv("SECRET_KEY")
}
Cree un objeto con los parámetros requeridos por el servicio payment/create
params = {
"apiKey": config["api_key"],
"commerceOrder": str(uuid.uuid4()),
"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
sorted_params = sorted(params.items(), key=lambda x: x[0])
to_sign = "".join([f"{key}{value}" for key, value in sorted_params])
signature = hmac.new(config["secret_key"].encode(), to_sign.encode(), hashlib.sha256).hexdigest()
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:
encoded_body = urlencode(params)
response = requests.post(f"{config['api_url']}/payment/create", data=encoded_body,headers={'Content-Type':'application/x-www-form-urlencoded'})
if response.status_code == 200:
data = response.json()
print("Checkout URL:", f"{data['url']}?token={data['token']}")
else:
print("Error:", response.text)
Una vez el llamado a la api resuelva la respuesta, abra el navegador en la url logeada y podra ver el checkout de flow donde podra pagar la orden generada
Vea script completo
import hashlib
import hmac
import os
import requests
import uuid
from urllib.parse import urlencode
from dotenv import load_dotenv
load_dotenv()
config = {
"api_url": "https://sandbox.flow.cl/api",
"api_key": os.getenv("API_KEY"),
"secret_key": os.getenv("SECRET_KEY")
}
params = {
"apiKey": config["api_key"],
"commerceOrder": str(uuid.uuid4()),
"urlConfirmation": "https://mydomain.com/confirmation",
"urlReturn": "https://mydomain.com/payment-status",
"email": "juanperez123@gmail.com",
"subject": "Compra de articulos en tienda online",
"amount": 30000
}
sorted_params = sorted(params.items(), key=lambda x: x[0])
to_sign = "".join([f"{key}{value}" for key, value in sorted_params])
signature = hmac.new(config["secret_key"].encode(), to_sign.encode(), hashlib.sha256).hexdigest()
params["s"] = signature
encoded_body = urlencode(params)
response = requests.post(f"{config['api_url']}/payment/create", data=encoded_body,headers={'Content-Type':'application/x-www-form-urlencoded'})
if response.status_code == 200:
data = response.json()
print("Checkout URL:", f"{data['url']}?token={data['token']}")
else:
print("Error:", response.text)