<?php
//接收通知处理类
class Refund {
public function index(){
$xml = file_get_contents("php://input");
if(empty($xml)){
$xml = @$GLOBALS["HTTP_RAW_POST_DATA"];
}
$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$xmlArr = json_decode(json_encode($xmlObj),true);
if ( $xmlArr['return_code'] == 'SUCCESS') {
$wx = new WxRefundNotify();
$info = $wx->handle($xmlArr);
//得到解密后的信息
if( $info['out_refund_no'] && $info['out_trade_no'] && $info['refund_status'] == 'SUCCESS') {
/**
处理自己的业务逻辑,过程在此省略 比如:修改订单为已支付
...........
*/
//处理完成之后,告诉微信成功结果
echo '<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>';
exit;
}
}
}
}
//解密通知类
class WxRefundNotify {
const MCH_KEY = '********************'; //改为自己的商户key
/**
* 方法一 需要openssl扩展
* handle wechat pay refund notify
*/
public function handle($data){
$encryptData = $data['req_info'];
$decryptedData = $this->xml2array($this->decryptData($encryptData, self::MCH_KEY));
return $decryptedData;
}
/**
* 方法二 需要mcrypt扩展 [高版本php已淘汰]
* _handle wechat pay refund notify
*/
public function _handle($data){
$encryptData = base64_decode($data['req_info']);
$decryptedData = $this->_decryptAesData($encryptData);
return $decryptedData;
}
private function _decryptAesData( $encryptData){
$md5LowerKey = strtolower(md5(self::MCH_KEY));
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $md5LowerKey, $encryptData, MCRYPT_MODE_ECB, $iv);
return $this->xml2array($decrypted);
}
private function decryptData( $encryptData){
$md5LowerKey = strtolower(md5(self::MCH_KEY));
$decrypted = openssl_decrypt($encryptData, "AES-256-ECB", $md5LowerKey);
return $decrypted;
}
private function xml2array( $xml){
if (empty($xml)) {
throw new \Exception('Error xml data!');
}
$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $values, $index);
xml_parser_free($p);
$result = [];
foreach ($values as $val) {
$result[strtolower($val['tag'])] = isset($val['value']) ? : '';
}
return $result;
}
}
PHP微信退款通知解密最新,支持openssl
需积分: 10 180 浏览量
2018-01-02
15:41:34
上传
评论
收藏 1KB RAR 举报
dreamsleet
- 粉丝: 1
- 资源: 8