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.
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. |
A continuación, los pasos para la generación de la firma:
- 1.Tener api-public-key y api-secret-key.
- 2.Agregar el campo generado en el momento timestamp a los datos (objeto) a firmar.
- 3.Ordenar los campos (objeto) que se quieren firmar de forma alfabética ascendente.
- 4.Pasar el objeto a tipo texto.
- 5.Ejecutar la función SHA256, donde la llave de la firma seria con el valor de la (api-secret-key)
- 6.El dato resultante de este cálculo sería lo que colocaría en el campo signature en los Headers
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 modified 2mo ago