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

版权声明:本文为博主原创文章,拒绝相同的垃圾博文。 https://blog.csdn.net/tsummerb/article/details/78290554

微信官方给出的退款通知解密方法如下:

(1)对加密串A做base64解码,得到加密串B

(2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )

(3)用key*对加密串B做AES-256-ECB解密

以下是自己亲测可用的解密方法

<?php
header("content-type:text/xml; charset=UTF-8"); 
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);
}
$str="微信同步的加密串req_info";
$key=MD5('商户key');
$data=refund_decrypt($str, $key);
echo $data;
?>
注:对加密串req_info做base64解码会出现乱码,但不影响最终的解密

解密结果如下:

<root>
<out_refund_no><![CDATA[201710101830454723]]></out_refund_no>
<out_trade_no><![CDATA[201710101830454723]]></out_trade_no>
<refund_account><![CDATA[REFUND_SOURCE_UNSETTLED_FUNDS]]></refund_account>
<refund_fee><![CDATA[200]]></refund_fee>
<refund_id><![CDATA[50000204292017101001977770763]]></refund_id>
<refund_recv_accout><![CDATA[支付用户零钱]]></refund_recv_accout>
<refund_request_source><![CDATA[API]]></refund_request_source>
<refund_status><![CDATA[SUCCESS]]></refund_status>
<settlement_refund_fee><![CDATA[200]]></settlement_refund_fee>
<settlement_total_fee><![CDATA[200]]></settlement_total_fee>
<success_time><![CDATA[2017-10-10 18:33:31]]></success_time>
<total_fee><![CDATA[200]]></total_fee>
<transaction_id><![CDATA[4200000011201710107264086890]]></transaction_id>
</root>



猜你喜欢

转载自blog.csdn.net/tsummerb/article/details/78290554