/**
* 微信异步通知
* @author 王柯 <wangke.email@foxmail.com>
* @return void
*/
public function WxPayNotify()
{
require_once EXTEND_PATH.'/wxpay/lib/WxPay.Data.php';
$wxpay = new \WxPayDataBase();
Db::startTrans();
try{
//接收微信返回的数据数据,返回的xml格式
$xmlData = file_get_contents('php://input');
//$result = \WxPayResults::Init($xmlData);
//将xml格式转换为数组
$data = $wxpay->FromXml($xmlData);
if($data['sign'] == $wxpay->getSign($data)){
if ($data['result_code'] == 'SUCCESS'){
//这儿会记录多次数据信息 回调多次
Log::write(json_encode($request)."\r\n");
//中间逻辑代码就不贴上来了
Db::commit();
//这儿返回数据给微信试了无数个办法还是不行
//echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';exit;
$return['return_code'] = 'SUCCESS';
$return['return_msg'] = 'OK';
$string = self::arrayToXml($return);
echo $string; exit;
}else{
Log::write("支付失败信息:".json_encode($data).date("Y-m-d H:i:s"),time()."\r\n");
}
}else{
Log::write("签名验证失败:".json_encode($data).date("Y-m-d H:i:s"),time()."\r\n");
}
}catch (\Exception $e){
Db::rollback();
Log::write($e->getMessage()."\r\n"."支付异常信息:".json_encode($data).date("Y-m-d H:i:s"),time()."\r\n");
}
}
/**
* 数组转xml
* @param array $arr 数组参数 *必传
* @author 王柯 <wangke.email@foxmail.com>
* @return string
*/
public static function arrayToXml($arr){
$xml = "<xml>";
foreach($arr as $key => $val){
if(is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
/**
* xml转数组
* @param string $xml xml数据 *必传
* @author 王柯 <wangke.email@foxmail.com>
* @return array|bool|\mix|mixed|\stdClass|string
*/
public static function xmlToArray($xml){
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
} |