微信退款结果通知req_info解密(php版)

微信官方给出的退款通知req_info解密方法如下:
1、对加密串A做base64解码,得到加密串B(解码会出现乱码,但不影响最终的解密)
2、对商户key做md5,得到32位小写key* ( 商户key设置路径:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置 )
3、用key*对加密串B做AES-256-ECB解密

//解码微信退款通知里面的req_info字串
function refund_decrypt($str, $key) {
    $str = base64_decode($str);
    $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);
    $block = mcrypt_get_block_size('rijndael_128', 'ecb');
    $pad = ord($str[($len = strlen($str)) - 1]);
    $len = strlen($str);
    $pad = ord($str[$len - 1]);
    return substr($str, 0, strlen($str) - $pad);
}
echo refund_decrypt('微信退款通知里面的加密串req_info值', MD5('商户key'));