Calcular la firma de la IPN

La firma se calcula de acuerdo con la misma lógica utilizada al solicitar el pago.

IMPORTANTE
Los datos transmitidos por la plataforma de pago están codificados en UTF-8. Cualquier alteración de los datos recibidos dará lugar a un cálculo de firma errónea.

Debe calcular la firma con los campos recibidos en la notificación y no con los que transmitió en la solicitud de pago.

  1. Considere todos los campos cuyos nombres comienzan con vads_.
  2. Ordene estos campos alfabéticamente.
  3. Concatene los valores de estos campos separándolos con el carácter "+".
  4. Concatene el resultado con la clave de prueba o de producción separándolos con el carácter "+".
  5. De acuerdo con el algoritmo de firma definido en la configuración de su tienda:
    1. si su tienda está configurada para usar "SHA-1", aplique la función de hash SHA-1 en el string obtenido en el paso anterior. Depreciado.
    2. si su tienda está configurada para usar "HMAC-SHA-256", calcule y codifique en formato Base64 la firma del mensaje usando el algoritmo HMAC-SHA-256 con los siguientes parámetros:
      • la función hash SHA-256,
      • la clave de prueba o de producción (según el valor del campo vads_ctx_mode) como clave compartida,
      • el resultado del paso anterior como mensaje a autenticar.
Ejemplos en PHP:
función getSignature ($params,$key)
{
    /**
     * Función que calcula la firma.
     * $ params: matriz que contiene los campos que se enviarán en la IPN.
     * $key : clave de TEST o PRODUCTION
     */
    //Inicialización de la variable que contendrá el string a cifrar
    $contenu_signature = "";
								
    //Ordenar los campos alfabéticamente
    ksort($params);
    foreach($params as $nom=>$valeur){
								
        //Recuperación de los campos vads_
        if (substr($nom,0,5)=='vads_'){
								
            //Concatenación con el separador  "+"
            $contenu_signature .= $valeur."+";
         }
    }
    //Añadir la clave al final del string
    $contenu_signature .= $key;
								
    //Codificación base64 del string cifrada con el algoritmo HMAC-SHA-256
    $sign = base64_encode(hash_hmac('sha256',$contenu_signature, $key, true));
    return $sign;
 }