因为 WordPress 最新版的原因升级到了 PHP7,发现 Open Social 插件的关注公众号登录功能报错:该公众号提供的服务出现故障,请稍后再试。经查这是公众号消息通讯的问题。开启错误日志,发现致命报错:
Uncaught Error: Call to undefined function mcrypt_module_open()
原来 mcrypt_module_open 函数已被废弃,于是采用了 openssl_decrypt 作为代替方案。最终解密部分的代码进行了简单的判断兼容效果如下。
$asekey = base64_decode(EncodingAESKey.'='); if(function_exists('mcrypt_module_open')){ $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); mcrypt_generic_init($module, $asekey, substr($asekey, 0, 16)); $decrypted = mdecrypt_generic($module, base64_decode($encrypted)); mcrypt_generic_deinit($module); mcrypt_module_close($module); }else{ $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $asekey, OPENSSL_ZERO_PADDING, substr($asekey, 0, 16)); }
注意:新用法的密文无须 base64_decode
解码;后继截取部分的代码无需改动照旧即可。