getOrder($data["orderId"]); if(empty($order)) { file_put_contents(ROOT_PATH."pay.log",date('Y-m-d H:i:s')."----".$data["orderId"]."本地订单不存在".PHP_EOL,FILE_APPEND); return false; } //检查订单状态 if($this->checkOrderStatus($order)) { // 如果订单处理过, 则直接返回true return true; } // 订单状态未修改情况下, 进行处理业务 $result = $this->processOrder($order, $data); if(!$result) { return false; } return $order; } // 去本地服务器查询订单信息 public function getOrder($out_trade_no) { // 可根据商户订单号进行查询 // 例如: $order = Db::name('order')->where('out_trade_no', $out_trade_no)->find(); return $order; } public function checkOrderStatus($order) { // 检查还未修改, 则返回true, 检查已经修改过了, 则返回false // 例如: return $order['status'] == 1 ? true : false; } /** * 处理核心业务 * @param array $order 订单信息 * @param array $data 通知数组 * @return Bollean */ public function processOrder($order, $data) { // 进行核心业务处理, 如更新状态, 发送通知等等 // 处理成功, 返回true, 处理失败, 返回false $result = Db::name('order')->where('id', $order['id'])->update(['status'=>1, 'transaction_id'=>$data['mbOrderId'],'update_time'=>time()]); return $result; } //回传支付信息 public function transpay($data=array()){ $appSecret = '804ee21f57487c0b8d308f864b56f90c';//钥匙 $trLoginUrl= 'https://lpapi.9944.com/api/comebackgetorderlist';//回传登录信息 $data = array( 'app_name'=>$data['app_name'], 'amount'=>$data['amount'], 'order_id'=>$data['order_id'], 'order_time'=>$data['order_time'], 'openid'=>$data['openid'], 'user_name'=>$data['user_name'], 'reg_time'=>$data['reg_time'] ); $data['sign'] = $this->getSignpay($data,$appSecret); //var_dump($data);exit; $ret = $this->curl_get($trLoginUrl,$data); return $ret; $retjson = json_decode($ret,true); } //签名方式 public function getSignpay($params=array(),$signKey=''){ ksort($params,SORT_REGULAR); $data = ""; foreach ($params as $key => $value) { $data .= $key.$value; } $sign = strtoupper(md5($signKey.$data)); return $sign; } public function curl_get($url='',$param=array()){ if(!is_array($param)){ throw new Exception("参数必须为array"); } $p=''; foreach($param as $key => $value){ $p=$p.$key.'='.$value.'&'; } if(preg_match('/\?[\d\D]+/',$url)){//matched ?c $p='&'.$p; }else if(preg_match('/\?$/',$url)){//matched ?$ $p=$p; }else{ $p='?'.$p; } $p=preg_replace('/&$/','',$p); $url=$url.$p; //echo $url;exit; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); $output = curl_exec($ch); var_dump($output); } }