- 首页 > 睿知 > it技术 > >
/**
* description:
*微信支付完成,回调地址url方法
*/
public function PaymentCallback(){
$sKey = PAY_KEY;
//你申请微信支付的KEY
$arrPostData = https://www.it610.com/article/$this->input->post();
//接受POST数据
$arrXmlData = https://www.it610.com/article/$this->xml_to_array($arrPostData);
//微信支付成功,返回回调地址url的数据:XML转数组Array
$sPostSign= $arrXmlData['sign'];
unset($arrXmlData['sign']);
//这里很重要哦,一定要将返回的sign剔除掉/* 微信官方提醒:
*商户系统对于支付结果通知的内容一定要做【签名验证】,
*并校验返回的【订单金额是否与商户侧的订单金额】一致,
*防止数据泄漏导致出现“假通知”,造成资金损失。
*/
ksort($arrXmlData);
// 对数据进行排序
//正常情况微信是不会返回支付的key的,为保万一我们判断一下--xzz 0622
if($arrXmlData['key']){
$sData = https://www.it610.com/article/$this->ToUrlParams($arrXmlData);
//对数组数据拼接成key=value字符串
}else{
$sData = https://www.it610.com/article/$this->ToUrlParams($arrXmlData).'&key='.$sKey;
//这里也一定要加上key,不然签名就错了
}
$sUserSign = strtoupper(md5($sData));
//再次生成签名,与$sPostSign比较$where['crsNo'] = $arrXmlData['out_trade_no'];
$arrWechatOrder = $this->wxpay->GetWechatOreder($where);
/*
*分别判断返回状态码、返回签名sign、返回订单总金额,三者同时为真,订单交易成功,状态修改为‘ok’
*/
if($arrXmlData['return_code']=='SUCCESS'&&$sPostSign==$sUserSign&&$arrWechatOrder['order_amount']*100==$arrXmlData['total_fee']){
/*
* 首先判断,订单是否已经更新为ok,因为微信会总共发送8次回调确认
* 其次,订单已经为ok的,直接返回SUCCESS
* 最后,订单没有为ok的,更新状态为ok,返回SUCCESS
*/
if($arrWechatOrder['order_status']=='ok'){
$this->return_success();
}else{
$updata['order_status'] = 'ok';
if($this->wxpay->UpdateWechatOrder($updata,$where)){
$this->return_success();
}
}
}else{
$arrHint = array('nStatus'=>1,'sMsg'=>'微信支付失败');
return $this->output->set_content_type('application/json')->set_output(json_encode($arrHint));
}
}/**
* description:
*数组转换成xml
*/
private function xml_to_array($xml){
if(!$xml){
return false;
}
//将XML转为array
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$data = https://www.it610.com/article/json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $data;
}/**
* description:
*给微信发送确认订单金额和签名正确,SUCCESS信息 -xzz0521
*/
private function return_success(){
$return['return_code'] = 'SUCCESS';
$return['return_msg'] = 'OK';
$xml_post = '
'.$return['return_code'].'
'.$return['return_msg'].'
';
echo $xml_post;
exit;
}
推荐阅读