Firma del mensaje de respuesta

 

Una vez se ha obtenido el mensaje de respuesta y la clave específica del terminal, siempre y cuando la operación se autorice, se debe comprobar la firma de la respuesta.

El comercio es responsable de validar el HMAC enviado por el TPV Virtual para asegurarse de la validez de la respuesta. Esta validación es necesaria para garantizar que los datos no han sido manipulados y que el origen es realmente el TPV Virtual.

 

Para realizar el cálculo de la firma de respuesta se deben seguir los siguientes pasos:

  1. Se genera una clave específica por operación. Para obtener la clave derivada a utilizar en una operación se debe realizar un cifrado 3DES entre la clave del comercio, la cual debe ser previamente decodificada en BASE 64, y el valor del número de pedido de la operación (DS_ORDER).
  1. Se calcula el HMAC SHA256 de la cadena formada por la concatenación del valor de los siguientes campos: 
  • Si está usando el método “iniciaPeticion” con resultado de Ds_EMV3DS y threeDSInfo=”CardConfiguration”:

Cadena = CODIGO + Ds_MerchantCode + Ds_Terminal + Ds_Order + Ds_TransactionType

  •   Si está usando el método “trataPetición” con resultado de Ds_EMV3DS y threeDSInfo=“ChallengeRequest”:

Cadena = Ds_Amount + Ds_Order + Ds_MerchantCode + Ds_Currency+ Ds_TransactionType + MD

  •  Si está usando el método “trataPeticion” con campo Ds_response:

Cadena = Ds_Amount + Ds_Order + Ds_MerchantCode + Ds_Currency + Ds_Response + Ds_TransactionType + Ds_SecurePayment

  

Si tomamos como ejemplo la respuesta que se presenta al inicio de este apartado la cadena resultante sería:

Cadena = 1451444912789999008881978000000

 

Si el comercio tiene configurado envío de tarjeta en la respuesta, se debe calcular el HMAC SHA256 de la cadena formada por la concatenación del valor de los siguientes campos:

Cadena = Ds_Amount + Ds_Order + Ds_MerchantCode + Ds_Currency + Ds_Response + Ds_CardNumber + Ds_TransactionType + Ds_SecurePayment

 

 Si tomamos como ejemplo la respuesta que se presenta al inicio de este apartado la cadena resultante sería:

Cadena = 14514498215459990088819780000454881204940000400

 

El resultado obtenido se codifica en BASE 64, y el resultado de la codificación debe ser el mismo que el valor del parámetro <Ds_Signature> obtenido en la respuesta.