微信支付退款结果通知解密步骤如下:
第一步,对商户密钥key进行MD5加密,得到32位小写加密串StringA
key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
第二步,使用StringA作为key,对参数加密串进行AES-256(ECB模式,PKCS7Padding)解密,得到加密前参数。
第一步很好理解, 第二步微信并没有给出demo, 经测试可用的PHP代码如下
注意:示例函数的$key不是商户秘钥,需要事先进行MD5加密。
明文=refund_decrypt(密文,MD5(商户秘钥));
$refund_xml_string = refund_decrypt($weixin_post_string, md5($weixin_key));
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);
}
解密结果示例
解密后:
退款结果图: