REDSYS y PHP 7.2.x

Si recientemente su servidor de hosting os ha actualizado la versión de PHP a la 7.2 o superior, os habréis encontrado con la desagradable sorpresa de ver que la conexión a la popular pasarela de pago REDSYS ha dejado de funcionar.

La culpable es la función MYCRIPT que pasa a quedar obsoleta (DEPRECATED) a partir de la versión 7.1 quedando del todo eliminada a partir de la versión 7.2.

Una solución rápida pasa por utilizar una función alternativa como puede ser OPENSSL_ENCRYPT.

La función MYCRIPT se encuentra en el arxhivo apiRedsys.php (línea 70 aprox.), dentro de la función ENCRYPT_3DES y la copiamos a continuación:

function encrypt_3DES($message, $key){
// Se establece un IV por defecto
$bytes = array(0,0,0,0,0,0,0,0); //byte [] IV = {0, 0, 0, 0, 0, 0, 0, 0}
$iv = implode(array_map(«chr», $bytes)); //PHP 4 >= 4.0.2
// Se cifra
$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv); //PHP 4 >= 4.0.2
return $ciphertext;
}

Substituyendo MYCRIPT por OPENSSL_ENCRYPT, la función encrypt_3DES quedaría de la siguiente manera:

function encrypt_3DES($message, $key) {
$l = ceil(strlen($message) / 8) * 8;
return substr(openssl_encrypt($message . str_repeat(«\0», $l – strlen($message)), ‘des-ede3-cbc’, $key, OPENSSL_RAW_DATA, «\0\0\0\0\0\0\0\0»), 0, $l);
}

A nosotros esta solución nos ha funcionado con páginas webs de algunos de nuestros clientes, pero esta modificación de código sólo se aconseja si eres un entendido y sabes lo que estás tocando. No nos hacemos responsables de ningún problema que se pudiera derivar.

Fuente: blog.trescomatres.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*