微信支付退款结果通知解密 base64_decode / md5 / AES

转自 https://jishu8.net/tag/wxpay  

微信支付退款结果通知解密步骤如下: 

第一步,对商户密钥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);
}

解密结果示例

解密后:  

 1 <root>
 2 <out_refund_no><![CDATA[R4001312001201707262674894706_4]]></out_refund_no>
 3 <out_trade_no><![CDATA[201707260201501501005710775]]></out_trade_no>
 4 <refund_account><![CDATA[REFUND_SOURCE_UNSETTLED_FUNDS]]></refund_account>
 5 <refund_fee><![CDATA[15]]></refund_fee>
 6 <refund_id><![CDATA[50000203702017072601461713166]]></refund_id>
 7 <refund_recv_accout><![CDATA[用户零钱]]></refund_recv_accout>
 8 <refund_request_source><![CDATA[API]]></refund_request_source>
 9 <refund_status><![CDATA[SUCCESS]]></refund_status>
10 <settlement_refund_fee><![CDATA[15]]></settlement_refund_fee>
11 <settlement_total_fee><![CDATA[100]]></settlement_total_fee>
12 <success_time><![CDATA[2017-07-26 02:45:49]]></success_time>
13 <total_fee><![CDATA[100]]></total_fee>
14 <transaction_id><![CDATA[4001312001201707262674894706]]></transaction_id>
15 </root>

退款结果图:

扫描二维码关注公众号,回复: 3995529 查看本文章

微信支付退款测试.jpg

猜你喜欢

转载自www.cnblogs.com/mr7664/p/9933738.html
今日推荐