time = date('Y-m-d H:i:s',time()); $this->MC = new Moneycopy(); $this->M = new Money(); $this->accountManager = new AccountManager(); } /* * 投注方法-废弃 */ public function __bet_order(){ $pwd = $_POST['pwd']; $data = [ ['game_code'=>'zq','match_id'=>1,'lg_id'=>1,'odds_id'=>'1','bet_amount'=>100,'bet_odds'=>1], ['game_code'=>'zq','match_id'=>1,'lg_id'=>1,'odds_id'=>'1','bet_amount'=>100,'bet_odds'=>1] ]; $userInfo = $this->getAgent();//用户信息 $bet_amount = 0; //总金额 foreach($data as $k => $v){ $this->verify_gameType($v['game_code']); $this->verify_match($v['game_code'],$v['match_id']); $this->verify_league($v['game_code'],$v['lg_id']); $this->erify_odds($data['game_code'],$v['odds_id']); if(empty($v['bet_amount'])){ Render('', '1002',lang('BetOrder','Api')->get('error-1002')); } if(empty($v['bet_odds'])){ Render('', '1003',lang('BetOrder','Api')->get('error-1003')); } $data[$k]['win_amount'] = $v['bet_amount'] * $v['bet_odds'] - $v['bet_amount']; $data[$k]['account_id'] = $userInfo['account_id']; $data[$k]['status'] = 1; $data[$k]['order_number'] = OrderID(); $data[$k]['ctime']= $this->time; $data[$k]['utime']= $this->time; $bet_amount += $v['bet_amount']; } //获取用户金额信息 $getAccount = $this->MC->getAccount('4ea268f8-fb0f-2b97-dcd8-b7ae68a5c82c'); if(!$this->MC->verifyMoney($bet_amount,$getAccount['cash'])){ Render('', '1005',lang('BetOrder','Api')->get('error-1005')); } //交易密码验证 if(!$this->MC->verifyPayPwd($userInfo['account_identity'],$pwd)){ Render('', '1004',lang('BetOrder','Sports')->get('error-1004')); } try { _beginTransaction();//开启事务 $extra=[];//扣款信息记录 foreach($data as $k => $v){ $insert = lm('st_bet_order','Sports')->insert($v); if(!$insert){ Render('','-1005',lang('BetOrder','Api')->get('error-1005')); } $extra['order_number'] = $v['order_number']; $extra['money_type'] = 2; $extra['money_time'] = $v['ctime']; $extra['trade_type'] = 1; $extra['trade_desc'] = $this->MC->getDesc($userInfo['account_id'],$v['bet_amount'],$v['order_number'],1);//描述 $extra['reason'] = "";//理由 $updateMoney = $this->MC->updateMoney($userInfo['account_id'],$v['bet_amount'],1,$extra); if($updateMoney!=1){ Render('', $updateMoney,lang('BetOrder','Api')->get($updateMoney)); } } _commit();//提交 Render('', '1',lang('BetOrder','Api')->get('success')); } catch (Exception $e) { _rollBack();//回滚 print $e->getMessage(); } } /* * 投注接口 */ public function bet_order(){ $data = $_REQUEST['data']; if(empty($data)){ Render('', '51029',lang('Errors','Api')->get('error-51029')); } // $userInfo =[ // "id" => 93985, // "identity"=>"76b04b38-e31b-691b-1eaf-19e8ed1f790a", // "account"=> "181817994081", // "status"=> 1, // "fanshui"=> 1, // "remark"=> "", // "user_type"=> 1, // "account_identity"=> "edfe719d-914b-49b1-3f73-46cae73738c2", // "register_time"=> "2019-04-09 18:16:06", // "register_ip"=>"127.0.0.1", // "last_time"=> "2019-04-12 10:58:12.242624", // "last_ip"=> "127.0.0.1", // "grade"=> 0, // "email"=> "", // "phone"=>"18181799409", // "invitation"=>"", // "available_cash"=> "800.00", // "cash"=>"800.00", // "frozen_cash"=>"0.00", // "open_invitation"=>"93985", // "spread"=>"0", // "placing"=>"0", // "token"=>"lADqQI15550666925cb06f44ad5b6", // "statuss"=>"1", // "ranking"=>null, // "card"=>"5", // "name"=>"junghwi1", // "show"=> "0", // "img_url"=> null, // "qq"=>"", // "register_url"=> "www.weba.com", // "last_url"=> "www.weba.com", // "group_code"=> "0,1,", // "group_name"=> "|普通会员|", // "parent_id"=> null, // "parent_path"=> null, // "level"=> 2, // "finance_cash"=> null, // "img_id"=> null, // "wechat"=> "", // "og_type"=> 1, // "now_game"=> null, // "ip"=>"127.0.0.1", // ];// $userInfo = $this->getAgent();//获取用户信息 //验证与判断投注了几种 foreach($data as $k => $v){ $num = $k + 1; $this->verify_gameType($v['game_code'],$num); $this->verify_match($v['game_code'],$v['match_id'],$num); $this->verify_league($v['game_code'],$v['lg_id'],$num); $this->verify_odds($data['game_code'],$v['odds_id'],$v['odds_only'],$v['odds'],$v['condition'],$num); if(empty($v['bet_amount'])){ $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5105'); Render([], '5105',$msg); } //所需付款总金额计算 $this->order_money += $v['bet_amount']; //根据类型分组 if(!isset($data[$v['game_code']])){ $data[$v['game_code']][] = $v; unset($data[$k]); }else{ $data[$v['game_code']][] = $v; unset($data[$k]); } } //获取用户金额信息 if(!$this->M->verifyMoney($this->order_money,$userInfo['cash'])){ Render('', '4204',lang('Errors','Api')->get('error-4204')); } //执行数据插入 try { _beginTransaction();//开启事务 foreach($data as $k => $v){ //统计该球类投注总额 foreach($v as $kk => $vv){ $this->bet_money += $vv['bet_amount']; } $OrderID = OrderID(); $order =[ 'info_identity' => UUID(), 'account_name' => $userInfo['account'], 'account_identity' => $userInfo['account_identity'], 'order_id' => $OrderID, 'game_name' => $k, 'game_no' => "", 'money' => $this->bet_money, //投注金额 'codes' => json_encode($v,true), //投注信息json 'money_time' => $this->time, ]; $insert = lm('MoneyBuy','Api')->insert($order); if(!$insert){ Render('','-1005',lang('errors','Api')->get('error-3205')); } $insertMoney = $this->M->insertMoney($userInfo['account_identity'],$this->bet_money,$OrderID,1,"",$userInfo); if($insertMoney!=1){ Render('', $insertMoney,lang('Errors','Api')->get('error'.$insertMoney)); } $this->bet_money = 0; } _commit();//提交 Render('', '1',lang('Errors','Api')->get('error-1')); } catch (Exception $e) { _rollBack();//回滚 print $e->getMessage(); } } /** * token获取用户详情 */ public function getAgent() { $checkToken = $this->accountManager->checkEffectiveTime(); if ($checkToken['status'] != 1) { Render($checkToken['data'], $checkToken['status'], lang('commons')->get('user does login')); }; $result = $this->accountManager->refreshToken(); return $result['data']; } /** * 验证联赛是否存在 * @param [type] $game_code 球类代码 * @param [type] $lg_id 联赛ID * @param [type] $num 循环键值 */ public function verify_league($game_code,$lg_id,$num){ if(empty($lg_id)){ $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5104'); Render([], '5104',$msg); } //根据球类代码 获取相关model $models = getModels($game_code); $model_league = $models['model_match']; $info = lm($model_league,'Sports')->where('id',$lg_id)->first(); if(empty($info)){ $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5104'); Render([], '5104',$msg); } return $info; } /** * 验证赛事是否存在 * @param [type] $game_code 球类代码 * @param [type] $match_id 赛事ID * @param [type] $num 循环键值 */ public function verify_match($game_code,$match_id,$num){ if(empty($match_id)){ $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5103'); Render([], '5103',$msg); } //根据球类代码 获取相关model $models = getModels($game_code); $model_match = $models['model_match']; $info = lm($model_match,'Sports')->where('match_id',$match_id)->first(); if(empty($info)){ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5103'); Render([], '5103',$msg ); } return $info; } /** * 验证球类是否存在 * @param [type] $game_code 球类代码 * @param [type] $num 第几条 */ public function verify_gameType($game_code,$num){ if(empty($game_code)){ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102'); Render([], '5102', $msg); } $info = lm('GameType','Sports')->where('game_code',$game_code)->first(); if(empty($info)){ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102'); Render([], '5102', $msg); } return $info; } /** * 验证赔率是否存在 * @param [type] $game_code 球类代码 * @param [type] $odds_id 赔率ID */ public function verify_odds($game_code,$odds_id,$odds_only,$odds,$condition,$num){ if(empty($odds_id)||$odds_only||$condition||$odds){ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029'); Render([], '7029', $msg); } //根据球类代码 获取相关model $models = getModels($game_code); $model_odds = $models['model_odds']; $model_odds_record = $models['model_odds_record']; $info = lm($model_odds,'Sports') ->join($model_odds_record,$model_odds_record.'.odds_only',$model_odds.'.odds_only') ->select($model_odds_record.'.odds',$model_odds_record.'.condition') ->where($model_odds.'.odds_only',$odds_only) ->first(); if(!$info){ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029'); Render([], '7029', $msg); } $info->toarray(); if($odds != $info['odds']){ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029'); Render([], '7029', $msg); } if($condition = $info['condition']){ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029'); Render([], '7029', $msg); } return $info; } }