REDSYS i PHP 7.2.x

Si recentment el vostre servidor de hosting us ha actualitzat la versió de PHP a la 7.2 o superior, us haureu trobat amb la desagradable sorpresa de veure que la vostra connexió a la popular passarel·la de pagament REDSYS ha deixat de funcionar.

La culpable és la funció MYCRIPT que passa a quedar obsoleta (DEPRECATED) a partir de la versió 7.1 quedant del tot eliminada a partir de la versió 7.2.

Una solució ràpida passa per la utilització d’una funció alternativa com pot ser OPENSSL_ENCRYPT.

La funció MYCRIPT es troba a l’arxiu apiRedsys.php (línia 70 aprox.), dins de la funció ENCRYPT_3DES i la copiem a continuació :

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;
}

Substituint MYCRIPT per OPENSSL_ENCRYPT, la funció encrypt_3DES quedaria de la següent 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 nosaltres aquesta solució ens ha funcionat amb pàgines webs d’alguns dels nostres clients, però aquesta modificació de codi només s’aconsella si ets un entès i saps el que estàs remenant. No ens fem responsables de cap problema que se’n pogués derivar.

Font: blog.trescomatres.com

Leave a Reply

Your email address will not be published. Required fields are marked *

*