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

来源:互联网 发布:微博的个性域名怎么改 编辑:程序博客网 时间:2024/05/16 04:37

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

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

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

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

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

<?phpheader("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>



原创粉丝点击