php|微信小程序之微信支付(回调接口)

/** * 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; }

    推荐阅读