微信消息解密出错

因为 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 解码;后继截取部分的代码无需改动照旧即可。

——打个小赏 感谢支持——

1 自动识别支付宝/微信/QQ支付