order('id desc'); if($status!='all'){ $model = $model->where('status',$status); } $list = $model->paginate($limit); return $this->success(__('successful'),$list->toArray()); } /** * 最近提现 * @Apidoc\Method("GET") */ public function recent() { $list = WithdrawlModel::with(['user'])-> where('status',\app\enum\WithdrawlStatus::COMPLETE->value)-> order('id desc')-> limit(10)->select(); $list->each(function($item){ $item->user = UserModel::field('username,email')->where('id',$item->user_id)->find(); }); return $this->success(__('successful'),$list->toArray()); } /** * 创建 * @Apidoc\Method("POST") * @Apidoc\Param("amount", type="string", require=true, desc="金额") * @Apidoc\Param("address_id", type="string", require=true, desc="地址ID,列表选择") * @Apidoc\Param("trade_password", type="string", require=true, desc="交易密码") */ public function create() { //return $this->error(__('The system is under maintenance, please wait...')); //* @Apidoc\Param("code", type="string", require=true, desc="图形验证码(type=withdrawl)") //captcha_verify('image','withdrawl'); $address_id = input('address_id'); if(!$address_id){ return $this->error(__('Address is incorrect')); } /** @var AddressModel $address */ $address = AddressModel::where('id',$address_id)->find(); if(!$address){ return $this->error(__('Address is incorrect')); } // if(!$address->status){ // return $this->error(__('Unverified address')); // } $user = \support\Jwt::getUser(); if(Config('site.trade_password_type') == 'email'){ captcha_verify('email','withdrawl',$user['username']); }else{ //验证交易密码 $trade_password = input('trade_password'); \support\Jwt::verify_trade_password($trade_password); } $deduction_amount = input('amount',0); $fee = config('site.withdrawl_fee')[$address['network']]; if($fee < 0.5){ $fee = bcmul( $fee , $deduction_amount,2); } $data = [ 'user_id' => \support\Jwt\JwtToken::getCurrentId(), 'deduction_amount' => $deduction_amount, 'title' => $address['title'], 'network' => $address['network'], 'address' => $address['address'], 'fee' => $fee, 'type' => 0, 'status' => \app\enum\WithdrawlStatus::CREATED->value ]; //验证最小提现金额 $data['recive_amount'] = $data['deduction_amount'] - $data['fee']; $withdrawl_minimum = Config('site.withdrawl_minimum')[$data['network']]; if($data['deduction_amount'] < $withdrawl_minimum){ return $this->error(__('Minimum withdrawal of %num%',[ '%num%' => $withdrawl_minimum ])); } //var_dump($user); //验证余额 if($data['deduction_amount'] > $user->money){ return $this->error(__('The amount exceeds the available balance')); } //if(WithdrawlModel::whereTime('created_at','-24 hours')->count('id')){ if(WithdrawlModel::whereTime('created_at','today')->where('user_id',$data['user_id'])->count('id')){ return $this->error(__('You can only withdraw once a day.')); } if (!$data['network'] || !in_array($data['network'],['BEP-20','TRC-20','ALIPAY','WECHAT'])) { return $this->error(__('Network is incorrect')); } if (!$data['address']) { return $this->error(__('Address is incorrect')); } Db::startTrans(); try{ /** @var WithdrawlModel $data */ $data = WithdrawlModel::create($data); UserModel::money($data->user_id,-$data->deduction_amount,\app\enum\BalanceType::WITHDRAWAL,$data->id); Db::commit(); return $this->success(__('successful'),$data); }catch(\Exception $e){ Db::rollback(); return $this->error($e->getMessage()); } } /** * 详情 * @Apidoc\Query("id", type="string", require=true, desc="ID") */ public function detail(){ $appid = input('id'); $vo = WithdrawlModel::where('id',$appid)->find(); if($vo) { return $this->success(__('successful'),$vo->toArray()); }else{ return $this->error(__("Record does not exist")); } } /** * 转账成功异步通知 * @Apidoc\NotParse() * @Apidoc\NotDebug() */ public function notify(){ $data = \support\Encrypt::aesdecode(input('data','')); $data = json_decode($data,true); /** @var WithdrawlModel $vo */ $vo = WithdrawlModel::where('id',$data['out_trade_no'])->find(); if($vo){ if($data['result'] == 'SUCCESS'){ if($vo->status != \app\enum\WithdrawlStatus::COMPLETE->value){ $vo->status = \app\enum\WithdrawlStatus::COMPLETE->value; $vo->txid = $data['txid']; $vo->transfer_at = $data['transfer_at'] ?: time(); $vo->save(); Hook('withdrawl.success',$vo); } }else{ $vo->status = \app\enum\WithdrawlStatus::FAIL->value; $vo->txid = $data['txid']; $vo->memo = $data['reason']; $vo->save(); } } return response("SUCCESS"); } }