GBC
Search
⌃K

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:
Campo
Tipo de dato
Detalle
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:
  1. 1.
    Tener api-public-key y api-secret-key.
  2. 2.
    Agregar el campo generado en el momento timestamp a los datos (objeto) a firmar.
  3. 3.
    Ordenar los campos (objeto) que se quieren firmar de forma alfabética ascendente.
  4. 4.
    Pasar el objeto a tipo texto.
  5. 5.
    Ejecutar la función SHA256, donde la llave de la firma seria con el valor de la (api-secret-key)
  6. 6.
    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));
}