Solicitudes Firmadas
Información relacionada con la forma de comunicación segura en la API
En GBC, hemos implementado una capa de seguridad de peticiones a nuestros endpoints públicos y privados, la cual consiste en generar una firma única por cada petición enviada a los ambientes de GBC. A continuación encontrarás el paso a paso para lograr firmar tus solicitudes a nuestras API.
Headers
En las cabeceras de cada petición, GBC solicitará los siguientes parámetros obligatorios:
authorization-token
string
Token que se genera genera luego del Login, se debe enviar con el siguiente formato:
"Bearer JHgytHG67687JHG..."
signature
string
Firma generada con los valores del payload y encriptada con la secret key del cliente B2B. Este resultado (firma) se envía en los headers de cada petición junto con el authorization-token.
Generación del signature (firma)
A continuación, los pasos para la generación de la firma:
Tener api-public-key y api-secret-key.
Agregar el campo generado en el momento timestamp a los datos (objeto) a firmar.
Ordenar los campos (objeto) que se quieren firmar de forma alfabética ascendente.
Pasar el objeto a tipo texto.
Ejecutar la función SHA256, donde la llave de la firma seria con el valor de la (api-secret-key)
El dato resultante de este cálculo sería lo que colocaría en el campo signature en los Headers
Ejemplo del cálculo de firma (Nodejs)
Objeto a firmar
const params = {
alias,
timestamp,
}
Función de firma
// Liberias Crypto
const CryptoJS = require("crypto-js");
const queryString = require('query-string');
const axios = require('axios');
// Claves secretas
const SECRET_KEY = 'tu-secret-key-uuid';
const PUBLIC_KEY = 'tu-public-key-uuid';
const URL = 'https://stgapicards.gbc.pe/api-hub/v1/merchants/me';
// Función de firma de datos
const signatureRequest = (params, secretKey) => {
params = Object.keys(params)
.sort()
.reduce((acc, key) => {
acc[key] = params[key];
return acc;
}, {});
const query = queryString.stringify(params);
return CryptoJS.SHA256(query, { secretKey }).toString();
}
// Ejecución de la firma en una función de ejemplo
const getUserData = (alias) =>
{
const timestamp = Math.floor(Date.now());
const params = {
alias,
timestamp,
}
const signatureResponse = signatureRequest(params, SECRET_KEY);
axios.post(URL, params, {
headers: {
'Api-Public-Key': PUBLIC_KEY,
'Signature': signatureResponse
}
})
.then( (response) => console.log('RESPONSE:::', response.data ))
.catch( (error) => console.log('ERROR:::', error.response.data));
}
Last updated