auth->id); $res['assets'] = $wallet->token; $res['transfes_fee'] = $config['transfer_fee']; //转让手续费比例 $res['transfes_txt'] = $config['transfes_txt']; //转让文字表述 $res['chabao_rate'] = $config['chabao_rate']; //茶宝汇率 $res['giveaway_txt'] = $config['giveaway_txt']; //赠送说明 $res['withdrawal_next_fee'] = $config['withdrawal_next_fee']; //600以下提现收费 $res['withdrawal_up_fee'] = $config['withdrawal_up_fee']; //600以上提现收费 $res['coin_list'] = [ [ 'coin_name' => '茶宝', 'coin_key' => 'token', 'amount' => $wallet->token, 'frozen_amount'=> $wallet->buying //冻结金额 ],[ 'coin_name' => 'TeaC', 'coin_key' => 'teac', 'amount' => $wallet->teac, 'frozen_amount'=> 0 //冻结金额 ],[ 'coin_name' => '茶宝(手续费账户)', 'coin_key' => 'frozen', 'amount' => $wallet->frozen, 'frozen_amount'=> 0 //冻结金额 ] ]; $this->success('', $res); } /** * 资产变动明细 * @return void */ public function coinList() { $type_id = $this->request->post('query.action'); // 账变类型 $coin_type = $this->request->post('query.coin_type'); // 資金类型 $where = ['user_id' => $this->auth->id]; if ($type_id > 0) $where['action'] = $type_id; switch ($coin_type){ case 'token': $paginator = Loader::model('LedgerTokenChangeModel'); $res['data']= $paginator->alias('a') ->join('user u', 'a.from_id = u.id and a.action > 9 and a.action < 12', 'LEFT') ->field('a.*, u.address') ->where($where) ->order('a.id DESC')->paginate($this->pageSize); break; case 'frozen': $paginator = (new LedgerFrozenChangeModel()); $res['data'] = $paginator->alias('a') ->join('user u', 'a.from_id = u.id and a.action > 2', 'LEFT') ->field('a.*, u.address') ->where($where) ->order('id DESC')->paginate($this->pageSize); break; case 'teac': $paginator = Loader::model('LedgerTeacChangeModel'); $res['data'] = $paginator->where($where)->order('id DESC')->paginate($this->pageSize); break; case 'usdt': $paginator = (new LedgerUsdtChangeModel()); break; case 'smh': $paginator = (new LedgerSmhChangeModel()); break; default: $this->error(__('Invalid parameters')); break; } $res['statusList'] = $paginator::getStatusList(); $this->success('',$res); } /** * Teac资产转账 * @return void */ public function frozenTransfer(UserModel $userModel, LedgerWalletModel $ledgerWalletModel) { $amount = $this->request->post('amount'); // 茶宝 $address = $this->request->post('address'); // 地址 if(empty($amount) || empty($address)){ $this->error(__('Parameter error')); } $real = bcsub($amount, bcmul(getConfig('frozen_transfer'), $amount, 2), 2) ; // 手续费 // 启动事务 Db::startTrans(); try { $user = $userModel->getByAddress($address); if(empty($user)) throw new Exception(__("赠送用户不存在")); if($user['id'] == $this->auth->id) throw new Exception(__("赠送用户不能是自己")); $freeze = $ledgerWalletModel::getWalletFrozen($this->auth->id); //剩余冻结金额 $available = bcsub($freeze, config('min_frozen'), 2); if(bccomp($amount, $available, 2) > 0) throw new Exception(__("转账后余额不能低于9.9"), 15001); // 更新USDT和账变 $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::FROZEN, -$amount, LedgerFrozenChangeModel::Payment, $user['id']); $ledgerWalletModel->changeWalletAccount($user['id'], Asset::FROZEN, $real, LedgerFrozenChangeModel::Receive, $this->auth->id); // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); $this->error($e->getMessage(), null, $e->getCode()); } $this->success('ok'); } /** * 赠送/转账明细 * @return void */ public function getGiftDesc() { $this->success('', ['chabao'=>['value' => getConfig('chabao_giveaway'), 'text' => getConfig('chabao_giveaway_txt')], 'frozen'=>['value' => getConfig('frozen_transfer'), 'text' => getConfig('frozen_transfer_txt')]]); } /** * 茶宝赠送 * @return void */ public function chabaoGift(UserModel $userModel, LedgerWalletModel $ledgerWalletModel) { $amount = $this->request->post('amount'); // 茶宝 $address = $this->request->post('address'); // 地址 if(empty($amount) || empty($address)){ $this->error(__('Parameter error')); } $real = bcsub($amount, bcmul(getConfig('chabao_giveaway'), $amount, 2), 2) ; // 手续费 // 启动事务 Db::startTrans(); try { $user = $userModel->getByAddress($address); if(empty($user)) throw new Exception(__("赠送用户不存在")); if($user['id'] == $this->auth->id) throw new Exception(__("赠送用户不能是自己")); $chabao = $ledgerWalletModel::getWalletChaBao($this->auth->id); if(bccomp($amount, $chabao, 2) > 0) throw new Exception(__("余额不足请前往充值"), 15001); // 更新USDT和账变 $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::TOKEN, -$amount, LedgerTokenChangeModel::GiftPay, $user['id']); $ledgerWalletModel->changeWalletAccount($user['id'], Asset::TOKEN, $real, LedgerTokenChangeModel::GiftReceipt, $this->auth->id); // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); $this->error($e->getMessage(), null, $e->getCode()); } $this->success('ok'); } /** * 提现自动打款回调 * 接口回调信息格式: * @return void */ public function withdrawCallback_my() { //post 获取过来的数据格式为:{"code":"1","data":{"orderNo":"1768","tx_hash":"xx4545"}} $parems = $this->request->post(); Log::write('提现自动打款回调参数:','info'); Log::info(json_encode($parems)); if(empty($parems)){ $this->error("回调参数为空"); } if($parems['code'] != 1){ $this->error("本次提现失败"); } $rs_data = $parems['data']; $info = (new OfflineWithdrawRecordModel()) ->where('id', $rs_data['orderNo']) ->find(); if(empty($info)){ $this->error("当前提现信息不存在"); } if($info['status'] == 2){ $this->success("更新成功"); } if($info['status'] == 5){ $is_update = (new OfflineWithdrawRecordModel()) ->where('id', $info['id']) ->update([ 'tx_hash' => $rs_data['tx_hash'], 'status' => 2, 'update_time' => time(), ]); if($is_update){ $this->success("更新成功"); }else{ $this->error("更新失败"); } } } // 获取充值地址 public function getAddress() { return $this->success('', ['value'=> Env::get('rental.pay_address'), 'name'=>getConfig('recharge_txt')]); } }