Generación de HMAC

Esta página guía la implementación del cálculo de HMAC para el acceso a nuestras API. HMAC es una nueva capa de seguridad que garantiza la correcta identificación del llamante.

Básicamente, esta capa funciona incluyendo una firma electrónica en las llamadas. Nuestras API, al recibir la llamada, recalcularán la misma firma y la compararán con la firma enviada.

Requisitos#

Necesitará la siguiente información, que normalmente ya se utiliza en llamadas sin esta capa de autenticación:

  • Clave API: Su identificación como cliente. Su código de cliente o ID de comercio.
  • Clave secreta: Su clave de seguridad. En llamadas sin esta capa, se envía como Clave de comercio. En llamadas con HMAC, esta información nunca se envía. Solo participa en el cálculo.

Adaptación de las llamadas#

Los ejemplos a continuación se comportarán de la misma manera que los ejemplos mencionados en la página pagemento.

Considere una llamada simple como la que se ilustra a continuación:

curl --location --request POST 'https://{{url}}/e-sitef/api/v2/payments/' \
--header 'Content-Type: application/json' \
--header 'merchant_id: MERCHANT_ID_DE_EXEMPLO' \
--header 'merchant_key: MERCHANT_KEY_DE_EXEMPLOABCDEF' \
--data-raw '{
"merchant_usn": "12050620649",
"order_id": "121314",
"installments": "10",
"installment_type": "4",
"authorizer_id": "2",
"amount": "10000",
"card": {
"expiry_date": "1222",
"security_code": "123",
"number": "5555555555555555"
}
}'
--verbose

Hagamos los siguientes cambios para que sea compatible con la nueva capa de seguridad.

  • Paso 1: Coloque el siguiente script en su Postsman como prerrequisito:
var uuid = require('uuid');
// Su identificación en el nuevo proceso de autenticación mediante HMAC (Clave API)
var key = pm.environment.get("hmacKey");
// Su clave secreta para usar en el nuevo proceso de autenticación mediante HMAC (Clave Secreta)
var secret = pm.environment.get("hmacSecret");
var correctionId = uuid.v4(); // Código único para identificar la transacción
postman.setEnvironmentVariable("correlationId", correctionId);
var time = new Date().getTime();
var método = pm.solicitud.método;
var cuerpo_solicitud = pm.solicitud.cuerpo;
var firma_en_rubro = clave + id_correlación + tiempo;
if(método != 'GET' && método != 'DELETE'){
firma_en_rubro = firma_en_rubro + cuerpo_solicitud;
}
var hash_computado = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secreto.toString());
hash_computado.update(firma_en_rubro);
hash_computado = computedHash.finalize(); var computedHmac = CryptoJS.enc.Base64.stringify(computedHash);
postman.setEnvironmentVariable('time', time);
postman.setEnvironmentVariable('Authorization', computedHmac);
  • Paso 2: Establezca las siguientes variables de encabezado en Postman:
ParámetroDescripciónFormatoObligatorio
Content-TypeDebe enviarse con el valor application/json.= 15 AN
merchant_idAlmacene el código en Carat. Los códigos de producción y certificación serán diferentes.< 15 AN
merchant_keyAlmacene la clave de autenticación en Carat. Las claves de producción y certificación serán diferentes.< 80 AN
Auth-Token-TypeIdentificación del tipo de autenticación utilizado en la llamada. En este caso, HMAC< 10 AN
AuthorizationResultado generado en la rutina JavaScript del paso 1. En Postman, {Authorization} se puede usar para obtener la variable de entorno creada por el script< 250 AN
TimestampDebe contener la representación numérica de la fecha y la hora. En Postman, {time} se puede usar para obtener la variable de entorno creada por el script< 15 N
Client-Request-IdEste campo contendrá un número único generado que se propagará a lo largo de la transacción.< 100 N
api-keyContendrá su clave de acceso mediante HMAC. Fiserv debería proporcionar esto.< 100 N
  • Paso 3: Ejecutar la llamada:

Tras ejecutar la llamada, el curl generado sería similar al siguiente:

curl --location 'https://connect-cert.latam.fiservapis.com/carat/e-sitef/api/v2/payments/' \
--header 'Content-Type: application/json' \
--header 'merchant_id: MERCHANT_EXAMPLE_ID' \
--header 'merchant_key: MERCHANT_EXAMPLE_KEY_ABCDEF' \
--header 'Auth-Token-Type: HMAC' \
--header 'Authorization: SINGATURE_ENCRIPTED_GENERATED' \
--header 'Timestamp: 1749674373790' \
--header 'Client-Request-Id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' \
--header 'api-key: YOUR_KEY_FOR_HMAC_SENT_BY_FISERV' \
--data '{
"merchant_usn": "12050620649",
"order_id": "12345",
"installments": "1",
"installment_type": "4",
"authorizer_id": "2",
"amount": "10000",
"card": {
"expiry_date": "0631",
"security_code": "929",
"number": "5485739238858589"
}
}'

El ejemplo anterior se comportará igual que las demás llamadas en la página payment.