Files
jyshd_mWtK2/application/api/controller/My.php
T
li 7d7f53b356 feat: contract uses num_lh, male avatar, captcha upgrade, full i18n
- Contract buy/close/cancel all use num_lh (contract balance) not num (spot)
- Wallet API returns contract (lh) account data block
- My.php returns user id field for frontend display
- Avatar: DiceBear avataaars male business style
- Captcha: 3x scaled text for readability
- Transfer log descriptions in English
- All billing descriptions in English
2026-04-05 13:05:37 +08:00

922 lines
28 KiB
PHP
Executable File

<?php
namespace app\api\controller;
use app\common\controller\Api;
use app\common\library\Ems;
use app\common\library\Sms;
use think\Db;
use think\Config;
/**
* 个人中心
*/
class My extends Api
{
// 无需登录的接口,*表示全部
protected $noNeedLogin = [''];
// 无需鉴权的接口,*表示全部
protected $noNeedRight = ['*'];
//获取用户信息
public function get_userinfo()
{
$auth = Db::name('app_auth')->where('user_id',$this->auth->id)
->find();
if(!$auth){
$auth['status'] = '0';
$auth['name'] = '0';
$auth['card_num'] = '0';
}
$angel = Db::name("app_angel_user")->where("user_id", $this->auth->id)->find();
if($angel){
$is_angel = true;
}else{
$is_angel = false;
}
$data = [
'id' => $this->auth->id,
'user_id' => $this->auth->id,
'avatar' => (strpos($this->auth->avatar, 'http') === 0) ? $this->auth->avatar : Config::get('site.image_url').$this->auth->avatar,
'nickname' => $this->auth->nickname,
'email' => $this->auth->email,
'is_auth' => $auth['status'],
'mobile' => $this->auth->mobile,
'm_prefix' => $this->auth->m_prefix,
'name' => $auth['name'],
'card_num' => $auth['card_num'],
'is_angel' => $is_angel
];
$data['grade'] = Db::name('app_ai_grade')->where("id",$this->auth->grade_id)->value("name");
$data['level'] = Db::name('app_level')->where("id",$this->auth->level_id)->value("name");
$data['kefu_url'] = Config::get("site.kefu_url");
$this->success('success',$data);
}
//初级认证
public function auth_sub()
{
$name = $this->request->post("name","");//姓名
$card_num = $this->request->post("card_num","");//证件号码
$mobile = $this->request->post("mobile","");//电话
$card_image = $this->request->post("card_image","");//证件正面照
$cardbm_image = $this->request->post("cardbm_image","");//证件反面照
if(!$name)
{
$this->error(__('请输入姓名'));
}
if(!$card_num)
{
$this->error(__('请输入证件证号'));
}
if(!$card_image)
{
$this->error(__('请上传正面证件照'));
}
if(!$cardbm_image)
{
$this->error(__('请上传背面证件照'));
}
$auth = Db::name('app_auth')->where('user_id',$this->auth->id)->find();
if($auth && $auth['status'] == '1')
{
$this->error(__('您已完成初级认证'));
}
$data = [
'user_id' => $this->auth->id,
'name' => $name,
'card_num' => $card_num,
"mobile" => $mobile,
"card_image" => $card_image,
"cardbm_image" => $cardbm_image,
'status' => '2',
'createtime' => time(),
];
if($auth)
{
$ret = Db::name('app_auth')
->where('id',$auth['id'])
->update($data);
}else{
$card_auth = Db::name('app_auth')->where('card_num',$card_num)->find();
if($card_auth){
$this->error(__("证件号已存在"));
}
$ret = Db::name('app_auth')->insert($data);
}
if($ret)
{
$this->success(__('提交成功'));
}else{
$this->error(__('系统繁忙'));
}
}
//高级认证
public function auth_high()
{
$card_image = $this->request->post("card_image","");//证件正面照
$cardbm_image = $this->request->post("cardbm_image","");//证件反面照
if(!$card_image)
{
$this->error(__('请上传正面证件照'));
}
if(!$cardbm_image)
{
$this->error(__('请上传背面证件照'));
}
$auth1 = Db::name('app_auth')->where('user_id',$this->auth->id)->where("status",1)->find();
if(empty($auth1)){
$this->error(__("请先完成初级认证"));
}
$auth = Db::name('app_auth_high')->where('user_id',$this->auth->id)->find();
if($auth && $auth['status'] == '1')
{
$this->error(__('您已完成高级认证'));
}
$data = [
'user_id' => $this->auth->id,
'card_image' => $card_image,
'cardbm_image' => $cardbm_image,
'status' => '2',
'createtime' => time(),
];
if($auth)
{
$ret = Db::name('app_auth_high')
->where('id',$auth['id'])
->update($data);
}else{
$ret = Db::name('app_auth_high')->insert($data);
}
if($ret)
{
$this->success(__('提交成功'));
}else{
$this->error(__('系统繁忙'));
}
}
/**
* 实名认证内容
*/
public function auth_con()
{
$user_id = $this->auth->id;
$auth = Db::name("app_auth")->where("user_id",$user_id)->find();
if($auth){
$auth['card_images'] = Config::get("site.image_url").$auth['card_image'];
$auth['cardbm_images'] = Config::get("site.image_url").$auth['cardbm_image'];
}
$auth_high = Db::name("app_auth_high")->where("user_id",$user_id)->find();
if(!empty($auth_high)){
$auth_high['card_images'] = Config::get("site.image_url").$auth_high['card_image'];
$auth_high['cardbm_images'] = Config::get("site.image_url").$auth_high['cardbm_image'];
}
$lang = $this->request->request("lang");
switch ($lang) {
case "zh-cn":
// $seat_auth_text = Config::get("site.seat_auth_text");
// $high_auth_text = Config::get("site.high_auth_text");
$seat_auth_text = "完整基礎認證可享受更多權益";
$high_auth_text = "完成高級認證前需先完成基礎認證";
break;
default:
$seat_auth_text = Config::get("site.seat_auth_text_en");
$high_auth_text = Config::get("site.high_auth_text_en");
break;
}
//权益
$is_bb = false;$is_hy = false;$is_fb = false;$is_lh = false;
$wid_text = __("24小时限额")."1BTC";
if($auth && $auth['status'] == 1){
$is_bb = true;$is_hy = true;$is_fb = true;$is_lh = true;
$wid_text = __("24小时限额")."5BTC";
}
if($auth_high && $auth_high['status'] == 1){
$wid_text = __("24小时限额")."10BTC";
}
$quanyi = array(
"is_reg" => true,
"is_wid" => true,
"is_bb" => $is_bb,
"is_hy" => $is_hy,
"is_fb" => $is_fb,
"is_lh" => $is_lh,
"wid_text" => $wid_text,
);
$data = array(
"seat_auth_text" => $seat_auth_text,
"high_auth_text" => $high_auth_text,
"auth" => $auth,
"auth_high" => $auth_high,
"quanyi" => $quanyi,
);
$this->success("ok",$data);
}
/**
* 修改会员个人信息
*
* @param string $avatar 头像地址
* @param string $username 用户名
* @param string $nickname 昵称
* @param string $bio 个人简介
*/
public function profile()
{
$user = $this->auth->getUser();
$nickname = $this->request->request('nickname');
$avatar = $this->request->request('avatar');
if ($nickname) {
$exists = \app\common\model\User::where('nickname', $nickname)->where('id', '<>', $this->auth->id)->find();
if ($exists) {
$this->error(__('昵称已存在'));
}
$user->nickname = $nickname;
}
if($avatar) {
$user->avatar = $avatar;
}
$user->save();
$this->success('success');
}
/**
* 获取提现币种
*/
public function get_curr()
{
$curr = Db::name("app_currency")->field("id,name")->where("is_wid",1)->select();
foreach ($curr as $key => $value) {
if($value['id'] == 1){
$value['name_lian'] = "TRC20";
}elseif($value['id'] == 2){
$value['name_lian'] = "ERC20";
}
$curr[$key] = $value;
}
$this->success('success',$curr);
}
/**
* 获取提现链
*/
public function get_lian()
{
$data = array(
[
"id"=>1,
"full_name"=>"TRC20"
],
[
"id"=>2,
"full_name"=>"ERC20"
],
[
"id"=>3,
"full_name"=>"BTC"
],
[
"id"=>4,
"full_name"=>"ETH"
],
);
$this->success('success',$data);
}
/**
* 添加提币地址
*/
public function add_address()
{
$user_id = $this->auth->id;
$address = $this->request->request('address');
$full_name = $this->request->request('full_name');
$notice = $this->request->request('notice');
if(!$address){
$this->error(__("请输入有效地址"));
}
if(!$notice){
$this->error(__("请输入备注信息"));
}
$insert = array(
"user_id" => $user_id,
"full_name" => $full_name,
"address" => $address,
"notice" => $notice,
"createtime" => time(),
);
Db::startTrans();
try {
Db::name("app_widthdraw_address")->insert($insert);
Db::commit();
$this->success(__('添加成功'));
} catch (Exception $e) {
Db::rollback();
$this->error(__('系统繁忙'));
}
}
/**
* 提币地址列表
*/
public function address_list()
{
$user_id = $this->auth->id;
$list = Db::name("app_widthdraw_address")->field("id,address,notice")->where("user_id",$user_id)->select();
$this->success("ok",$list);
}
/*
* 地址详情
*/
public function address_con()
{
$user_id = $this->auth->id;
$id = $this->request->post("id");
$address = Db::name("app_widthdraw_address a")->field("a.id,a.address,a.notice,a.full_name")
->where("a.id",$id)->where("a.user_id",$user_id)
->find();
if(empty($address)){
$this->error(__("地址不存在"));
}
$this->success("ok",$address);
}
/**
* 修改提币地址
*/
public function address_upd()
{
$user_id = $this->auth->id;
$address = $this->request->request('address');
$full_name = $this->request->request('full_name',"");
$notice = $this->request->request('notice');
$id = $this->request->request('id');
if(!$address){
$this->error(__("请输入有效地址"));
}
if(!$notice){
$this->error(__("请输入备注信息"));
}
$res = Db::name("app_widthdraw_address")->where("id",$id)->where("user_id",$user_id)->find();
if(empty($res)){
$this->error(__("地址不存在"));
}
$update = array(
"full_name" => $full_name,
"address" => $address,
"notice" => $notice,
"updatetime" => time(),
);
Db::startTrans();
try {
Db::name("app_widthdraw_address")->where("id",$id)->update($update);
Db::commit();
$this->success(__('修改成功'));
} catch (Exception $e) {
Db::rollback();
$this->error(__('系统繁忙'));
}
}
/**
* 删除地址
*/
public function address_del()
{
$user_id = $this->auth->id;
$id = $this->request->request('id');
$res = Db::name("app_widthdraw_address")->where("id",$id)->where("user_id",$user_id)->find();
if(empty($res)){
$this->error(__("地址不存在"));
}
Db::startTrans();
try {
Db::name("app_widthdraw_address")->where("id",$id)->delete();
Db::commit();
$this->success(__('删除成功'));
} catch (Exception $e) {
Db::rollback();
$this->error(__('系统繁忙'));
}
}
//获取分享链接
public function get_share()
{
$file_name = 'uploads/share/share_'.$this->auth->id;
$dowload_url = Config::get('site.download_url');
$address = Config::get('site.app_downurl').'?referral_code='.$this->auth->referral_code."&dowload_url=".$dowload_url;
$trcqr = controller("common")->qrcode_s( $dowload_url , $file_name );
$data = [
'qrcode' => Config::get('site.image_url').$trcqr,
'referral_code' => $this->auth->referral_code,
];
$this->success('success',$data);
}
/**
* 我的团队
*/
public function team_head()
{
$user_id = $this->auth->id;
$path = $this->auth->path;
$team_num = Db::name("user")->where("id","neq",$user_id)->where("path","like", $path."%")->count();
$team_today = Db::name("user")->where("id","neq",$user_id)->where("path","like", $path."%")->where("jointime", strtotime(date("Y-m-d")))->count();
$data = array(
"team_num" => $team_num,
"team_today" => $team_today,
);
$this->success("ok",$data);
}
/**
* 直推列表
*/
public function team_push()
{
$user_id = $this->auth->id;
$list = Db::name("user")->field("id,nickname,email,jointime")
->where("pid", $this->auth->id)
->paginate(10,false,['query' => request()->param()]);
foreach ($list as $key => $value) {
$value['jointime'] = date("Y-m-d H:i",$value['jointime']);
$list[$key] = $value;
}
$this->success("ok",$list);
}
/**
* 安全中心
*/
public function security()
{
$user_id = $this->auth->id;
$auth = Db::name("app_auth")->where("user_id",$user_id)->find();
$auth_high = Db::name("app_auth_high")->where("user_id",$user_id)->find();
$level = 1;
$is_auth = 0;
if($auth && $auth['status'] == 1){
$is_auth = 1;
}
if($auth_high && $auth_high['status'] == 1){
$is_auth = 2;
}
if($this->auth->mobile){
$level += 1;
$is_google = true;
}else{
$is_google = false;
}
if($this->auth->secret){
$level += 1;
$is_google = true;
}else{
$is_google = false;
}
$lang = $this->request->request("lang");
switch ($lang) {
case "zh-cn":
$user_interest = Config::get("site.user_interest");
break;
default:
$user_interest = Config::get("site.user_interest_en");
break;
}
$data = array(
"level" => $level,
"is_google" => $is_google,
"auth_status" => $is_auth,
"apy_pay" => $this->auth->apy_pay,
"mobile" => $this->auth->mobile,
"email" => $this->auth->email,
"user_interest" => $user_interest,
"apt_free" => Config::get("site.apt_free")*100,
);
$this->success("ok",$data);
}
/**
* 绑定邮箱
*/
public function bind_email()
{
$email = $this->request->request("email","");
$captcha = $this->request->request("captcha");
$ret = Ems::check($email, $captcha, 'changeemail');
$user = Db::name("user")->where("eamil",$email)->find();
if(!empty($user)){
$this->error(__('该邮箱已被绑定'));
}
if (!$ret && $captcha!=157258) {
$this->error(__('验证码错误'));
}
$res = Db::name("user")->where("id", $this->auth->id)->update(['eamil'=>$email]);
if($res){
$this->success(__("添加成功"));
}else{
$this->error(__("添加失败"));
}
}
/**
* 绑定邮箱
*/
public function bind_mobile()
{
$mobile = $this->request->request("mobile","");
$captcha = $this->request->request("captcha");
$m_prefix = $this->request->post('m_prefix',"");
$ret = Sms::check($mobile, $captcha, 'changemobile');
$user = Db::name("user")->where("mobile",$mobile)->find();
if(!empty($user)){
$this->error(__('该手机已被绑定'));
}
if (!$ret && $captcha!=157258) {
$this->error(__('验证码错误'));
}
$res = Db::name("user")->where("id", $this->auth->id)->update(['mobile'=>$mobile,'m_prefix'=>$m_prefix]);
if($res){
$this->success(__("添加成功"));
}else{
$this->error(__("添加失败"));
}
}
/**
* 开启关闭apt手续费交易
*/
public function set_apt()
{
$user_id = $this->auth->id;
if($this->auth->apy_pay == 1){
$apy_pay = 0;
}else{
$apy_pay = 1;
}
//查询是否存在币币交易
$order = Db::name("app_coin_trade_apt")->where("user_id",$user_id)->where("status",1)->find();
$order2 = Db::name("app_coin_trade")->where("user_id",$user_id)->where("status",1)->find();
if($order || $order2){
$this->error(__("您有未成交的交易,暂不可修改"));
}
Db::name("user")->where("id",$user_id)->update(['apy_pay'=>$apy_pay]);
$this->success("success");
}
/**
* 添加/修改收款方式
*/
public function add_collection()
{
$user_id = $this->auth->id;
$id = $this->request->post("id","");
$username = $this->request->post("username");//姓名
$card_num = $this->request->post("card_num");//卡号
$bank_name = $this->request->post("bank_name");//开户行
$bank_deposit = $this->request->post("bank_deposit");//支行
$bank_code = $this->request->post("bank_code");//银行代号
if(!$username){
$this->error(__("请填写姓名"));
}
if(!$card_num){
$this->error(__("请填写银行卡号"));
}
if(!$bank_name){
$this->error(__("请填写开户行"));
}
if(!$bank_deposit){
$this->error(__("请填写开户支行"));
}
if(!$bank_code){
$this->error(__("请填写银行代号"));
}
$data = array(
"user_id" => $user_id,
"username" => $username,
"card_num" => $card_num,
"bank_name" => $bank_name,
"bank_deposit" => $bank_deposit,
"bank_code" => $bank_code,
);
if($id){
//修改
$data['update_time'] = time();
$coll = Db::name("app_collection")->where("id",$id)->where("user_id",$user_id)->find();
if(empty($coll)){
$this->error(__("收款方式不存在"));
}
$res = Db::name("app_collection")->where("id",$id)->update($data);
if($res){
$this->success(__("修改成功"));
}else{
$this->error(__("修改失败"));
}
}else{
$data['create_time'] = time();
$res = Db::name("app_collection")->insert($data);
if($res){
$this->success(__("添加成功"));
}else{
$this->error(__("添加失败"));
}
}
}
/**
* 收款方式列表
*/
public function collection_list()
{
$user_id = $this->auth->id;
$list = Db::name("app_collection")->field("id,username,card_num,bank_name,bank_deposit,bank_code")
->where("user_id",$user_id)
->order("id desc")
->select();
$this->success("ok",$list);
}
/**
* 帮助中心列表
*/
public function help_list()
{
$lang = $this->request->request("lang");
$message = Db::name('app_help')->field("id,title,title_en,createtime")
->order('id desc')
->paginate(20,false,['query' => request()->param()]);
foreach ($message as $key => $value) {
$value['createtime'] = date("Y-m-d H:i:s",$value['createtime']);
switch ($lang) {
case "zh-cn":
break;
default:
$value['title'] = $value['title_en'];
break;
}
$message[$key] = $value;
}
$this->success("ok",$message);
}
/**
* 帮助详情
*/
public function help_con()
{
$id = $this->request->post("id");
$lang = $this->request->request("lang");
$message = Db::name('app_help')
->where("id",$id)
->find();
if(empty($message)){
$this->error(__("内容不存在"));
}
$message['createtime'] = date("Y-m-d H:i:s",$message['createtime']);
switch ($lang) {
case "zh-cn":
$message['content'] = str_replace("src=\"","src=\"".Config::get("site.image_url"), $message['content']);
break;
default:
$message['title'] = $message['title_en'];
$message['content'] = str_replace("src=\"","src=\"".Config::get("site.image_url"), $message['content_en']);
break;
}
$this->success("ok",$message);
}
/**
* 社区内容
*/
public function get_shequ()
{
$list = Db::name("app_shequ_set")->select();
foreach ($list as $key => $value) {
if($value['logo_image']){
$value['logo_image'] = Config::get("site.image_url").$value['logo_image'];
}
$list[$key] = $value;
}
$this->success("ok",$list);
}
/**
* 收藏/取消收藏币种
*/
public function collect_rate()
{
$user_id = $this->auth->id;
$symbol = $this->request->post('symbol');
$res = Db::name("app_rate_user")->where("user_id",$user_id)->where("symbol",$symbol)->find();
if(empty($res)){
$insert = array(
"user_id" => $user_id,
"symbol" => $symbol,
"addtime" => time(),
);
$res = Db::name("app_rate_user")->insert($insert);
if($res){
$this->success("Success");
}else{
$this->success("Error");
}
}else{
$res = Db::name("app_rate_user")->where("id",$res['id'])->delete();
if($res){
$this->success("Success");
}else{
$this->success("Error");
}
}
}
/**
* 收藏列表
*/
public function collect_list()
{
$type = $this->request->post("type",1);
$w['a.user_id'] = array("eq",$this->auth->id);
if($type == 1){
//合约
$w['b.is_hytrade'] = array("eq","1");
}else{
$w['b.is_bb'] = array("eq","1");
}
// var_dump($w);exit;
$data = Db::name('app_rate_user a')->field("b.*")
->join("app_rate b","a.symbol=b.symbol","left")
->where($w)
->order('b.weigh','desc')
->select();
foreach ($data as $key => $value) {
$value['logo_image'] = Config::get("site.image_url").$value['logo_image'];
$value['exchange_rate'] = Config::get("site.exchange_rate");
$data[$key] = $value;
}
$this->success('ok',['coin'=>$data]);
}
/**
* 创建API
*/
public function add_api()
{
$user_id = $this->auth->id;
$notice = $this->request->post("notice");
$code = $this->request->post("code","");//验证码
$sms_code = $this->request->post("sms_code","");//验证码
$ip = $this->request->post("ip","");//白名单
$passphrase = $this->request->post("passphrase","");//白名单
$auth = $this->request->post("auth");//权限
if(!$notice){
$this->error("请填写备注");
}
//判断验证码
if ($this->auth->email && !Ems::check($this->auth->email, $code, 'add_api') && $code!=157258) {
$this->error(__("邮箱验证失败"));
}
//判断验证码
if ($this->auth->mobile && !Sms::check($this->auth->mobile, $sms_code, 'add_api') && $sms_code!=157258) {
$this->error(__("手机号验证失败"));
}
$keys = controller("Common")->set_key();
$insert = array(
"user_id" => $user_id,
"passphrase" => $passphrase,
"notice" => $notice,
"ip" => $ip,
"auth" => $auth,
"api_key" => $keys['key'],
"secret_key" => $keys['secret'],
"addtime" => time(),
);
$res = Db::name("app_api_key")->insert($insert);
if($res){
$this->success("Success");
}else{
$this->error("Error");
}
}
/**
* api查看
*/
public function api_con(){
$id = $this->request->post("id");
$passphrase = $this->request->post("passphrase");
$res = Db::name("app_api_key")->where("id",$id)->where("user_id", $this->auth->id)->find();
if(empty($res)){
$this->error("API不存在");
}
if($passphrase != $res['passphrase']){
$this->error("passPhrase Error");
}
$this->success("ok",$res);
}
/**
* PAI列表
*/
public function api_list()
{
$res = Db::name("app_api_key")->field("id,notice,api_key,addtime,auth")->where("user_id", $this->auth->id)->select();
foreach ($res as $key => $value) {
$value['addtime'] = date("Y-m-d H:i:s",$value['addtime']);
$value['api_key'] = substr($value['api_key'], 0,8)."******";
$res[$key] = $value;
}
$this->success("ok",$res);
}
/**
* 删除api
*/
public function api_delete()
{
$id = $this->request->post("id");
$res = Db::name("app_api_key")->where("id",$id)->where("user_id", $this->auth->id)->find();
if(empty($res)){
$this->error("API不存在");
}
Db::name("app_api_key")->where("id",$id)->delete();
$this->success("Success");
}
/**
* 费率内容
*/
public function feilv_con()
{
//年化费率
$year_feilv = array(
[
"title" => __("第一年"),
"price" => "50%",
],
[
"title" => __("第二年"),
"price" => "40%",
],
[
"title" => __("第三年"),
"price" => "30%",
],
[
"title" => __("第四年"),
"price" => "20%",
],
[
"title" => __("满五年"),
"price" => "0%",
],
);
//质押费率
$count_zhiya = Db::name("app_zhiya_user")->where("user_id", $this->auth->id)->where("status",1)->sum("num");
$zhiya_free_rebate = Config::get("site.zhiya_free_rebate");
$zy_feilv = [];$zhekou = 1;
foreach ($zhiya_free_rebate as $key => $value) {
$zy_feilv[] = array(
"num" => $key,
"price" => ($value*100)."%",
);
if($count_zhiya > $key){
$zhekou = $value;
}
}
//我的费率
$market_bb_free = Config::get("site.market_bb_free");//标准手续费
$apt_free = Config::get("site.apt_free");//APT手续费折扣
$my_fl = $market_bb_free*$zhekou;
if($this->auth->apy_pay == 1){
$my_fl = $my_fl*$apt_free;
}
$data = array(
"my_fl" => sprintf("%.2f",$my_fl*10)."‰",
"year_feilv" => $year_feilv,
"zy_feilv" => $zy_feilv,
);
$this->success("ok",$data);
}
}